Jump to content
Unity Insider Forum

Check Vector Position an einem GameObject über MouseInput


Hermetes

Recommended Posts

Mit Camera.WorldToScreenPoint kannst du die Position eines Objekts auf dem Bildschirm herausfinden. Die kannst du dann mit Input.mousePosition abgleichen. Dann braucht's ein bisschen Code, der

  1. checkt ob die X- oder die Y-Komponente der Differenz höher ist (also ob wir eher horizontal oder vertikal zum Objekt geklickt haben) und
  2. schaut, ob die höhere Komponente positiv oder negativ ist.
public Transform target;

private void Update()
{
  if (Input.GetMouseButtonDown(0))
  {
    PrintMouseDirection();
  }
}

private void PrintMouseDirection()
{
  var objectScreenPoint = Camera.main.WorldToScreenPoint(target.position);
  var distance = Input.mousePosition - objectScreenPoint;
  
  if (Mathf.Abs(distance.x) >= Mathf.Abs(distance.y))
  {
    // horizontal
    if (ditance.x < 0)
    {
      Debug.Log("Left");
    }
    else
    {
      Debug.Log("Right");
    }
  }
  else
  {
    // vertical
    if (ditance.y < 0)
    {
      Debug.Log("Down");
    }
    else
    {
      Debug.Log("Up");
    }
  }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Herzlichen Dank für das scripten Sascha! :) Habe es auch gleich ausprobiert. Und vergessen zu erwähnen, das es sich ja um ein selbst rotierendes Object handelt. Es ist ein NavMesh Agent. Jetzt müsste ich hier: 

Camera.main.WorldToScreenPoint(target.position)

wohl noch sowas wie direction.forward (aus der Luft gegriffen) anbringen. 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht um ein Pferd, das die Animation bekommen soll. Wenn z.B. die distance < 3 ist, dann soll es rückwärts laufen. Links- sowie Rechtsdrehung Animation für Mausposition left, right.
Für die Drehung müsste ich eher an Rigidbody.velocitiy ran, oder? Für das rückwärtslaufen jedoch wäre das WorldToScreenPoint genau das richtige, denke ich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein, dass du dann eigentlich eher den relativen Richtungsvektor der Figur haben möchtest? Also in Abhängigkeit davon, wie sie ausgerichtet ist?

Also nicht "hier auf dem Bildschirm ist das Pferd, du hast rechts daneben geklickt", sondern "dein Klick war auf der rechten Seite des Pferdes"?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Stunden schrieb Hermetes:

Genau das!

Dann wäre es besser, die Position des Mauszeigers in der Welt herauszufinden (statt umgekehrt die Position des Pferdes auf dem Bildschirm), üblicherweise über Raycast.

vor 11 Stunden schrieb Hermetes:

Und am besten die Information herausholen wann der Agent aufhört sich zu drehen, zwecks der Animation.

Da wäre es sinnvoller, nicht den Winkel des Objekts anzuschauen und irgendwie abzuschätzen, wie lange sich das Ding wohl dreht, sondern stattdessen einfach in jedem Frame zu schauen, wie der Winkel zwischen transform.forward (also dem "Vorne") des Pferdes und dem Richtungsvektor von Pferd zu Ziel ist.

vor 11 Stunden schrieb Hermetes:

Ich suche allgemein mehr Infos im Gebiet Rotation, kann das im Scripting API gar nicht so richtig finden.

Da gibt's auch gar nicht so viel. Eine Ausrichtung wird über ein Quaternion dargestellt. Die ganzen Rechnungen, die du dafür hast, stehen dir auf der Seite zu Verfügung. Hin und wieder kann es sinnvoll sein, von oder zu Euler-Winkeln zu konvertieren. Aber das war's dann auch wirklich schon.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...