手游开发过程中制作虚拟按钮达到控制角色移动的实现方式

手游开发过程中制作虚拟按钮达到控制角色移动的实现方式

现在大多数手游都会选择摇杆式的操作方式,以便于玩家操作自己的游戏角色,下面和大家分享的正式游戏开发过程中制作虚拟按钮达到控制角色移动的实现方式。

创建Image的UI组件unity快捷键移动,在Image下新建一个Button按钮。在Image 和Button上拖进Sprite图片

电脑快捷复制粘贴键_苹果电脑快捷剪切键_unity快捷键移动

在Button按钮上挂载该脚本:

using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class MyJoystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler {
    public Canvas canvas;
    public static float h;      //h和v的值传回给player脚本,使得物体移动
    public static float v;
    private bool isPress = false;  //Button按钮是否按下
    private Vector2 touchPos = Vector2.zero;  //按下的位置
    void Update() {
        if (isPress)
        {
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                Input.mousePosition, null, out touchPos);
            //根据Canvas和Image的Rectransform位置相减得出
            touchPos += new Vector2(427, 299);  
            float distance = Vector2.Distance(Vector2.zero, touchPos);
            if (distance > 52) {  //限制Button不能超出Image位置(两者位置相减得出52)
                touchPos = touchPos.normalized*52;
                transform.localPosition = touchPos;
            }
            else
            {
                transform.localPosition = touchPos;
            }
            h = touchPos.x / 52;
            v = touchPos.y / 52;
        }
    }
    //鼠标按下时触发
    public void OnPointerDown(PointerEventData eventData) {
        isPress = true;
    }
    //鼠标按键弹起时触发
    public void OnPointerUp(PointerEventData eventData)
    {
        isPress = false;
        transform.localPosition = Vector3.zero;
    }
} 

在玩家身上挂载控制玩家移动的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour {
    public float speed = 0.1f;
    private float h = 0;
    private float v = 0;
    void Update() {
        //首先检测虚拟按键有没有移动,没有再选择键盘输入
        if (Mathf.Abs(MyJoystick.h) > 0 || Mathf.Abs(MyJoystick.v) > 0) {
            h = MyJoystick.h;
            v = MyJoystick.v;
        }
        else{
            h = Input.GetAxis("Horizontal");
            v = Input.GetAxis("Vertical");
        }
        //玩家位置移动
        if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1) {
            Vector3 targetDir = new Vector3(h, 0, v);
            transform.position += targetDir * speed;
            transform.LookAt(transform.position+targetDir);
        }
    }
} 

这样unity快捷键移动3D交通工具像素游戏素材,就能通过按下Button来控制角色移动了。

文章来源:https://gameinstitute.qq.com/community/detail/126793