Я работал над некоторыми вражескими анимациями для боевой игры в Unity и ищу способ заморозить его вращение и движение, когда он входит в определенное состояние.
У врага в аниматоре есть логическая переменная 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);
}
}
Как мне предотвратить вращение и движение во время его состояния атаки?