角色移动,改变玩家动画

本文关键字:玩家 动画 改变 移动 角色 | 更新日期: 2023-09-27 18:17:10

我制作了一个移动角色和设置动画的脚本。当玩家想要向右移动时,动画将设置为角色面向右侧并行走的动画。一切都很完美,直到你想同时向两个方向移动,比如向上和向左。角色是这两种力量的产物,但动画正在变得疯狂。我对此做了快速修复,不允许在任何其他动画播放时播放左,右。我在想这样的事情:当你向右走的时候,你是面向右边的。继续前进,然后你按下向上按钮,你将进入东北方向,但你仍然面向右。所以你要面对你想要先走的那一边,在这个例子中是对的。

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);
        }
    }
}

角色移动,改变玩家动画

我知道了。

    void movement_animation()
{
    if(right && !left && !up && !down)
    {
        GetComponent<Animator>().Play("go_right", 0);
    }
    if (left && !right && !up && !down)
    {
        GetComponent<Animator>().Play("go_left", 0);
    }
    if (up && !down && !left && !right)
    {
        GetComponent<Animator>().Play("go_up", 0);
    }
    if (down && !up && !left && !right)
    {
        GetComponent<Animator>().Play("go_down", 0);
    }
}

void movement_animation()
{
    if(right && !left && !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 && !right && !up && !down)
    {
        GetComponent<Animator>().Play("go_left", 0);
    }
    if (up && !down && !left && !right)
    {
        GetComponent<Animator>().Play("go_up", 0);
    }
    if (down && !up && !left && !right)
    {
        GetComponent<Animator>().Play("go_down", 0);
    }
}