private Vector3 ComputeVelocity() { Vector3 desiredVelocity = Vector3.Normalize(_currentTargetLocation - NpcManager.transform.position) * NpcManager.GetModelSpeed(NpcGlobalVariables.ChaseAcceleration); Vector3 currentVelocity = NpcManager.Rigidbody.velocity; Vector3 steering = desiredVelocity - currentVelocity; if (steering.magnitude > NpcGlobalVariables.ChaseAcceleration) { steering = (steering / Vector3.Magnitude(steering)) * NpcManager.GetModelSpeed(NpcGlobalVariables.ChaseAcceleration); } Vector3 velocity = currentVelocity + steering; if (Vector3.Magnitude(velocity) > NpcManager.GetModelSpeed(NpcGlobalVariables.ChaseMaxVelocity)) { velocity = (velocity / Vector3.Magnitude(velocity)) * NpcManager.GetModelSpeed(NpcGlobalVariables.ChaseMaxVelocity); } velocity += AvoidObstacles.CalculateMove(NpcManager, velocity) * NpcGlobalVariables.ChaseObstacleAvoidanceMultiplier; velocity.y = 0; return(velocity); }
private Vector3 CalculateVelocity() { Vector3 velocity = _currentTargetNode - NpcManager.transform.position; velocity = Vector3.Normalize(velocity); velocity += AvoidObstacles.CalculateMove(NpcManager, velocity) * NpcGlobalVariables.WanderObstacleAvoidanceMultiplier; velocity.y = 0; return(velocity); }