A* Pathfinding Project
3.6.1
The A* Pathfinding Project for Unity 3D
|
Grid Graph, supports layered worlds. More...
Grid Graph, supports layered worlds.
The GridGraph is great in many ways, reliable, easily configured and updatable during runtime. But it lacks support for worlds which have multiple layers, such as a building with multiple floors.
That's where this graph type comes in. It supports basically the same stuff as the grid graph, but also multiple layers. It uses a more memory, and is probably a bit slower.
Public Member Functions | |
void | AddLayers (int count) |
Increases the capacity of the nodes array to hold more layers. | |
new void | AddPortal (GraphNode n1, GraphNode n2, List< Vector3 > left, List< Vector3 > right) |
void | AddPortal (LevelGridNode n1, LevelGridNode n2, List< Vector3 > left, List< Vector3 > right) |
new void | BuildFunnelCorridor (List< GraphNode > path, int sIndex, int eIndex, List< Vector3 > left, List< Vector3 > right) |
void | CalculateConnections (GraphNode[] nodes, GraphNode node, int x, int z, int layerIndex) |
bool | CheckConnection (LevelGridNode node, int dir) |
Returns if node is connected to it's neighbour in the specified direction. | |
override void | DeserializeExtraInfo (GraphSerializationContext ctx) |
Deserializes graph type specific node data. | |
override void | ErodeWalkableArea (int xmin, int zmin, int xmax, int zmax) |
Erodes the walkable area. | |
override NNInfo | GetNearest (Vector3 position, NNConstraint constraint, GraphNode hint=null) |
override NNInfo | GetNearestForce (Vector3 position, NNConstraint constraint) |
override void | GetNodes (GraphNodeDelegateCancelable del) |
Calls a delegate with all nodes in the graph. | |
new bool | Linecast (Vector3 _a, Vector3 _b) |
Returns if _b is visible from _a on the graph. | |
new bool | Linecast (Vector3 _a, Vector3 _b, GraphNode hint) |
Returns if _b is visible from _a on the graph. | |
new bool | Linecast (Vector3 _a, Vector3 _b, GraphNode hint, out GraphHitInfo hit) |
Returns if _b is visible from _a on the graph. | |
override void | OnDestroy () |
This function will be called when this graph is destroyed. | |
override void | OnDrawGizmos (bool drawNodes) |
Draw gizmos for the graph. | |
override void | PostDeserialization () |
Called after all deserialization has been done for all graphs. | |
bool | RecalculateCell (int x, int z, bool preserveExistingNodes) |
Recalculates single cell. | |
override void | ScanInternal (OnScanStatus status) |
Scans the graph, called from AstarPath.ScanInternal Override this function to implement custom scanning logic The statusCallback may be optionally called to show progress info in the editor | |
override void | SerializeExtraInfo (GraphSerializationContext ctx) |
Serializes graph type specific node data. | |
new bool | SnappedLinecast (Vector3 _a, Vector3 _b, GraphNode hint, out GraphHitInfo hit) |
Returns if _b is visible from _a on the graph. | |
new void | UpdateArea (GraphUpdateObject o) |
virtual void | UpdatePenalty (LevelGridNode node) |
Updates penalty for the node. | |
Public Member Functions inherited from GridGraph | |
GridGraph () | |
virtual void | CalculateConnections (GridNode[] nodes, int x, int z, GridNode node) |
Calculates the grid connections for a single node. | |
GraphUpdateThreading | CanUpdateAsync (GraphUpdateObject o) |
bool | CheckConnection (GridNode node, int dir) |
Returns if node is connected to it's neighbour in the specified direction. | |
virtual void | ErodeWalkableArea () |
Erodes the walkable area. | |
void | GenerateMatrix () |
Generates the matrix used for translating nodes from grid coordinates to world coordintes. | |
uint | GetConnectionCost (int dir) |
GridNode | GetNodeConnection (GridNode node, int dir) |
Int3 | GetNodePosition (int index, int yOffset) |
List< GraphNode > | GetNodesInArea (Bounds b) |
All nodes inside the bounding box. | |
List< GraphNode > | GetNodesInArea (GraphUpdateShape shape) |
All nodes inside the shape. | |
bool | HasNodeConnection (GridNode node, int dir) |
bool | HasNodeConnection (int index, int x, int z, int dir) |
virtual bool | IsValidConnection (GridNode n1, GridNode n2) |
Returns true if a connection between the adjacent nodes n1 and n2 is valid. | |
bool | Linecast (Vector3 _a, Vector3 _b) |
Returns if there is an obstacle between origin and end on the graph. | |
bool | Linecast (Vector3 _a, Vector3 _b, GraphNode hint) |
Returns if there is an obstacle between origin and end on the graph. | |
bool | Linecast (Vector3 _a, Vector3 _b, GraphNode hint, out GraphHitInfo hit) |
Returns if there is an obstacle between origin and end on the graph. | |
bool | Linecast (Vector3 _a, Vector3 _b, GraphNode hint, out GraphHitInfo hit, List< GraphNode > trace) |
Returns if there is an obstacle between origin and end on the graph. | |
void | OnPostScan (AstarPath script) |
Auto links grid graphs together. | |
void | RelocateNodes (Vector3 center, Quaternion rotation, float nodeSize, float aspectRatio=1, float isometricAngle=0) |
Relocate the grid graph using new settings. | |
void | SetNodeConnection (GridNode node, int dir, bool value) |
void | SetNodeConnection (int index, int x, int z, int dir, bool value) |
Set if connection in the specified direction should be enabled. | |
virtual void | SetUpOffsetsAndCosts () |
Sets up neighbourOffsets with the current settings. | |
bool | SnappedLinecast (Vector3 _a, Vector3 _b, GraphNode hint, out GraphHitInfo hit) |
Returns if _b is visible from _a on the graph. | |
void | UpdateArea (GraphUpdateObject o) |
Internal function to update an area of the graph. | |
void | UpdateAreaInit (GraphUpdateObject o) |
virtual void | UpdateNodePositionCollision (GridNode node, int x, int z, bool resetPenalty=true) |
Updates position, walkability and penalty for the node. | |
void | UpdateSizeFromWidthDepth () |
Updates size from width, depth and nodeSize values. | |
Public Member Functions inherited from NavGraph | |
virtual void | Awake () |
This will be called on the same time as Awake on the gameObject which the AstarPath script is attached to. | |
virtual int | CountNodes () |
Count nodes in the graph. | |
NNInfo | GetNearest (Vector3 position) |
Returns the nearest node to a position using the default NNConstraint. | |
NNInfo | GetNearest (Vector3 position, NNConstraint constraint) |
Returns the nearest node to a position using the specified NNConstraint. | |
virtual Color | NodeColor (GraphNode node, PathHandler data) |
virtual void | RelocateNodes (Matrix4x4 oldMatrix, Matrix4x4 newMatrix) |
Relocates the nodes in this graph. | |
void | Scan () |
void | ScanGraph () |
Consider using AstarPath.Scan () instead since this function might screw things up if there is more than one graph. | |
void | ScanInternal () |
Internal method for scanning graphs. | |
void | SetMatrix (Matrix4x4 m) |
Use to set both matrix and inverseMatrix at the same time. | |
Public Member Functions inherited from IUpdatableGraph | |
GraphUpdateThreading | CanUpdateAsync (GraphUpdateObject o) |
void | UpdateArea (GraphUpdateObject o) |
Updates an area using the specified GraphUpdateObject. | |
void | UpdateAreaInit (GraphUpdateObject o) |
Public Member Functions inherited from IRaycastableGraph | |
bool | Linecast (Vector3 start, Vector3 end) |
bool | Linecast (Vector3 start, Vector3 end, GraphNode hint) |
bool | Linecast (Vector3 start, Vector3 end, GraphNode hint, out GraphHitInfo hit) |
bool | Linecast (Vector3 start, Vector3 end, GraphNode hint, out GraphHitInfo hit, List< GraphNode > trace) |
Public Attributes | |
float | characterHeight = 0.4F |
Nodes with a short distance to the node above it will be set unwalkable. | |
int | layerCount = 0 |
Number of layers. | |
float | mergeSpanRange = 0.5F |
If two layered nodes are too close, they will be merged. | |
int[] | nodeCellIndices |
new LevelGridNode[] | nodes |
Public Attributes inherited from GridGraph | |
Matrix4x4 | boundsMatrix |
Matrix4x4 | boundsMatrix2 |
const int | getNearestForceOverlap = 2 |
In GetNearestForce, determines how far to search after a valid node has been found. | |
readonly uint[] | neighbourCosts = new uint[8] |
Costs to neighbour nodes. | |
readonly int[] | neighbourOffsets = new int[8] |
Index offset to get neighbour nodes. | |
readonly int[] | neighbourXOffsets = new int[8] |
Offsets in the X direction for neighbour nodes. | |
readonly int[] | neighbourZOffsets = new int[8] |
Offsets in the Z direction for neighbour nodes. | |
GridNode[] | nodes |
All nodes in this graph. | |
Vector2 | size |
Size of the grid. | |
int | width |
Width of the grid in nodes. | |
int | depth |
Depth (height) of the grid in nodes. | |
float | aspectRatio = 1F |
Scaling of the graph along the X axis. | |
float | isometricAngle = 0 |
Angle to use for the isometric projection. | |
bool | uniformEdgeCosts = false |
If true, all edge costs will be set to the same value. | |
Vector3 | rotation |
Rotation of the grid in degrees. | |
Bounds | bounds |
Vector3 | center |
Center point of the grid. | |
Vector2 | unclampedSize |
Size of the grid. | |
float | nodeSize = 1 |
Size of one node in world units. | |
GraphCollision | collision |
Settings on how to check for walkability and height. | |
float | maxClimb = 0.4F |
The max position difference between two nodes to enable a connection. | |
int | maxClimbAxis = 1 |
The axis to use for maxClimb. | |
float | maxSlope = 90 |
The max slope in degrees for a node to be walkable. | |
int | erodeIterations = 0 |
Erosion of the graph. | |
bool | erosionUseTags = false |
Use tags instead of walkability for erosion. | |
int | erosionFirstTag = 1 |
Tag to start from when using tags for erosion. | |
bool | autoLinkGrids = false |
Auto link the graph's edge nodes together with other GridGraphs in the scene on Scan. | |
float | autoLinkDistLimit = 10F |
Distance limit for grid graphs to be auto linked. | |
NumNeighbours | neighbours = NumNeighbours.Eight |
Number of neighbours for each node. | |
bool | cutCorners = true |
If disabled, will not cut corners on obstacles. | |
float | penaltyPositionOffset = 0 |
Offset for the position when calculating penalty. | |
bool | penaltyPosition = false |
Use position (y-coordinate) to calculate penalty. | |
float | penaltyPositionFactor = 1F |
Scale factor for penalty when calculating from position. | |
bool | penaltyAngle = false |
float | penaltyAngleFactor = 100F |
How much penalty is applied depending on the slope of the terrain. | |
float | penaltyAnglePower = 1 |
How much extra to penalize very steep angles. | |
bool | useJumpPointSearch = false |
TextureData | textureData = new TextureData () |
Holds settings for using a texture as source for a grid graph. | |
Public Attributes inherited from NavGraph | |
byte[] | _sguid |
Used to store the guid value. | |
AstarPath | active |
Reference to the AstarPath object in the scene. | |
bool | drawGizmos = true |
uint | graphIndex |
Index of the graph, used for identification purposes. | |
bool | infoScreenOpen |
Used in the editor to check if the info screen is open. | |
uint | initialPenalty = 0 |
Default penalty to apply to all nodes. | |
Matrix4x4 | inverseMatrix = Matrix4x4.identity |
Inverse of matrix. | |
Matrix4x4 | matrix = Matrix4x4.identity |
A matrix for translating/rotating/scaling the graph. | |
string | name |
Name of the graph. | |
bool | open |
Is the graph open in the editor. | |
Package Attributes | |
int | lastScannedDepth = 0 |
int | lastScannedWidth = 0 |
Properties | |
override bool | uniformWidthDepthGrid [get] |
Properties inherited from GridGraph | |
int | Depth [get, set] |
virtual bool | uniformWidthDepthGrid [get] |
This is placed here so generators inheriting from this one can override it and set it to false. | |
int | Width [get, set] |
bool | useRaycastNormal [get] |
Use heigh raycasting normal for max slope calculation. | |
Properties inherited from NavGraph | |
Guid | guid [get, set] |
Used as an ID of the graph, considered to be unique. | |
Private Member Functions | |
LevelGridNode | GetNearestNode (Vector3 position, int x, int z, NNConstraint constraint) |
void | RemoveGridGraphFromStatic () |
Additional Inherited Members | |
Static Public Member Functions inherited from GridGraph | |
static void | CalculateConnections (GridNode node) |
Calculates the grid connections for a single node. | |
Static Protected Member Functions inherited from GridGraph | |
static void | GetBoundsMinMax (Bounds b, Matrix4x4 matrix, out Vector3 min, out Vector3 max) |
Calculates minimum and maximum points for bounds b when multiplied with the matrix. | |
Protected Attributes inherited from GridGraph | |
int[] | corners |
Small buffer to reduce memory allocations. | |
void AddLayers | ( | int | count | ) |
Increases the capacity of the nodes array to hold more layers.
After this function has been called and new nodes have been set up, the AstarPath.DataUpdate function must be called.
void AddPortal | ( | LevelGridNode | n1, |
LevelGridNode | n2, | ||
List< Vector3 > | left, | ||
List< Vector3 > | right | ||
) |
new void BuildFunnelCorridor | ( | List< GraphNode > | path, |
int | sIndex, | ||
int | eIndex, | ||
List< Vector3 > | left, | ||
List< Vector3 > | right | ||
) |
bool CheckConnection | ( | LevelGridNode | node, |
int | dir | ||
) |
Returns if node is connected to it's neighbour in the specified direction.
|
virtual |
Deserializes graph type specific node data.
Reimplemented from GridGraph.
|
virtual |
|
virtual |
|
virtual |
|
private |
|
virtual |
Calls a delegate with all nodes in the graph.
This is the primary way of "looping" through all nodes in a graph.
This function should not change anything in the graph structure.
Reimplemented from GridGraph.
new bool Linecast | ( | Vector3 | _a, |
Vector3 | _b | ||
) |
Returns if _b is visible from _a on the graph.
This is not the same as Physics.Linecast, this function traverses the graph and looks for collisions.
new bool Linecast | ( | Vector3 | _a, |
Vector3 | _b, | ||
GraphNode | hint | ||
) |
Returns if _b is visible from _a on the graph.
[in] | _a | Point to linecast from |
[in] | _b | Point to linecast to |
[in] | hint | If you have some idea of what the start node might be (the one close to _a), pass it to hint since it can enable faster lookups This is not the same as Physics.Linecast, this function traverses the graph and looks for collisions.
|
new bool Linecast | ( | Vector3 | _a, |
Vector3 | _b, | ||
GraphNode | hint, | ||
out GraphHitInfo | hit | ||
) |
Returns if _b is visible from _a on the graph.
[in] | _a | Point to linecast from |
[in] | _b | Point to linecast to |
[out] | hit | Contains info on what was hit, see GraphHitInfo |
[in] | hint | If you have some idea of what the start node might be (the one close to _a), pass it to hint since it can enable faster lookups This is not the same as Physics.Linecast, this function traverses the graph and looks for collisions.
|
|
virtual |
This function will be called when this graph is destroyed.
Reimplemented from GridGraph.
|
virtual |
Draw gizmos for the graph.
Reimplemented from GridGraph.
|
virtual |
Called after all deserialization has been done for all graphs.
Can be used to set up more graph data which is not serialized
Reimplemented from GridGraph.
bool RecalculateCell | ( | int | x, |
int | z, | ||
bool | preserveExistingNodes | ||
) |
Recalculates single cell.
x | X coordinate of the cell |
z | Z coordinate of the cell |
preserveExistingNodes | If true, nodes will be reused, this can be used to preserve e.g penalty when recalculating |
|
private |
|
virtual |
Scans the graph, called from AstarPath.ScanInternal Override this function to implement custom scanning logic The statusCallback may be optionally called to show progress info in the editor
Reimplemented from GridGraph.
|
virtual |
Serializes graph type specific node data.
This function can be overriden to serialize extra node information (or graph information for that matter) which cannot be serialized using the standard serialization. Serialize the data in any way you want and return a byte array. When loading, the exact same byte array will be passed to the DeserializeExtraInfo function.
These functions will only be called if node serialization is enabled.
Reimplemented from GridGraph.
new bool SnappedLinecast | ( | Vector3 | _a, |
Vector3 | _b, | ||
GraphNode | hint, | ||
out GraphHitInfo | hit | ||
) |
Returns if _b is visible from _a on the graph.
This function is different from the other Linecast functions since it 1) snaps the start and end positions directly to the graph and it uses Bresenham's line drawing algorithm as opposed to the others which use sampling at fixed intervals. If you only care about if one node can see another node, then this function is great, but if you need more precision than one node, use the normal linecast functions
[in] | _a | Point to linecast from |
[in] | _b | Point to linecast to |
[out] | hit | Contains info on what was hit, see GraphHitInfo |
[in] | hint | (deprecated) If you have some idea of what the start node might be (the one close to _a), pass it to hint since it can enable faster lookups. |
This is not the same as Physics.Linecast, this function traverses the graph and looks for collisions.
new void UpdateArea | ( | GraphUpdateObject | o | ) |
|
virtual |
Updates penalty for the node.
This function sets penalty to zero (0) and then adjusts it if penaltyPosition is set to true.
float characterHeight = 0.4F |
Nodes with a short distance to the node above it will be set unwalkable.
|
package |
|
package |
int layerCount = 0 |
Number of layers.
float mergeSpanRange = 0.5F |
If two layered nodes are too close, they will be merged.
int [] nodeCellIndices |
new LevelGridNode [] nodes |
|
get |