c# - UNITY Animation setFloat 无法正常工作
问题描述
我有一个屏幕上的按钮来控制角色的移动,向右走、向左走和跳跃。我的 Walk Left 和 Jump 按钮事件与动画正常工作,但右侧按钮只是移动角色而不播放 walk 动画,我使用 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;
}
}
解决方案
因为您的 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);
这会更好,但不是一个很好的方法,您应该将动画与刚体/变换的实际速度同步,以确保对象的运动和动画之间没有不同步
推荐阅读
- javascript - 如何在无限长的网页上实现流畅的无限自动滚动?
- r - 如果满足条件,tidyverse 结合滞后行值 + 某些字符
- javascript - 如何删除警告“~~没有 onChange 处理程序。” 使用复选框时
- python-3.x - 转换数据框,以便根据条件填充新列
- node.js - 从nodejs缓冲区获取实际数据(数组)
- python - 保存和加载数据框将列表转换为字符串
- java - 从目录读取文件到列表
- node.js - 如何保护节点 js 中的 Web 应用程序?
- java - 为什么数组没有正确返回?
- cookies - SameSite=在 Safari 中打开新标签时未发送严格 Cookie