Ejemplo n.º 1
0
    public override void AIbehavior()
    {
        if (!isScreamed)
        {
            Screaming();
        }
        else
        {
            animator.SetBool("Scream", false);

            if (zombieAI.target == null)
            {
                zombieAI.SetZombieState(zombieAI.partolState);
                return;
            }
            if (!zombieAI.navMeshAgent.isOnNavMesh || zombieAI.patrolSettings.waypoints.Length == 0)
            {
                return;
            }
            zombieAI.navMeshAgent.SetDestination(zombieAI.target.position);

            zombieAI.LookAtPosition(zombieAI.navMeshAgent.steeringTarget);

            zombieAI.zombieAudio.PlayZombieWalkSound();
            //走到玩家面前了
            if (zombieAI.navMeshAgent.remainingDistance <= zombieAI.attackSettings.attackRange - 1)
            {
                zombieAI.walkingToDest = false;
                zombieAI.forward       = 0;
                Attacking();
            }
            else
            {
                zombieAI.walkingToDest = true;
                zombieAI.forward       = zombieAI.LerpSpeed(zombieAI.forward, 1f, 15);
                animator.SetBool("Attack", false);
            }
            zombieMove.JustAnimate(zombieAI.forward, 0);
        }
    }
Ejemplo n.º 2
0
    //AI逻辑行为:巡逻
    public override void AIbehavior()
    {
        //如果不存在寻路代理,或者巡逻点为0,则返回
        if (!zombieAI.navMeshAgent.isOnNavMesh || zombieAI.patrolSettings.waypoints.Length == 0)
        {
            return;
        }

        zombieAI.navMeshAgent.SetDestination(zombieAI.patrolSettings.waypoints[waypointIndex].destination.position);
        zombieAI.LookAtPosition(zombieAI.navMeshAgent.steeringTarget);
        zombieAI.zombieAudio.PlayZombieWalkSound();

        //走到一个点,走向下一个点
        if (zombieAI.navMeshAgent.remainingDistance <= zombieAI.navMeshAgent.stoppingDistance)
        {
            zombieAI.walkingToDest = false;
            zombieAI.forward       = zombieAI.LerpSpeed(zombieAI.forward, 0, 15); //停下
            currentWaitTime       -= Time.deltaTime;                              //等待
            if (zombieAI.patrolSettings.waypoints[waypointIndex].lookAtTarget != null)
            {
                zombieAI.SetLookAtTransfrom(zombieAI.patrolSettings.waypoints[waypointIndex].lookAtTarget);
            }
            if (currentWaitTime <= 0)
            {
                waypointIndex   = (waypointIndex + 1) % zombieAI.patrolSettings.waypoints.Length;
                currentWaitTime = zombieAI.patrolSettings.waypoints[waypointIndex].waitTime;
            }
        }
        else//走向目标点
        {
            zombieAI.walkingToDest = true;
            zombieAI.forward       = zombieAI.LerpSpeed(zombieAI.forward, 0.5f, 15);
            currentWaitTime        = zombieAI.patrolSettings.waypoints[waypointIndex].waitTime;
        }
        zombieMove.AnimateAndMove(zombieAI.forward, 0);
    }