Class GridStringPulling
Public
Simplifies a path on a grid graph using a string pulling algorithm.
This is based on a paper called "Toward a String-Pulling Approach to Path Smoothing on Grid Graphs", with some optimizations as well as fixes for some edge cases that the paper didn't handle.
The result is conceptually similar to the well known funnel string pulling algorithm for navmesh graphs but it uses a different algorithm.
This class is used by the FunnelModifier on grid graphs.
Inner Types
Public Static Methods
List<Vector3>
Calculate
(
List<GraphNode> | pathNodes | A list of input nodes. Only the slice of nodes from nodeStartIndex to nodeEndIndex (inclusive) will be used. These must all be of type GridNodeBase and must form a path (i.e. each node must be a neighbor to the next one in the list). |
int | nodeStartIndex | The index in pathNodes to start from. |
int | nodeEndIndex | The last index in pathNodes that is used. |
Vector3 | startPoint | A more exact start point for the path. This should be a point inside the first node (if not, it will be clamped to the node's surface). |
Vector3 | endPoint | A more exact end point for the path. This should be a point inside the first node (if not, it will be clamped to the node's surface). |
System.Func<GraphNode, uint> | traversalCost=null | Can be used to specify how much it costs to traverse each node. If this is null, node penalties and tag penalties will be completely ignored. |
System.Func<GraphNode, bool> | filter=null | Can be used to filter out additional nodes that should be treated as unwalkable. It is assumed that all nodes in pathNodes pass this filter. |
int | maxCorners=int.MaxValue | If you only need the first N points of the result, you can specify that here, to avoid unnecessary work. |
)
Simplifies a path on a grid graph using a string pulling algorithm.
See the class documentation for more details.
float
IntersectionLength
(
int2 | nodeCenter | |
int2 | segmentStart | |
int2 | segmentEnd | |
)
Intersection length of the given segment with a square of size Int3.Precision centered at nodeCenter.
The return value is between 0 and sqrt(2).
Private/Protected Members
const int
FixedPrecisionScale = 1024
uint
LinecastCost
(
)
Cost of moving across all the nodes in the list, along the given segment.
It is assumed that the segment intersects the nodes. Any potentially intersecting nodes that are not part of the list will be ignored.
PredicateFailMode
Undefined |
|
Turn |
|
LinecastObstacle |
|
LinecastCost |
|
ReachedEnd |
|
Side
Side2D
(
)
Returns which side of the line a - b that p lies on.
void
TestIntersectionLength
()
int2
ToFixedPrecision
(
)
Z | |.
3 2 \ | / – - X - —– X / | \ 0 1
| |
Unity.Profiling.ProfilerMarker
marker1 = new Unity.Profiling.ProfilerMarker("Linecast hit")
Unity.Profiling.ProfilerMarker
marker2 = new Unity.Profiling.ProfilerMarker("Linecast success")
Unity.Profiling.ProfilerMarker
marker3 = new Unity.Profiling.ProfilerMarker("Trace")
Unity.Profiling.ProfilerMarker
marker4 = new Unity.Profiling.ProfilerMarker("Neighbours")
Unity.Profiling.ProfilerMarker
marker5 = new Unity.Profiling.ProfilerMarker("Re-evaluate linecast")
Unity.Profiling.ProfilerMarker
marker6 = new Unity.Profiling.ProfilerMarker("Init")
Unity.Profiling.ProfilerMarker
marker7 = new Unity.Profiling.ProfilerMarker("Initloop")