void MoveTowardsTarget() { Vector3 targetDirection = target - transform.position; FishMovementUtils.MoveTowardsTarget(rb, targetDirection, speed); // face midway between current velocity vector and target: like anticipating a turn Vector3 facingDirection = (rb.velocity + targetDirection) / 2; FishMovementUtils.TurnToFace(rb, transform, facingDirection); }
Vector3 MoveTowardsTarget() { // move towards target along XZ plane Vector3 targetDirection = target - transform.position; Vector3 force = FishMovementUtils.MoveTowardsTarget(rb, targetDirection, speed); force += AdjustAltitude(hoverHeight); // face midway between current velocity vector and target: like anticipating a turn Vector3 facingDirection = (rb.velocity + targetDirection) / 2; FishMovementUtils.TurnToFace(rb, transform, facingDirection); return(force); }
public void UpdateFish() { Vector3 targetVector = (settings.target.position - transform.position) * settings.speed * settings.targetWeight; Vector3 collisionAvoidanceVector = Vector3.zero; Vector3 alignmentVector = Vector3.zero; Vector3 cohesionVector = Vector3.zero; Vector3 separationVector = Vector3.zero; // keep going in the current direction if no target if (settings.targetWeight == 0.0f || IsHeadingForCollision()) { Vector3 collisionAvoidDir = ObstacleRays(); collisionAvoidanceVector = collisionAvoidDir * settings.speed * settings.avoidCollisionWeight; } if (numPerceivedFlockmates != 0) { centreOfFlockmates /= numPerceivedFlockmates; Vector3 offsetToFlockmatesCentre = (centreOfFlockmates - transform.position); alignmentVector = avgFlockHeading * settings.speed * settings.alignWeight; cohesionVector = offsetToFlockmatesCentre * settings.speed * settings.cohesionWeight; separationVector = avgAvoidanceHeading * settings.speed * settings.separateWeight; } Vector3 sumVector = targetVector + collisionAvoidanceVector + alignmentVector + cohesionVector + separationVector; if (sumVector.magnitude > settings.maxSpeed) { sumVector = sumVector * (settings.maxSpeed / sumVector.magnitude); } FishMovementUtils.MoveTowardsTarget(rb, sumVector, settings.speed); FishMovementUtils.TurnToFace(rb, transform, rb.velocity); FishMovementUtils.RotateUpright(rb, transform); }