为什么我的动画在 Unity 中倒退?
Why are my animations backwards in Unity?
好的,这是一个视频,显示了非常不言自明的问题
https://youtu.be/7701UK0ijy4
我的问题纯粹是当我切换到 运行 左动画时,它仍然播放 运行 右动画
在阅读此列表之前,请先了解一下,none 它是否有任何效果。
到目前为止,我已经尝试将 Main_Run_Left 的速度设置为 -1。
我检查了镜像框。
我已经删除了所有动画并重新设置它们。
编辑:我将 Running_Left 动画换成了不同的怪物动画,效果还不错吗?因为它正在播放 running_Left 而不是设置了其他怪物动画?就像我简单说的那样,它在向左走的同时又回到了 运行 右边。
public Animator anim;
// Update is called once per frame
void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
if (horizontalMove > .001)
{
anim.SetBool("Running Right", true);
anim.SetBool("Running Left", false);
anim.SetBool("Chillin", false);
}
else if (horizontalMove < -.001)
{
anim.SetBool("Running Left", true);
anim.SetBool("Running Right", false);
anim.SetBool("Chillin", false);
}
else
{
anim.SetBool("Chillin", true);
anim.SetBool("Running Left", false);
anim.SetBool("Running Right", false);
}
你的做法有点奇怪。你有一个向右行走的动画和一个向左行走的动画,尽管它们是彼此的镜像翻转。删除向左行走的动画并将另一个重命名为 'Walking' 怎么样?然后删除动画师中的所有布尔值,并用一个名为 'Moving' 的布尔值替换它们。从 chillin 过渡到 walking 的条件是 'Moving' bool 是否为真,反之亦然。然后在代码中,当水平小于零时翻转精灵。我在下面发布了一个脚本,显示了我在说什么。
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
private float _speed;
private Rigidbody2D _rb;
private Animator _anim;
private SpriteRenderer _sprite;
void Start()
{
_rb = GetComponent<Rigidbody2D>();
_anim = GetComponent<Animator>();
_sprite = GetComponent<SpriteRenderer>();
}
void FixedUpdate()
{
Move();
}
private void Move()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector2 movement = new Vector2(horizontal, vertical);
_rb.velocity = movement * _speed;
_anim.SetBool("Moving", horizontal != 0);
if (horizontal != 0)
Flip(horizontal > 0);
}
private void Flip(bool facingRight)
{
_sprite.flipX = !facingRight;
}
}
好的,这是一个视频,显示了非常不言自明的问题 https://youtu.be/7701UK0ijy4
我的问题纯粹是当我切换到 运行 左动画时,它仍然播放 运行 右动画
在阅读此列表之前,请先了解一下,none 它是否有任何效果。 到目前为止,我已经尝试将 Main_Run_Left 的速度设置为 -1。 我检查了镜像框。 我已经删除了所有动画并重新设置它们。
编辑:我将 Running_Left 动画换成了不同的怪物动画,效果还不错吗?因为它正在播放 running_Left 而不是设置了其他怪物动画?就像我简单说的那样,它在向左走的同时又回到了 运行 右边。
public Animator anim;
// Update is called once per frame
void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
if (horizontalMove > .001)
{
anim.SetBool("Running Right", true);
anim.SetBool("Running Left", false);
anim.SetBool("Chillin", false);
}
else if (horizontalMove < -.001)
{
anim.SetBool("Running Left", true);
anim.SetBool("Running Right", false);
anim.SetBool("Chillin", false);
}
else
{
anim.SetBool("Chillin", true);
anim.SetBool("Running Left", false);
anim.SetBool("Running Right", false);
}
你的做法有点奇怪。你有一个向右行走的动画和一个向左行走的动画,尽管它们是彼此的镜像翻转。删除向左行走的动画并将另一个重命名为 'Walking' 怎么样?然后删除动画师中的所有布尔值,并用一个名为 'Moving' 的布尔值替换它们。从 chillin 过渡到 walking 的条件是 'Moving' bool 是否为真,反之亦然。然后在代码中,当水平小于零时翻转精灵。我在下面发布了一个脚本,显示了我在说什么。
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
private float _speed;
private Rigidbody2D _rb;
private Animator _anim;
private SpriteRenderer _sprite;
void Start()
{
_rb = GetComponent<Rigidbody2D>();
_anim = GetComponent<Animator>();
_sprite = GetComponent<SpriteRenderer>();
}
void FixedUpdate()
{
Move();
}
private void Move()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector2 movement = new Vector2(horizontal, vertical);
_rb.velocity = movement * _speed;
_anim.SetBool("Moving", horizontal != 0);
if (horizontal != 0)
Flip(horizontal > 0);
}
private void Flip(bool facingRight)
{
_sprite.flipX = !facingRight;
}
}