我在Unity中制作了一个虚拟操纵杆。不知何故,它没有反应。调试器永远不会输入事件OnPointerDown
,OnPointerUp
和OnDrag
。
这是我的检查员设置的视图
这是我的代码,正如您所看到的,我有一些数据类用于某些数据并在控制器类中调用它。
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;
}
}
如果有人可以帮助我,那会很棒。当我尝试使用操纵杆时,没有任何反应......
答案 0 :(得分:2)
OnPointerDown,OnPointerUp和OnDrag事件永远不会被输入 调试器。
你的场景很可能错过了EventSystem。
要创建EventSystem,请转到 GameObject ---&gt; UI ---&gt; 的EventSystem 。
它将创建一个EventSystem GameObject并将EventSystem
和Standalone Input Module
脚本附加到它。现在应该调用回调函数,否则将Debug.Log
放在其中以确保您的语句正确。