Ich habe ein frustrierendes Problem mit Animationen. Ich habe eine Laichplattform, der ich Animationen beigefügt habe, und ich möchte die Plattform von ihrer ORIGINAL Y POSITION einmal wenn ein Spieler-Objekt landet, unten bleiben, während der Spieler darauf sitzt, dann zurück bewegen bis zur ursprünglichen Position, wenn der Spieler die Kollision beendet (dh abspringt).Unity, C# - kann das Objekt bei der Kollision nicht EINMALIG von der aktuellen y-Position wegfahren?
Ich habe meine Hoch- und Runteranimationen erstellt und beide auf ONCE mit dem Animation-Fenster eingestellt. Ich zog dann die Plattform zu meinem Projekt, um es zu einem Prefab zu machen, und steckte es wieder in mein Spawn-Skript.
Wenn der Spieler kollidiert (landet auf der Plattform), nenne ich die Nach-unten-Animation hier:
void OnCollisionEnter (Collision col) {
GameObject platform = col.gameObject;
//platform.GetComponent<Animation>().Play ("down1");
if (!playedAnim1) {
platform.GetComponent<Animation>().Play ("down1");
playedAnim1 = true;
}
touchingPlatform = true;
Debug.Log ("entering platform");
}
void OnCollisionExit (Collision col) {
playedAnim1 = false;
GameObject platform = col.gameObject;
//platform.SetActive (false);
//platform.transform.position += new Vector3 (0f, -1f, 0f);
//platform.GetComponent<Animation>().Play ("up1");
touchingPlatform = false;
Debug.Log ("exiting platform");
}
die Animation nur einmal spielen zu machen, habe ich ein boolesches Flag playedAnim1
genannt. Ich würde denken, das würde die Animation nur einmal spielen lassen, aber wenn der Spieler auf der Plattform landet, wird er mehrmals gespielt. Es ist so, als wenn der Spieler auf der Plattform landet, die Plattform bewegt sich nach oben statt nach unten, obwohl die Animation korrekt ist.
Ich habe versucht, nur die col.transform.position
direkt ändern, aber das funktioniert auch nicht. Wie kann ich die Plattform nach unten bewegen und dort bleiben, wenn der Spieler darauf landet, und zurückfahren, wenn er geht?
EDIT: Ich habe Übergänge hier verbunden, mit Down-> Idle unten auf Parameter Bool isDown
zu True, Idle Down-> Up auf Bool IsDown zu False, Up -> Idle Up Parameter bool isUp zu True, Idle up -> Down bool isUp zu false.
Hier ist der Code Ive implementiert:
void OnCollisionEnter (Collision col) {
Debug.Log ("enter");
col.gameObject.GetComponent<Animator>().SetBool ("isUp", false);
animUpSwitch = false;
if (!animDownSwitch) {
animDownSwitch = true;
col.gameObject.GetComponent<Animator>().SetBool ("isDown", true);
col.gameObject.GetComponent<Animator>().Play ("down");
}
touchingPlatform = true;
}
void OnCollisionExit (Collision col) {
Debug.Log ("exit");
animDownSwitch = false;
col.gameObject.GetComponent<Animator>().SetBool ("isDown", false);
if (!animUpSwitch) {
animUpSwitch = true;
col.gameObject.GetComponent<Animator>().SetBool ("isUp", true);
col.gameObject.GetComponent<Animator>().Play ("up");
}
touchingPlatform = false;
}
Und es ist immer noch auf und ab bewegt unkontrollierbar
Vielen Dank. Wie kann ich zu einer Animation wechseln? Gibt es eine Möglichkeit, es in Code zu tun? – skyguy
müssen Sie die Animationsclips in Animator hinzufügen. Nachdem Sie Clips erstellt haben, müssen Sie sie verwalten. Bist du zufällig Animator in der Einheit? Dann würde ich Ihnen vorschlagen, sich die Tutorials anzuschauen und durchzusehen. Es ist wirklich einfach zu implementieren. http://unity3d.com/learn/tutorials/topics/animation Die obige Seite enthält alle notwendigen Informationen. –
Ok. Ich habe mehrere Tutorials dort und auf Youtube mit Animationsübergängen durchgespielt und denke, dass ich sie richtig implementiert habe, aber immer noch nicht den gewünschten Effekt erzielen kann. Ich habe meine Frage aktualisiert - brauche wirklich Hilfe. Es ist sehr schwierig hier zu finden – skyguy