Ejemplo n.º 1
0
    //搜索状态处理函数
    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();
 }