Jump to content
Unity Insider Forum

Rotation von geschachtelten Objekten


MuckGames

Recommended Posts

Hallo,

 

ich habe ein Objekt mit einem Child-Objekt darunter. Diese Objekte sollen auf ein weiteres Objekt zeigen. Wobei sich das Parent-Objekt aber nur in der horizontalen und das Child-Objekt nur in der Vertikalen rotieren soll.

 

Ich habe es bereits mit dem folgenden Code hinbekommen, dass sich das Parent-Objekt richtig rotiert:

Vector3 horizontalDirection = tower.Target.transform.position - tower.horizontalRotatablePart.position;
horizontalDirection.y = 0;
Quaternion horizontalRotation = Quaternion.LookRotation(horizontalDirection);
tower.horizontalRotatablePart.rotation = Quaternion.RotateTowards(tower.horizontalRotatablePart.rotation, horizontalRotation, tower.rotationSpeed * Time.deltaTime);

 

Jedoch komm ich nun nicht weiter. Wenn ich den Code in abgeänderter Form auf das Child-Objekt anwende kommt da nur murgs bei raus. Das Objekt dreht sich dann ziemlich wirr. Ich vermute mal, dass es damit zusammen hängt, dass ich das Child-Objekt nur die localRotation ändern muss. Aber dies bekomme ich nicht hin.

 

Kann mir dabei jemand weiterhelfen?

 

Gruß,

MuckGames

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann gut sein, dass das eleganter geht, aber wie wäre es mit

var direction = target - transform.position;
var flatDirection = direction;
flatDirection.y = 0;

var targetDirection = new Vector3(0, flatDirection.magnitude, direction.y);
var targetRotation = Quaternion.LookRotation(targetDirection);
transform.localRotation = Quaternion.RotateTowards(transform.localRotation, targetRotation, speed * Time.deltaTime);

Klappt natürlich nur, wenn der Parent ausschließlich auf der Y-Achse gedreht ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na jedenfalls zuerst das Parentobjekt drehen und dann das Childobjekt, ansonsten kommt murks raus.

 

Ansonsten fürs Child dann halt:

Vector3 verticalDirection = tower.Target.transform.position - tower.verticalRotatablePart.position;
verticalDirection.x = 0;
Quaternion verticalRotation = Quaternion.LookRotation(verticalDirection);
tower.verticalRotatablePart.rotation = Quaternion.RotateTowards(tower.verticalRotatablePart.rotation, verticalRotation, tower.rotationSpeed * Time.deltaTime);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...