unity3d - Animator 参数不会改变 Unity2D
问题描述
你好
我试图为我的角色添加动画过渡,所以写了一些代码:
void Update()
{
Vector3 characterScale = transform.localScale;
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKeyDown(KeyCode.Space) && Cground == true)
{
rb.AddForce(new Vector2(0f, jumpheight), ForceMode2D.Impulse);
Cground = false;
}
transform.localScale = characterScale;
}
问题
我的问题是,速度参数仅适用于通过按 D 向右行走时的动画过渡。如果我然后按 A 向左行走,我的角色精灵会翻转,他会移动,但不会过渡到跑步动画。我不知道为什么,我会很高兴得到任何帮助 =)。
解决方案
你的问题是else
案例!
想想如果你只按下会发生什么A
: 那你就没有按下D
。
这意味着你做的最后一件事是
else animator.SetFloat("speed", 0);
所以重置你刚刚为A
印刷机改变的速度。
您应该将支票更改为例如
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
// Only do this if none of the move keys is pressed
animator.SetFloat("speed", 0);
}
因为显然无论如何你在这两种情况下都会做 se 。
或者实际上我认为您在按下 时宁愿移动到另一个方向A
。
那我还是会做
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.left * Time.deltaTime * velocity);
}
else if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
animator.SetFloat("speed", 0);
}
推荐阅读
- javascript - Cheerio:循环遍历子元素并调用 html()
- python - 带有标签框的 tkinter 页面布局
- php - PHP解码base64 API对数组的响应
- javascript - 如何在 Nextjs、Reactjs 中的 getInitialProps 之前渲染组件
- r - 使用自写函数时小标题和数据帧的区别
- python - Python:'if...or'条件中的监护人参数
- django - Nginx build_absolute_uri 后面的 Django 返回 http://host/
- rust - “不能返回引用临时值的值”和 Rust 中的内部可变性
- python - 多阶段 Dockerfile Python
- html - 为什么我的 CSS 响应规则没有被应用?