RVO Character Controller.
Similar to Unity's CharacterController. It handles movement calculations and takes other agents into account. It does not handle movement itself, but allows the calling script to get the calculated velocity and use that to move the object using a method it sees fit (for example using a CharacterController, using transform.Translate or using a rigidbody).
public void Update () {
var targetPoint = transform.position + transform.forward * 100;
controller.SetTarget(targetPoint, 10, 12);
var delta = controller.CalculateMovementDelta(transform.position, Time.deltaTime);
transform.position = transform.position + delta;
}
For documentation of many of the variables of this class: refer to the Pathfinding.RVO.IAgent interface.
- Note
- Requires a single RVOSimulator component in the scene
- See also
- Pathfinding.RVO.IAgent
-
RVOSimulator
-
Local Avoidance
- A* Pro Feature:
- This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here
|
Vector3 | CalculateMovementDelta (float deltaTime) |
| Direction and distance to move in a single frame to avoid obstacles. More...
|
|
Vector3 | CalculateMovementDelta (Vector3 position, float deltaTime) |
| Direction and distance to move in a single frame to avoid obstacles. More...
|
|
void | ForceSetVelocity (Vector3 velocity) |
|
void | Move (Vector3 vel) |
| Set the desired velocity for the agent. More...
|
|
void | SetCollisionNormal (Vector3 normal) |
| Set the normal of a wall (or something else) the agent is currently colliding with. More...
|
|
void | SetTarget (Vector3 pos, float speed, float maxSpeed) |
| Set the target point for the agent to move towards. More...
|
|
void | Teleport (Vector3 pos) |
| Teleport the agent to a new position. More...
|
|
Vector2 | To2D (Vector3 p) |
| Converts a 3D vector to a 2D vector in the movement plane. More...
|
|
Vector2 | To2D (Vector3 p, out float elevation) |
| Converts a 3D vector to a 2D vector in the movement plane. More...
|
|
Vector3 | To3D (Vector2 p, float elevationCoordinate) |
| Converts a 2D vector in the movement plane as well as an elevation to a 3D coordinate. More...
|
|
|
IAstarAI | ai [get, set] |
| Cached reference to a movement script (if one is used) More...
|
|
float | center [get, set] |
| Center of the agent relative to the pivot point of this game object. More...
|
|
bool | enableRotation [get, set] |
|
float | height [get, set] |
| Height of the agent in world units. More...
|
|
LayerMask | mask [get, set] |
|
float | maxSpeed [get, set] |
|
MovementPlane | movementPlane [get] |
| Determines if the XY (2D) or XZ (3D) plane is used for movement. More...
|
|
Vector3 | position [get] |
| Current position of the agent. More...
|
|
float | radius [get, set] |
| Radius of the agent in world units. More...
|
|
float | rotationSpeed [get, set] |
|
IAgent | rvoAgent [get, private set] |
| Reference to the internal agent. More...
|
|
ISimulator | simulator [get, private set] |
| Reference to the rvo simulator. More...
|
|
Vector3 | velocity [get, set] |
| Current calculated velocity of the agent. More...
|
|
int Util.IEntityIndex. | EntityIndex [get, set] |
| Internal entity index used by #BurstBatchHelper. More...
|
|
int | EntityIndex [get, set] |
|
void SetCollisionNormal |
( |
Vector3 |
normal | ) |
|
Set the normal of a wall (or something else) the agent is currently colliding with.
This is used to make the RVO system aware of things like physics or an agent being clamped to the navmesh. The velocity of this agent that other agents observe will be modified so that there is no component into the wall. The agent will however not start to avoid the wall, for that you will need to add RVO obstacles.
This value will be cleared after the next simulation step, normally it should be set every frame when the collision is still happening.
void SetTarget |
( |
Vector3 |
pos, |
|
|
float |
speed, |
|
|
float |
maxSpeed |
|
) |
| |
Set the target point for the agent to move towards.
Similar to the Move method but this is more flexible. It is also better to use near the end of the path as when using the Move method the agent does not know where to stop, so it may overshoot the target. When using this method the agent will not overshoot the target. The agent will assume that it will stop when it reaches the target so make sure that you don't place the point too close to the agent if you actually just want to move in a particular direction.
The target point is assumed to stay the same until something else is requested (as opposed to being reset every frame).
- Parameters
-
pos | Point in world space to move towards. |
speed | Desired speed in world units per second. |
maxSpeed | Maximum speed in world units per second. The agent will use this speed if it is necessary to avoid collisions with other agents. Should be at least as high as speed, but it is recommended to use a slightly higher value than speed (for example speed*1.2). |
- See also
- Also take a look at the documentation for #IAgent.SetTarget which has a few more details.
-
Move
float flowFollowingStrength = 0.0f |
Determines how strongly this agent just follows the flow instead of making other agents avoid it.
The default value is 0, if it is greater than zero (up to the maximum value of 1) other agents will not avoid this character as much. However it works in a different way to #Priority.
A group of agents with FlowFollowingStrength set to a high value that all try to reach the same point will end up just settling to stationary positions around that point, none will push the others away to any significant extent. This is tricky to achieve with priorities as priorities are all relative, so setting all agents to a low priority is the same thing as not changing priorities at all.
Should be a value in the range [0, 1].
- Todo:
- Add video
Current calculated velocity of the agent.
This is not necessarily the velocity the agent is actually moving with (that is up to the movement script to decide) but it is the velocity that the RVO system has calculated is best for avoiding obstacles and reaching the target.
- See also
- CalculateMovementDelta
You can also set the velocity of the agent. This will override the local avoidance input completely. It is useful if you have a player controlled character and want other agents to avoid it.
Setting the velocity using this property will mark the agent as being externally controlled for 1 simulation step. Local avoidance calculations will be skipped for the next simulation step but will be resumed after that unless this property is set again.
Note that if you set the velocity the value that can be read from this property will not change until the next simulation step.
- See also
- IAgent.ForceSetVelocity
-
ManualRVOAgent.cs