Agent visibility
Implementing agent visibility begins with casting a number of raycasts into the sandbox to see whether the agent can visibly detect another agent without objects blocking our agent's sight. To cast a ray, the only requirements are a starting and ending point within the sandbox. The results of the raycast are returned as a Lua table that contains a result attribute indicating whether anything was hit; it also contains an optional object attribute of the sandbox object that the ray intersected with, if the raycast successfully intersected with an object.
Note
When casting rays, take care about selecting a starting position that isn't already intersecting with an object, otherwise the results returned might not be the expected outcome.
To case a ray we'll use the RayCastToObject
function provided by the sandbox.
local raycastResult = Sandbox.RayCastToObject( sandbox, startPoint, endPoint);
In the following screenshot, you can see various rays that represent agent visibility...