Unity Virtual Joystick没有反应

时间:2017-06-23 22:22:15

标签: c# unity3d

我在Unity中制作了一个虚拟操纵杆。不知何故,它没有反应。调试器永远不会输入事件OnPointerDownOnPointerUpOnDrag

这是我的检查员设置的视图

Hierarchy

Canvas

Joystick Background

Joystick Object

这是我的代码,正如您所看到的,我有一些数据类用于某些数据并在控制器类中调用它。

public class VirtualJoystickData
{
    private Vector3 inputVector = Vector3.zero;
    public Vector3 InputVector { get { return inputVector; } set { inputVector = value; } } // the movementDirection

    private Image joystickBackgroundImage = GameObject.FindGameObjectWithTag("JoystickBackGroundImage").GetComponent<Image>(); // the joysticks background
    public Image JoystickBackgroundImage { get { return joystickBackgroundImage; } }

    private Image joystickImage = GameObject.FindGameObjectWithTag("Joystick").GetComponent<Image>(); // the joystick object to use
    public Image JoystickImage { get { return joystickImage; } }
}

public class VirtualJoystickController : Monobehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
    private VirtualJoystickData data; // reference to the data class

    private void Start()
    {
        data = new VirtualJoystickData();
    }

    public virtual void OnPointerDown(PointerEventData e) // Click the joystick
    {
        OnDrag(e);
    }

    public virtual void OnPointerUp(PointerEventData e) // leave the joystick
    {
        data.InputVector = Vector3.zero; // reset joystick
        data.JoystickImage.rectTransform.anchoredPosition = Vector3.zero;
    }

    public virtual void OnDrag(PointerEventData e) // drag the joystick
    {
        Vector2 position;
        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(data.JoystickBackgroundImage.rectTransform, e.position, e.pressEventCamera, out position)) // start dragging it
        {
            position.x = (position.x / data.JoystickBackgroundImage.rectTransform.sizeDelta.x);
            position.y = (position.y / data.JoystickBackgroundImage.rectTransform.sizeDelta.y);

            data.InputVector = new Vector3(position.x * 2 + 1, 0, position.y * 2 - 1);
            data.InputVector = data.InputVector.magnitude > 1 ? data.InputVector.normalized : data.InputVector;

            data.JoystickImage.rectTransform.anchoredPosition = new Vector3(
                data.InputVector.x * (data.JoystickBackgroundImage.rectTransform.sizeDelta.x / 3),
                data.InputVector.z * (data.JoystickBackgroundImage.rectTransform.sizeDelta.y / 3));
        }
    }

    public float GetHorizontalInput()
    {
        return data.InputVector.x;
    }

    public float GetVerticalInput()
    {
        return data.InputVector.z;
    }
}
如果有人可以帮助我,那会很棒。当我尝试使用操纵杆时,没有任何反应......

1 个答案:

答案 0 :(得分:2)

  

OnPointerDown,OnPointerUp和OnDrag事件永远不会被输入   调试器。

你的场景很可能错过了EventSystem。

要创建EventSystem,请转到 GameObject ---&gt; UI ---&gt; 的EventSystem

它将创建一个EventSystem GameObject并将EventSystemStandalone Input Module脚本附加到它。现在应该调用回调函数,否则将Debug.Log放在其中以确保您的语句正确。