Jump to content
Unity Insider Forum

GameObject Control movment


kevios105

Recommended Posts

Ich nutze zur Zeit folgendes Script um ein Object zu bewegen:


			Vector3 velocity = new Vector3(MonsterHorizontal.GetAxis(), 0, MonsterVertical.GetAxis());
			velocity = transform.TransformDirection (velocity);
			velocity *= monster.obj.speed;
			monster.obj.transform.rotation = Quaternion.LookRotation(velocity);
			monster.obj.SetVelocity (velocity);

Alles funktioniert soweit ganz gut

Leider schaut bzw richtet sich mein Object nach Links sobald ich den Leftstick Controller von meinem Gamepad los lasse.
Hat jemand vllt eine Idee wie ich mein Problem lösen könnte?

Ich hab mittlerweile schon alles möglich durchsucht und versucht aber komme leider nicht zum gewünschten Ergebnis =/...

HILFE ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich vermute mal der velocity-Vektor wird zum Nullvektor wenn du keinen Input mehr lieferst und damit kommt es dann an dieser Stelle zum Problem:

monster.obj.transform.rotation = Quaternion.LookRotation(velocity);

Damit erzeugst du eine Rotation über einen Nullvektor. Keine Ahnung was das rauskommt, aber vermutlich nicht die Richtung die du haben möchtest...

Eine mögliche Lösung wäre zu prüfen ob dein Spielerinput 0 ist und dann beispielsweise nach "vorn" zu schauen, oder einfach nichts zu machen, wenn kein Input anliegt:

float inputX = MonsterHorizontal.GetAxis();
float inputZ = MonsterVertical.GetAxis();

if (inputX!=0 || inputZ!=0) {
  Vector3 velocity = new Vector3(inputX, 0, inputZ);
  velocity = transform.TransformDirection (velocity);
  velocity *= monster.obj.speed;
  monster.obj.transform.rotation = Quaternion.LookRotation(velocity);
  monster.obj.SetVelocity (velocity);
} 

PS:
Was ist eigentlich dieses MonsterHorizonal? Eine selbst definierte Achse? Kenne nur Input.GetAxis.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank ich werde es gleich einmal ausprobieren sobald ich zuhause bin!

monsterhorizontal ist quasi Input.GetAxis ... MonsterHorizontal ist quasi (keine Ahnung wie man es richtig erklärt) ein Platzhalter man kann im Inspector dann auswählen was MonsterHorizontal seien soll zB der leftcontrolstick auf dem gamepad oder so 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Frage hätte ich allerdings noch...

Und zwar wie kann ich das machen das wenn sich mein Object nicht bewegt es die "Idle" Animation abspielt und nur die "Walk" Animation abspielt sobald ich den Leftstick vom Gamepad bewege (also quasi das Objekt bewege)...

Hier noch einmal das Script:

float inputX = MonsterHorizontal.GetAxis ();
float inputZ = MonsterVertical.GetAxis ();

			if (inputX!=0 || inputZ!=0) {
				Vector3 velocity = new Vector3(inputX, 0, inputZ);
				velocity = transform.TransformDirection (velocity);
				velocity *= monster.obj.speed;
				monster.obj.transform.rotation = Quaternion.LookRotation(velocity);
				monster.obj.SetVelocity (velocity);
				monster.obj.GetComponent<Animator> ().Play ("Walk");
			}

Meine Idle Animation heißt auch "Idle". 

Zur Zeit spielt er einfach nur konstant die Walk Animation ab...

Wäre sehr dankbar wenn man mir hier noch einmal helfen könnte :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Normal sollte man den Animator ja über Zustandsübergänge steuern aber:

float inputX = MonsterHorizontal.GetAxis ();
float inputZ = MonsterVertical.GetAxis ();

if (inputX!=0 || inputZ!=0) {
	Vector3 velocity = new Vector3(inputX, 0, inputZ);
	velocity = transform.TransformDirection (velocity);
	velocity *= monster.obj.speed;
	monster.obj.transform.rotation = Quaternion.LookRotation(velocity);
	monster.obj.SetVelocity (velocity);
	monster.obj.GetComponent<Animator> ().Play ("Walk");
} else {
	monster.obj.GetComponent<Animator> ().Play ("Idle");
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...