Learning Game AI Programming with Lua
上QQ阅读APP看书,第一时间看更新

Agent properties

Now that we can create agents, we're going to take a step back and look at what properties are available to an agent and what they mean.

Orientation

Whenever you need to return the orientation of an agent, it's easiest to use the forward vector that usually represents the direction of movement of an agent. Both the left and up vectors of orientation are available as well. Whenever you need to change an agent's direction, simply set its forward vector.

The forward axis

To access and set the forward vector of our agents, we can use the built-in GetForward and SetForward helper functions.

local forwardVector = agent:GetForward();
Agent.SetForward(agent, forwardVector);

The left axis

We can also access the left orientation vector using the GetLeft helper function.

local leftVector = agent:GetLeft();

The up axis

Accessing the up orientation vector is similarly provided by a GetUp helper function.

local upVector = agent:GetUp();

Location

An agent's position is the center of the mass of its capsule representation within the physics simulation. If you need to determine the origin of an agent, simply return its position and subtract half its height from the y component of the position.

Position

To access and set the position of agents, we can use the GetPosition and SetPosition helper functions.

local positionVector = agent:GetPosition();
agent:SetPosition(positionVector);

Size

The size of the agent and their capsule representation is determined by the agent's height and radius. When changing these values, the physics simulation will also adjust and create a new representation for the agent based on the changes.

Height

Accessing the height of the agents can be done through the GetHeight and SetHeight helper functions.

local height = agent:GetHeight();
agent:SetHeight(height);

Radius

To access and modify the radius of an agent, we can use the GetRadius and SetRadius functions.

local radius = agent:GetRadius();
agent:SetRadius(radius);