2016-07-06 16 views
0

So versuche ich, wenn ich links auf ein Objekt klicke, wird 1 zu einer Variablen hinzugefügt, und wenn ich mit der rechten Maustaste darauf klicke, wird 1 subtrahiert von dieser Variable. Der Linksklick funktioniert gut, aber wenn ich mit der rechten Maustaste klicke, passiert nichts.Objekt kann nicht auf Rechtsklick reagieren

public class cs_SliderClick : MonoBehaviour 
{ 

    public int sliderValue; 

    void Start() 
    { 

    } 

    void Update() 
    { 

    } 

    public void OnMouseDown() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      sliderValue += 1; 
     } 

     if (Input.GetMouseButtonDown(1)) 
     { 
      sliderValue -= 1; 
     } 
    } 
} 

Kann mir jemand sagen, was ich hier falsch mache?

Danke.

+1

müssen Sie auf dem MouseButtonUp Ereignisse überprüfen, haben Sie eine einfache Google-Suche erfolgt auf 'C#, wie für rechte Maustaste überprüfen Click' http://stackoverflow.com/questions/19448346/how-to- get-a-right-click-mouse-event-changing-eventargs-to-mouseeventargs-cause – MethodMan

+1

@MethodMan Dies ist für Unity nicht Windows-Formular – Programmer

+1

Windows hat auch ein MouseUp-Ereignis .. eine Google-Suche kommen jetzt .. – MethodMan

Antwort

0

So würde ich empfehlen, innerhalb der Update-Methode die OnMouseDown() Funktion aufzurufen.

public class cs_SliderClick : MonoBehaviour { 

    public int sliderValue; 

    void Start() 
    { 

    } 

    void Update() 
    { 
     OnMouseDown(); 
    } 

    public void OnMouseDown() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      sliderValue += 1; 
     } 

     if (Input.GetMouseButtonDown(1)) 
     { 
      sliderValue -= 1; 
     } 
    } 
} 
+0

Wenn Sie in meiner Antwort auf "editiert" klicken, werden Sie feststellen, dass dies meine erste Antwort war. Ich habe es entfernt, nachdem ich festgestellt habe, dass er keinen Klick erkennen möchte. Hes will will Klick ** auf ein Objekt ** erkennen. Dieser Code funktioniert unabhängig davon, ob auf das Objekt geklickt wird oder nicht. – Programmer

+0

Ich denke diese Lösung funktioniert am besten für mich. Die eine Sache, die merkwürdig ist, ist jedoch, dass wenn ich Linksklick, die Funktion zweimal aufgerufen wird, aber wenn ich mit der rechten Maustaste klicke, wird es nur einmal aufgerufen. Ich werde das weiter untersuchen, aber wenn jemand weiß, warum das passiert, wäre ich daran interessiert zu wissen. Vielen Dank. – MerlinsMaster

+0

Ich denke, das Problem mit dem doppelten Linksklick hat nichts mit diesem Code zu tun. Versuchen Sie vielleicht, diesen Code in einem neuen Projekt zu testen, um zu sehen, ob er korrekt funktioniert. Wenn ja, gibt es vielleicht irgendwo ein zweites Skript, das dich sanft umbringt. –

0

Sie müssen Unity EventSystems verwenden.

Implementieren Sie IPointerClickHandler und überschreiben Sie dann die OnPointerClick-Funktion.

Befestigen Sie PhysicsRaycaster an der Kamera, wenn das GameObject ein 3D-Mesh ist. Wenn dies ein 2D-Spiel ist, dann befestigen Sie Physics2DRaycaster an der Kamera.

Im Folgenden finden Sie Ihre festen Code:

using UnityEngine; 
using System.Collections; 
using UnityEngine.EventSystems; 

public class cs_SliderClick : MonoBehaviour, IPointerClickHandler 
{ 
    public int sliderValue; 

    void Start() 
    { 
     //Attach PhysicsRaycaster to the Camera. Replace this with Physics2DRaycaster if the GameObject is a 2D Object/sprite 
     Camera.main.gameObject.AddComponent<PhysicsRaycaster>(); 
     addEventSystem(); 
    } 

    public void OnPointerClick(PointerEventData eventData) 
    { 
     if (eventData.button == PointerEventData.InputButton.Left) 
     { 
      Debug.Log("Left click"); 
      sliderValue += 1; 
     } 

     else if (eventData.button == PointerEventData.InputButton.Right) 
     { 
      Debug.Log("Right click"); 
      sliderValue -= 1; 
     } 
    } 


    //Add Event System to the Camera 
    void addEventSystem() 
    { 
     GameObject eventSystem = null; 
     GameObject tempObj = GameObject.Find("EventSystem"); 
     if (tempObj == null) 
     { 
      eventSystem = new GameObject("EventSystem"); 
      eventSystem.AddComponent<EventSystem>(); 
      eventSystem.AddComponent<StandaloneInputModule>(); 
     } 
     else 
     { 
      if ((tempObj.GetComponent<EventSystem>()) == null) 
      { 
       tempObj.AddComponent<EventSystem>(); 
      } 

      if ((tempObj.GetComponent<StandaloneInputModule>()) == null) 
      { 
       tempObj.AddComponent<StandaloneInputModule>(); 
      } 
     } 
    } 

} 
+0

Danke. Ich werde es ausprobieren. – MerlinsMaster

Verwandte Themen