【发布时间】:2021-11-15 06:59:21
【问题描述】:
我正在开发一款 FPS 游戏,其中包含了敌人死亡和受伤的动画。
一般来说,敌人是在追着玩家(奔跑)。万一被击中,我想暂时停止追击玩家(停留在同一点的时间应该等于“伤害”动画的持续时间),因为目前,敌人作为受伤,身体仍然由于 NavMeshAgent 向玩家移动。
下面是Update()和TakeDamage()方法:
void Update()
{
GetComponent<NavMeshAgent>().destination = player.transform.position;
if(GetComponent<NavMeshAgent>().velocity.magnitude > 1)
{
enemyAnimator.SetBool("isRunning", true);
}
else
{
enemyAnimator.SetBool("isRunning", false);
}
if (enemyAnimator.GetBool("isHit"))
{
enemyAnimator.SetBool("isHit", false);
GetComponent<NavMeshAgent>().enabled = false;
}
}
public void TakeDamage(float damage)
{
health -= damage;
enemyAnimator.SetBool("isHit", true);
// after getting hit, the enemy should not move for the time of hit animation
GetComponent<NavMeshAgent>().enabled = false;
Debug.Log("Enemy health: " + health);
if(health <= 0)
{
enemyAnimator.SetBool("isDying", true);
// here also, some time should pass before the enemy object being destroyed
// Destroy(gameObject);
}
}
我将不胜感激。
【问题讨论】:
-
以前从未使用过
NavMeshAgent,但如果enabled的行为不符合预期,这可能是由于NavMeshAgent 在新路径重新获得后立即重新激活......我认为我的第二个“ workarround" 将简单地用您当前的位置覆盖destination,并且仅当您想再次重新激活代理时将其设置为player.transform.position