2017-03-03 6 views
1

Ich schreibe gerade eine Einheit C# Skript, die Hauptidee ist, wenn ich auf einen Teil des Modells klicke, wird der Teil markiert, und jetzt möchte ich es zurückgeben in den ursprünglichen Zustand, indem Sie erneut darauf klicken. Wenn ich zum dritten Mal auf das gleiche Teil klicke, sollte es erneut hervorgehoben werden.Wie bekomme ich die Anzahl der Klicks in Einheit C#

Ich weiß nicht, wie es in einem Update zu erreichen() -Methode, da jeder Klick kostet mehrere Frames und ich kann nicht erkennen, welcher Rahmen ist der zweite Klick, 3. Klick usw.

Gibt es eine Möglichkeit zu die Anzahl der Klicks ohne Berücksichtigung von Frames in der Einheit erkennen?

void Update(){ 
    if (Input.GetMouseButton(0)) 
    { 
     RaycastHit hit; 

     if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)){ 
       bone = hit.collider.transform; 
       if (boneList.Contains(bone) != true) 
       { 
        /* if the part is not chosen before, add it to the list and highlight all elements in the list */ 
        boneList.Add(bone); 
        Highlight(boneList); 
       }/*cannot delete the element chosen repetitively*/ 
    } 
}} 
+1

Klingt so, als ob Sie 'Input.GetMouseButtonDown()' (oder 'Input.GetMouseButtonUp()') anstatt 'Input.GetMouseButton()'? – Serlite

+0

@ squill25 Es ist in Ordnung, die Antwort des Programmierers sieht viel umfassender aus als die Zeit, die ich derzeit in einer Antwort einbringen kann. Solange die Frage gelöst ist. = P – Serlite

Antwort

4

Sie sind so nah. Die else-Anweisung sollte zu Ihrem Code hinzugefügt werden. Ihre Logik sollte wie folgt sein:

if(List contains clickedObject){ 
    Remove clickedObject from List 
    UnHighlight the clickedObject 
}else{ 
    Add clickedObject to List 
    Highlight the clickedObject 
} 

Auch, wie Serlite erwähnt, Sie haben GetMouseButtonDown zu verwenden, anstatt GetMouseButton seit GetMouseButtonDown einmal aufgerufen wird, wenn die Taste gedrückt wird, aber GetMouseButton wird jeder Frame genannt, während die Taste gedrückt ist.

Der endgültige Code sollte wie folgt aussehen:

void Update() 
{ 
    if (Input.GetMouseButtonDown(0)) 
    { 
     RaycastHit hit; 

     if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)) 
     { 
      bone = hit.collider.transform; 


      if (boneList.Contains(bone)) 
      { 
       //Object Clicked is already in List. Remove it from the List then UnHighlight it 
       boneList.Remove(bone); 
       UnHighlight(boneList); 
      } 
      else 
      { 
       //Object Clicked is not in List. Add it to the List then Highlight it 
       boneList.Add(bone); 
       Highlight(boneList); 
      } 
     } 
    } 
} 

Sie haben die UnHighlight Funktion zu schreiben, die im Grunde die in Gameobject/Transformation in den Grundzustand übergeben wieder her.

Verwandte Themen