Unity Joystick 虚拟摇杆的实现


直接调用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();
        joystickImg = transform.GetChild(0).GetComponent();
        //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");
        }
    }

}


你可能感兴趣的:(Unity,unity,视频,虚拟摇杆,客户端)