角色移动,改变玩家动画
本文关键字:玩家 动画 改变 移动 角色 | 更新日期: 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);
}
}