//游荡状态处理函数 void UpdateWanderState() { //感知到周围有活着的玩家,进入追踪状态 if (GameManager.gm.getCurStateName() != "end") { targetPlayer = zombieSensor.getNearbyPlayer(); if (targetPlayer != null) { currentState = FSMState.Chase; agent.ResetPath(); return; } //如果受到伤害,那么进入搜索状态 if (zombieHealth.getDamaged) { currentState = FSMState.Seek; agent.ResetPath(); return; } } //如果没有目标位置,那么随机选择一个目标位置 if (AgentDone()) { Vector3 randomRange = new Vector3((Random.value - 0.5f) * 2 * wanderScope, 0, (Random.value - 0.5f) * 2 * wanderScope); Vector3 nextDestination = zombieTransform.position + randomRange; agent.destination = nextDestination; } //限制游荡的速度 setMaxAgentSpeed(wanderSpeed); //统计僵尸在当前位置附近的停留时间 caculateStopTime(); // 如果在一个地方停留太久(各种原因导致僵尸卡住) // 那么选择僵尸背后的一个位置当做下一个目标 if (stopTime > 1.0f) { Vector3 nextDestination = zombieTransform.position - zombieTransform.forward * (Random.value) * wanderScope; agent.destination = nextDestination; } //进入普通状态 if (zombieRender != null) { zombieRender.SetNormal(); } }
void ZombieSetNormal() { zombieRender.SetNormal(); }