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); } }
//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); }