//搜索状态处理函数 void UpdateSeekState() { //如果僵尸感知范围内有玩家,进入追踪状态 targetPlayer = zombieSensor.getNearbyPlayer(); if (targetPlayer != null) { currentState = FSMState.Chase; agent.ResetPath(); return; } //如果僵尸受到攻击,那么向着玩家开枪时所在的方向进行搜索 //并且感知器不能感知到任何玩家 否则僵尸会被放风筝 if (zombieHealth.getDamaged) { Vector3 seekDirection = zombieHealth.damageDirection; agent.destination = zombieTransform.position + seekDirection * seekDistance; //将getDamaged设置为false,表示已经处理了这次攻击 zombieHealth.getDamaged = false; } //如果到达搜索目标,或者卡在某个地方无法到达目标位置,那么回到游荡状态 if (AgentDone() || stopTime > 1.0f) { currentState = FSMState.Wander; agent.ResetPath(); return; } //减速度限制为奔跑速度 setMaxAgentSpeed(runSpeed); //进入狂暴状态 if (zombieRender != null) { zombieRender.SetCrazy(); } //计算停留时间 caculateStopTime(); }
void ZombieSetCrazy() { zombieRender.SetCrazy(); }