2016-10-28 11 views
0

Wenn es ein Klick ist, möchte ich, dass der Charakter zur Mausposition wandert. Aber wenn es die Maustaste gedrückt hält, möchte ich das Zeichen drehen. Aber aus irgendeinem Grund ist es die ganze Zeit im Ruhezustand. Wenn ich also einen Klick mache, springt der Charakter im kleinen Sprung und nicht zur Mausposition.Wie zwischen einem Mausklick und Maus gedrückt halten?

Wenn ich den ganzen Teil des if (Input.GetMouseButton (0)) entfernen werde, dann wird es beim Klicken mit der Maus gut auf die Mausposition gehen, aber sobald er diesen Teil hinzugefügt hat, wird er nicht gehen.

void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.Mouse0)) 
     { 
      _animator.CrossFade("Walk", 0); 
      Plane playerPlane = new Plane(Vector3.up, transform.position); 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      float hitdist = 0.0f; 

      if (playerPlane.Raycast(ray, out hitdist)) 
      { 
       Vector3 targetPoint = ray.GetPoint(hitdist); 
       targetPosition = ray.GetPoint(hitdist); 
       targetRotation = Quaternion.LookRotation(targetPoint - transform.position); 
       destination = targetPosition; 
      } 
     } 

     if (Input.GetMouseButton(0)) 
     { 
      _animator.CrossFade("Idle", 0); 
      RaycastHit hit; 
      Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition); 

      if (Physics.Raycast(ray1, out hit) && hit.collider.name != "ThirdPersonController") 
      { 
       transform.LookAt(hit.point); 
      } 
      else 
      { 
       transform.LookAt(ray1.GetPoint(100)); //the number here is compltely arbitrary 
      } 
     } 
    } 

Antwort

1

Input.GetMouseButton(int) true zurück immer, wenn die Maustaste gedrückt wird. Input.GetMouseButtonDown(int) liefert true nur auf dem ersten Frame, während der die Maustaste geklickt wird. So gegeben

Code, die Möglichkeiten sind:

  • keine Taste gedrückt wird. Keiner der if Blöcke wird eingegeben.
  • Dies ist der exakte Rahmen, wenn die Maustaste geklickt wurde. Beide if Blöcke werden ausgeführt. Ihr Animatorstatus wird auf Walk und dann sofort auf Idle gesetzt und Ihr Charakter bewegt sich nicht.
  • Die Maustaste wurde vor ein paar Frames gedrückt und wird immer noch gedrückt gehalten. Nur der zweite if Block wird ausgeführt. Ihr Animatorstatus ist auf Idle eingestellt und das Zeichen wird nicht verschoben.

Wenn Sie sich entschieden haben, dieses besondere Steuerschema zu verwenden, sollten Sie irgendeine Art von Verzögerung der Umsetzung berücksichtigen - vielleicht Maustaste drückt kürzer als 0,2 s als Klick zählen soll und drückt länger als 0,2 s sollte zählen a halten. Auf diese Weise überschneiden sich Ihre Prädikate nicht.

Verwandte Themen