ユニティでバーチャルジョイスティックを作った。どういうわけか、それは反応しません。 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;
}
}
誰かが私をここで助けてくれたらすごくいいですか?私はOnPointerDown
よろしくお願いします!この知らなかった – Question3r
Np。それはいくつかの人々には新しいものです。 – Programmer