void Start() { passEnum = GetComponent <AIScript2>(); animator = GetComponent <Animator>(); lastWaypointIndex = waypoints.Count - 1; //minusing by 1 because waypoints system starts at 0 targetWaypoint = waypoints[targetWaypointIndex]; //matching the transform to the waypointsindex currentWaypointAI = WaypointAI.Introduction; }
void UpdateTargetWaypoint() { if (targetWaypointIndex > lastWaypointIndex) //if the last target waypoint has been reached this object will stop { animator.SetInteger("Action", 0); targetWaypointIndex = 7; passEnum.currentAIStates = AIScript2.AIStates.InspectingDoor; currentWaypointAI = WaypointAI.Introduction; targetWaypointIndex = 0; } targetWaypoint = waypoints[targetWaypointIndex]; //this will update a new target waypoint if the previous waypoint has been reached }
void Update() { movementStep = speed * Time.deltaTime; switch (currentWaypointAI) { case WaypointAI.Introduction: //calcuating direction for AI to face door Vector3 directionToDoor = doorTransform.position - transform.position; Quaternion rotateToDoor = Quaternion.LookRotation(directionToDoor); animator.SetInteger("Action", 1); transform.rotation = rotateToDoor; transform.position = Vector3.MoveTowards(transform.position, frontOfDoor.position, movementStep); if (Vector3.Distance(transform.position, frontOfDoor.position) <= 0.2f) { currentWaypointAI = WaypointAI.Idle; } break; case WaypointAI.Idle: animator.SetInteger("Action", 0); break; case WaypointAI.Roaming: animator.SetInteger("Action", 1); distance = Vector3.Distance(transform.position, targetWaypoint.position); CheckDistanceToWaypoint(distance); //calcuating direction to waypoints Vector3 directionToWaypoint = targetWaypoint.position - transform.position; Quaternion rotationToTarget = Quaternion.LookRotation(directionToWaypoint); transform.rotation = rotationToTarget; transform.position = Vector3.MoveTowards(transform.position, targetWaypoint.position, movementStep); break; case WaypointAI.ExitPortal: //calcuating direction for AI to face door Vector3 directionToPortal = portalTransform.position - transform.position; Quaternion rotateToPortal = Quaternion.LookRotation(directionToPortal); animator.SetInteger("Action", 1); transform.rotation = rotateToPortal; transform.position = Vector3.MoveTowards(transform.position, portalTransform.position, movementStep); if (Vector3.Distance(transform.position, portalTransform.position) <= 0.2f) { currentWaypointAI = WaypointAI.Idle; } break; } }