2017-06-23 38 views
1

Ich habe einen virtuellen Joystick in Unity erstellt. Irgendwie reagiert es nicht. Die Ereignisse OnPointerDown, OnPointerUp und OnDrag werden vom Debugger nie eingegeben. Unity Virtual Joystick reagiert nicht

Dies ist eine Ansicht meiner Inspektor Einstellungen

Hierarchy

Canvas

Joystick Background

Joystick Object

Und dies ist mein Code, wie Sie sehen können, habe ich eine Datenklasse für einige Daten und nennen Sie es in der Controller-Klasse.

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

Wäre toll, wenn mir hier jemand helfen könnte. Wenn ich versuche, den Joystick zu verwenden, nur nichts passiert ..

Antwort

1

Die Ereignisse OnPointerDown, OnPointerUp und OnDrag nie von der Debugger eingegeben bekommen.

Ihre Szene fehlt wahrscheinlich das EventSystem.

Um das Eventsystem zu erstellen, gehen Sie zu Gameobject --->UI --->Event.

Es wird ein EventSystem GameObject erstellt und die Skripte EventSystem und Standalone Input Module daran angehängt. Die Callback-Funktionen sollten nun aufgerufen werden, sonst setzen Sie Debug.Log in sie, um sicherzustellen, dass Ihre Aussage korrekt ist.

+0

oh wow .. danke! wusste das nicht – Question3r

+0

Np. für manche Leute ist es neu. – Programmer