Jump to content
Unity Insider Forum

Charakter mit Rücken zur Wand drehen


ONeillsBude

Recommended Posts

Hallo,

ich habe versucht mit meinen Charakter irgendwie zur Wand zu drehen, habe im Internet auf englischen Seiten schon Tipps gefunden wie das geht und habe mir das Script zusammen gebaut:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WandCheck : MonoBehaviour {

	public Transform player;
	RaycastHit hit;
	// Use this for initialization
	void Start () {
		player = GameObject.FindWithTag("PlayerKopf").transform;
	}
	
	// Update is called once per frame
	void Update () 
	{
		Debug.DrawRay (player.transform.position, transform.forward, Color.cyan);
		Vector3 Richtung = Vector3.up - player.transform.position;

		if (Input.GetKeyDown (KeyCode.B)) 
		{
			if (Physics.Raycast (player.transform.position, player.transform.forward, out hit, 0.5f)) 
			{
				var hitRotation = Quaternion.FromToRotation (Richtung, hit.normal);
				transform.rotation = hitRotation;
				Debug.Log (hitRotation);
			}
		}
	}
}

Am Anfang schien es auch zu funktionieren, als ich die erste Wand vor mir ausprobiert hatte, doch irgendwie stellen die anderen Wände meinen Charakter irgendwie schief hin, oder werfen den Charakter komplett auf die Seite. Woran kann es liegen das der Charakter nicht immer zur Wand schaut, wie er soll?

Und wie kann ich den Charakter mit dem Rücken zur Wand drehen?

Wenn ich versuche die transform.rotation.x und z zu ändern, damit mein Charakter wenigstens gerade steht bekomme ich den Error: 

error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.rotation'. Consider storing the value in a temporary variable.

So sieht das dann in meinem Spiel aus: 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb ONeillsBude:

Wenn ich versuche die transform.rotation.x und z zu ändern

Niemals an einem Quaternion selber Werte ändern, das bringt dir nichts, selbst wenn du verstanden hast, wie die Dinger funktionieren ;)

Quaternion.FromToRotation bringt dir hier auch nichts. Was du willst, ist eher

var horizontalNormal = hit.normal;
horizontalNormal.y = 0;
transform.forward = horizontalNormal;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 29 Minuten schrieb Sascha:

Niemals an einem Quaternion selber Werte ändern, das bringt dir nichts, selbst wenn du verstanden hast, wie die Dinger funktionieren ;)

Quaternion.FromToRotation bringt dir hier auch nichts. Was du willst, ist eher


var horizontalNormal = hit.normal;
horizontalNormal.y = 0;
transform.forward = horizontalNormal;

 

Das ist genau das was ich will, vielen Dank!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...