private void PatrolBehaviour(float deltaTime) { Vector3 nextPosition = guardPosition; if (controller.IsGrounded) { if (patrolPath) { nextPosition = GetCurrentWaypoint(); if (AtWaypoint()) { timeSinceArrivedAtWaypoint = 0; CycleWaypoint(); } } if (timeSinceArrivedAtWaypoint >= waypointDwellTime) { movement.MoveTo(nextPosition); } } timeSinceArrivedAtWaypoint += deltaTime; }
private void ChaseBehaviour(float deltaTime) { if (controller.IsGrounded) { jumpCount = 0; movement.MoveTo(playerTransform.position); if (CanJump() && ShouldJump()) { movement.Jump(); } } controller.TimeSinceLastSawPlayer = 0; }
void Update() { switch (state) { default: case State.Roaming: AIMovement.MoveTo(roamPosition, ship, dampingOnTurning); Debug.DrawLine(transform.position, roamPosition, Color.green); float reachedPositionDistance = 10f; if (Vector3.Distance(transform.position, roamPosition) < reachedPositionDistance) { // Reached roam position, thus getting new roam position roamPosition = AIMovement.GetRoamingPosition(transform.position); } GameObject player = GameObject.FindGameObjectWithTag("PlayerTag"); FindTarget(player); break; case State.ChaseTarget: // Look at player // If within shootingRange of player, stop and shoot at it // Otherwise move towards player // TODO: Think of a better way to calculate accuracy, also use player's speed in calculation. // Choose a random position around the player where AI will shoot. Vector3 targetPosition = Random.insideUnitSphere * (35 * (1 / shootingAccuracy)) + currentTarget.transform.position; var rotation = Quaternion.LookRotation(targetPosition - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * dampingOnTurning); if (Vector3.Distance(targetPosition, transform.position) < shootingRange) { ship.Stabilise(); weaponSystem.ShootGuns(ship.currentVelocity); } else { Debug.DrawLine(transform.position, targetPosition, Color.green); AIMovement.MoveTo(targetPosition, ship, dampingOnTurning); } break; } }