public Vector3 Arrive(Vector3 target) { Vector3 toTarget = target - transform.position; float slowingDistance = 8.0f; float distance = toTarget.magnitude; if (distance == 0.0f) { return(Vector3.zero); } const float DecelerationTweaker = 10.3f; float ramped = maxSpeed * (distance / (slowingDistance * DecelerationTweaker)); float clamped = Math.Min(ramped, maxSpeed); Vector3 desired = clamped * (toTarget / distance); if (Params.drawDebugLines) { LineDrawer.DrawTarget(target, Color.gray); } Utilities.checkNaN(desired); return(desired - velocity); }
public Vector3 Arrive(Vector3 target) { Vector3 desired = target - transform.position; float distance = desired.magnitude; //toTarget.Normalize(); if (drawGizmos) { LineDrawer.DrawTarget(target, Color.red); LineDrawer.DrawSphere(target, arriveSlowingDistance, 20, Color.yellow); } if (distance < 1.0f) { return(Vector3.zero); } float desiredSpeed = 0; if (distance < arriveSlowingDistance) { desiredSpeed = (distance / arriveSlowingDistance) * maxSpeed * (1.0f - arriveDeceleration); } else { desiredSpeed = maxSpeed; } desired *= desiredSpeed; return(desired - velocity); }
Vector3 Seek(Vector3 targetPos) { Vector3 desiredVelocity; desiredVelocity = targetPos - transform.position; desiredVelocity.Normalize(); desiredVelocity *= maxSpeed; if (Params.drawDebugLines) { LineDrawer.DrawTarget(targetPos, Color.red); } return(desiredVelocity - velocity); }
Vector3 Pursue() { Vector3 toTarget = pursuitTarget.transform.position - transform.position; float dist = toTarget.magnitude; float time = dist / maxSpeed; Vector3 targetPos = pursuitTarget.transform.position + (time * pursuitTarget.GetComponent <Boid>().velocity); if (drawGizmos) { LineDrawer.DrawTarget(targetPos, Color.red); LineDrawer.DrawLine(transform.position, targetPos, Color.cyan); } return(Seek(targetPos)); }
Vector3 Wander() { float jitterTimeSlice = Params.GetFloat("wander_jitter") * timeDelta; Vector3 toAdd = UnityEngine.Random.insideUnitSphere * jitterTimeSlice; wanderTargetPos += toAdd; wanderTargetPos.Normalize(); wanderTargetPos *= Params.GetFloat("wander_radius"); Vector3 localTarget = wanderTargetPos + Vector3.forward * Params.GetFloat("wander_distance"); Vector3 worldTarget = transform.TransformPoint(localTarget); if (Params.drawDebugLines) { LineDrawer.DrawTarget(worldTarget, Color.blue); } return(worldTarget - transform.position); }
Vector3 Wander() { float jitterTimeSlice = wanderJitter * timeDelta; Vector3 toAdd = UnityEngine.Random.insideUnitSphere * jitterTimeSlice; wanderTargetPos += toAdd; wanderTargetPos.Normalize(); wanderTargetPos *= wanderRadius; Vector3 localTarget = wanderTargetPos + Vector3.forward * wanderDistance; Vector3 worldTarget = transform.TransformPoint(localTarget); if (drawGizmos) { LineDrawer.DrawTarget(worldTarget, Color.blue); } return(worldTarget - transform.position); }