Unity Joystick 虚拟摇杆的实现

来源:互联网 发布:java实现国际化 编辑:程序博客网 时间:2024/06/09 23:24


直接调用VirtualJoystick.cs中的公有horizontal 和 Vertical方法来获得原点中心按钮距离圆心的位置。

教学视频看本链接:

制作虚拟摇杆的视频(需要科学上网)


先贴代码:

VirtualJoystick.cs


using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.EventSystems;public class VirtualJoystick : MonoBehaviour , IDragHandler, IPointerDownHandler, IPointerUpHandler{    private Image bgImg;    private Image joystickImg;    private Vector3 inputVector;    private void Start() {        bgImg = GetComponent<Image>();        joystickImg = transform.GetChild(0).GetComponent<Image>();        //Debug.Log(bgImg);        //Debug.Log(joystickImg);    }    public virtual void OnPointerDown(PointerEventData ped)    {        OnDrag(ped);    }    public virtual void OnPointerUp(PointerEventData ped)    {        inputVector = Vector3.zero;        joystickImg.rectTransform.anchoredPosition = inputVector;    }    public virtual void OnDrag(PointerEventData ped)    {        Vector2 pos;        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(bgImg.rectTransform                                                                    , ped.position                                                                    , ped.pressEventCamera                                                                    , out pos                                                                   ))        {            pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);            pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);            pos.x = pos.x * 2 + 1;            pos.y = pos.y * 2 - 1;            inputVector = new Vector3(pos.x, 0, pos.y);            inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;            joystickImg.rectTransform.anchoredPosition =                new Vector3(inputVector.x * (bgImg.rectTransform.sizeDelta.x / 3), inputVector.z * (bgImg.rectTransform.sizeDelta.y / 3), 0);        }    }    public float Horizontal() {        if (inputVector.x != 0) {            return inputVector.x;        }        else{            return Input.GetAxis("Horizontal");        }    }    public float Vertical()    {        if (inputVector.z != 0)        {            return inputVector.z;        }        else {           return  Input.GetAxis("Vertical");        }    }}