Ich machte ein Skript zum Verschieben des Zeichens und Einstellung der Animation. Wenn der Spieler nach rechts gehen möchte, wird die Animation in die mit dem Charakter auf der rechten Seite und dem Gehen eingestellt. Alles funktioniert perfekt, bis Sie sich in zwei Richtungen auf einmal bewegen wollen, sagen wir oben und links. Der Charakter geht durch die zwei Kräfte, aber die Animation wird verrückt. Ich habe Quickfix dafür gemacht, indem ich nicht links oder rechts spielen lasse, wenn irgendeine andere Animation spielt. Ich dachte über so etwas nach: Wenn Sie richtig gehen, sind Sie auf der rechten Seite. Immer noch, dann drückst du den Knopf hoch, du gehst in die Nordostseite, aber du hast immer noch nach rechts. Sie stehen also vor der Seite, auf der Sie zuerst gehen wollten, in diesem Beispiel richtig.Charakter Bewegung, Spieler Animation ändern
using UnityEngine;
using System.Collections;
public class player_movement : MonoBehaviour {
//przyciski do poruszania się
private KeyCode right_key = KeyCode.D;
private KeyCode left_key = KeyCode.A;
private KeyCode up_key = KeyCode.W;
private KeyCode down_key = KeyCode.S;
//poruszanie się gracza right == true => porusza się w prawo, left == true => porusza się w lewo; itp..
private bool right;
private bool left;
private bool up;
private bool down;
player_statistics player; //zmienna przechowująca klasę? odnośnik do klasy? (yy nie wiem jak to nazwać)
void Start()
{
//przypisanie klasy do zmiennej, funkcji, klasy, no właśnie
player = GameObject.FindWithTag("Player").GetComponent<player_statistics>();
}
void Update()
{
movement_xy(); //wowołanie fukncji odp za wykrycie wciśnięcia klawiszy odp za poruszanie się
movement_animation();
}
void FixedUpdate()
{
if (right || left || up || down) //wywołanie funkcji odp poruszanie się
{
movement_force();
}
}
void movement_xy()
{
//ustawienie zmiennej odpowiedzialnej za ruch w prawo
if (Input.GetKeyDown(right_key))
{
right = true;
}
if (Input.GetKeyUp(right_key))
{
right = false;
GetComponent<Animator>().Play("idle_right", 0);
}
//ustawienie zmiennej odpowiedzialnej za ruch w lewo
if (Input.GetKeyDown(left_key))
{
left = true;
}
if (Input.GetKeyUp(left_key))
{
left = false;
}
//ustawienie zmiennej odpowiedzialnej za ruch w górę
if (Input.GetKeyDown(up_key))
{
up = true;
}
if (Input.GetKeyUp(up_key))
{
up = false;
GetComponent<Animator>().Play("idle_up", 0);
}
//ustawienie zmiennej odpowiedzialnej za ruch w dół
if (Input.GetKeyDown(down_key))
{
down = true;
}
if (Input.GetKeyUp(down_key))
{
down = false;
GetComponent<Animator>().Play("idle_down", 0);
}
}
void movement_force()
{
// przykładanie do postaci danej sił fizycznej na osi X i Y
if (left && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.x > -5)
{
player.player_rigidbody.AddForce(new Vector2(-player.movement_speed, 0), ForceMode2D.Impulse);
}
if (right && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.x < 5)
{
player.player_rigidbody.AddForce(new Vector2(player.movement_speed, 0), ForceMode2D.Impulse);
}
if (up && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.y < 5)
{
player.player_rigidbody.AddForce(new Vector2(0, player.movement_speed), ForceMode2D.Impulse);
}
if (down && player.player_gameobject.GetComponent<Rigidbody2D>().velocity.y > -5)
{
player.player_rigidbody.AddForce(new Vector2(0, -player.movement_speed), ForceMode2D.Impulse);
}
}
void movement_animation()
{
if(right && !up && !down) //quick fix, not like this helped but character animation isnt in crazy angry kid state
{
GetComponent<Animator>().Play("go_right", 0);
}
if (left && !up && !down)
{
GetComponent<Animator>().Play("go_left", 0);
}
if (up)
{
GetComponent<Animator>().Play("go_up", 0);
}
if (down)
{
GetComponent<Animator>().Play("go_down", 0);
}
}
}
Sie könnten das vereinfachen, indem Sie else if verwenden und den nachfolgend getesteten Wert in seiner vorherigen if-Anweisung entfernen. – Alox