2017-06-23 28 views
1

ユニティでバーチャルジョイスティックを作った。どういうわけか、それは反応しません。 OnPointerDown,OnPointerUpOnDragというイベントは、デバッガによって入力されることはありません。ユニティバーチャルジョイスティックが反応しません

これは私のインスペクタのビューが

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; 
    } 
} 

誰かが私をここで助けてくれたらすごくいいですか?私はOnPointerDown

答えて

1

...ただ何も起こりませんジョイスティックを使用して、イベントをしようとすると、OnPointerUpとOnDragは デバッガによって入力されない飽きません。

シーンにEventSystemがない可能性があります。 EventSystem、ゲームオブジェクトに行く--->UI --->EventSystemを作成するには

EventSystem GameObjectを作成し、EventSystemStandalone Input Moduleのスクリプトを添付します。コールバック関数が呼び出されるはずです。それ以外の場合はDebug.Logを入れて、ステートメントが正しいことを確認してください。

+0

よろしくお願いします!この知らなかった – Question3r

+0

Np。それはいくつかの人々には新しいものです。 – Programmer

関連する問題