我有一个屏幕上的按钮,用于控制角色的移动,向右行走,向左行走和跳转。我的“向左步行”和“跳转”按钮事件在动画中正常运行,但是向右按钮只是在移动角色而不播放步行动画,我使用setFloat来检测角色的运动,请帮助我确定为什么向右步行动画不起作用玩。
我的运动控件脚本:
void Movement()
{
if (RightPressed)
{
target.Translate(Vector2.right * 3f * Time.deltaTime);
target.eulerAngles = new Vector2(0, 0);
}
if (LeftPressed)
{
target.Translate(-Vector2.right * 3f * Time.deltaTime);
target.eulerAngles = new Vector2(0, 0);
}
if (SpacePressed && isJumping == true)
{
if (jumpTimeCounter > 0)
{
rb.velocity = Vector2.up * jumpForce;
rb.freezeRotation = true;
jumpTimeCounter -= Time.deltaTime;
anim.SetBool("IsJumping", true);
}
else
{
isJumping = false;
}
}
}
我的更新功能:
void Update () {
Movement();
{
if (RightPressed)
anim.SetFloat("speed", 0.1f);
else
anim.SetFloat("speed", 0.0f);
if (LeftPressed)
anim.SetFloat("speed", -0.1f);
else
anim.SetFloat("speed", 0.0f);
isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);
}
}
我在屏幕上按钮的功能
public void OnScreenButtonChange(string dir)
{
switch (dir)
{
case "A":
LeftPressed = !LeftPressed;
break;
case "D":
RightPressed = !RightPressed;
break;
case "Space":
SpacePressed = !SpacePressed;
break;
}
}
答案 0 :(得分:2)
因为您的RightPressed代码块被LeftPressed代码块覆盖,
基本上,如果您愿意像这样
if (LeftPressed)
anim.SetFloat("speed", -0.1f);
else
anim.SetFloat("speed", 0.0f);
if (RightPressed)
anim.SetFloat("speed", 0.1f);
else
anim.SetFloat("speed", 0.0f);
您会注意到问题已经逆转,在两种情况下都使用必须为false或true的布尔值,并且当LeftPressed为false时,您仍将动画速度更新为0.0f,覆盖RightPressed中设置的内容,您要做的就是更改组织代码的方式
if (LeftPressed)
anim.SetFloat("speed", -0.1f);
if (RightPressed)
anim.SetFloat("speed", 0.1f);
if ((!LeftPressed && !RightPressed) || (LeftPressed && RightPressed))
anim.SetFloat("speed", 0.0f);
这将更好地工作,但不是一个很好的方法,您应该将动画与刚体/变换的实际速度同步,以确保对象的运动与动画之间没有不同步