【发布时间】:2021-12-31 12:47:02
【问题描述】:
我是一名 3D 艺术家,我很难理解编程,但我正在努力。
一个多星期以来,我一直无法找到一个简单的解决方案来解决如何在播放攻击动画时冻结布尔值。由于我使用的是“更新”,因此按下“fire1”会在很短的时间内切换 bool,我需要它一直工作到攻击动画结束。
谢谢!
void Update () {
// WASD
float Horizontal = Input.GetAxis("Horizontal");
float Vertical = Input.GetAxis("Vertical");
Vector3 move = Quaternion.Euler (0, playerCamera.transform.eulerAngles.y, 0) * new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
controller.Move(move * Time.deltaTime * playerSpeed);
if (move != Vector3.zero)
{
gameObject.transform.forward = move;
animator.SetBool("Walk", true);
}
else
{
animator.SetBool("Walk", false);
}
// Attack
if (Input.GetButtonDown("Fire1"))
{
playerSpeed = 0f;
animator.SetBool("Attack", true);
animator.SetBool("Walk", false);
}
else
{
playerSpeed = 2f;
animator.SetBool("Attack", false);
}
}
【问题讨论】:
-
为什么?你为什么不简单地配置你从
Attack到Idle的转换,只在攻击动画完成后发生,而不依赖于Attackbool? -
我们一般
Input.GetButtonDown是true仅在按下键的单个帧中.. 您的else块在所有其他帧中执行并重置布尔值参数... -
动画按预期工作,重点是防止角色在攻击过程中移动。
标签: c# unity3d boolean animator