【发布时间】:2019-04-11 15:53:29
【问题描述】:
我一直在为 Unity 中的战斗导向游戏制作一些敌人动画,并且正在寻找一种方法来在他进入特定状态时冻结他的旋转和动作。
敌人在他的 Animator 中有一个布尔变量,称为 isAttacking。 isAttacking 由代码开启,让他挥动斧头。
问题是,如果玩家靠近,我编写的 AI(在教程的大力帮助下)会使他旋转。我不希望他在攻击动画期间旋转。
this.transform.rotation =
Quaternion.Slerp(this.transform.rotation,
Quaternion.LookRotation(direction),
0.1f);
这是让他旋转的一段代码。如果玩家在他的 10 个单位内,则激活此代码。
我尝试了一些像这样的大杂烩方法:
if (Anim.GetBool("isAttacking") == true) {
this.transform.rotation =
Quaternion.Slerp(this.transform.rotation,
Quaternion.LookRotation(direction),
0.1f);
}
我还尝试将刚体设置为暂时禁用旋转
if (Anim.GetBool("isAttacking") == true) {
Rigid.freezeRotation = true;
}
else {
Rigid.freezeRotation = false;
}
这两种方法都不适合我。
我没有要求冻结他的议案。
这是运行 AI 的代码
private void Update()
{
if (Vector3.Distance(player.position, this.transform.position) < 10)
{
Vector3 direction = player.position - this.transform.position;
direction.y = 0;
this.transform.rotation = Quaternion.Slerp(this.transform.rotation,
Quaternion.LookRotation(direction), 0.1f);
Anim.SetBool("isIdle", false);
if (direction.magnitude > 1)
{
this.transform.Translate(0, 0, 0.07f);
Anim.SetBool("isWalking", true);
Anim.SetBool("isAttacking", false);
}
else
{
Anim.SetBool("isAttacking", true);
Anim.SetBool("isWalking", false);
}
}
else
{
Anim.SetBool("isIdle", true);
Anim.SetBool("isWalking", false);
Anim.SetBool("isAttacking", false);
}
}
如何防止他在攻击状态下的旋转和移动?
【问题讨论】:
-
为什么不制作动画来处理旋转而不是硬编码旋转?