A* Pathfinding Project  4.2.0
The A* Pathfinding Project for Unity 3D
SimpleSmoothModifier Class Reference

Modifier which smooths the path. More...

Detailed Description

Modifier which smooths the path.

This modifier can smooth a path by either moving the points closer together (Simple) or using Bezier curves (Bezier).
Attach this component to the same GameObject as a Seeker component.
This component will hook in to the Seeker's path post-processing system and will post process any paths it searches for. Take a look at the Modifier Priorities settings on the Seeker component to determine where in the process this modifier should process the path.

Several smoothing types are available, here follows a list of them and a short description of what they do, and how they work. But the best way is really to experiment with them yourself.

  • Simple Smooths the path by drawing all points close to each other. This results in paths that might cut corners if you are not careful. It will also subdivide the path to create more more points to smooth as otherwise it would still be quite rough.
  • Bezier Smooths the path using Bezier curves. This results a smooth path which will always pass through all points in the path, but make sure it doesn't turn too quickly.
  • OffsetSimple An alternative to Simple smooth which will offset the path outwards in each step to minimize the corner-cutting. But be careful, if too high values are used, it will turn into loops and look really ugly.
  • Curved Non Uniform
Note
Modifies vectorPath array
Todo:
Make the smooth modifier take the world geometry into account when smoothing

Public Types

enum  SmoothType { Simple, Bezier, OffsetSimple, CurvedNonuniform }
 

Public Member Functions

override void Apply (Path p)
 Called for each path that the Seeker calculates after the calculation has finished. More...
 
List< Vector3 > CurvedNonuniform (List< Vector3 > path)
 
List< Vector3 > SmoothBezier (List< Vector3 > path)
 
List< Vector3 > SmoothOffsetSimple (List< Vector3 > path)
 
List< Vector3 > SmoothSimple (List< Vector3 > path)
 
- Public Member Functions inherited from MonoModifier
virtual void PreProcess (Path path)
 

Static Public Member Functions

static Vector3 GetPointOnCubic (Vector3 a, Vector3 b, Vector3 tan1, Vector3 tan2, float t)
 

Public Attributes

float bezierTangentLength = 0.4F
 Length factor of the bezier curves' tangents'. More...
 
float factor = 0.1F
 Roundness factor used for CurvedNonuniform. More...
 
int iterations = 2
 Number of times to apply smoothing. More...
 
float maxSegmentLength = 2F
 The length of the segments in the smoothed path when using uniformLength. More...
 
float offset = 0.2F
 Offset to apply in each smoothing iteration when using Offset Simple. More...
 
SmoothType smoothType = SmoothType.Simple
 Type of smoothing to use. More...
 
float strength = 0.5F
 Determines how much smoothing to apply in each smooth iteration. More...
 
int subdivisions = 2
 Number of times to subdivide when not using a uniform length. More...
 
bool uniformLength = true
 Toggle to divide all lines in equal length segments. More...
 
- Public Attributes inherited from MonoModifier
Seeker seeker
 

Properties

override int Order [get]
 
- Properties inherited from MonoModifier
abstract int Order [get]
 Modifiers will be executed from lower order to higher order. More...
 
- Properties inherited from IPathModifier
int Order [get]
 

Additional Inherited Members

- Protected Member Functions inherited from MonoModifier
virtual void OnDisable ()
 
virtual void OnEnable ()
 Alerts the Seeker that this modifier exists. More...
 
- Protected Member Functions inherited from VersionedMonoBehaviour
virtual void Awake ()
 
virtual int OnUpgradeSerializedData (int version, bool unityThread)
 Handle serialization backwards compatibility. More...
 
virtual void Reset ()
 Handle serialization backwards compatibility. More...
 

Member Enumeration Documentation

◆ SmoothType

enum SmoothType
strong
Enumerator
Simple 
Bezier 
OffsetSimple 
CurvedNonuniform 

Member Function Documentation

◆ Apply()

override void Apply ( Path  path)
virtual

Called for each path that the Seeker calculates after the calculation has finished.

Implements MonoModifier.

◆ CurvedNonuniform()

List<Vector3> CurvedNonuniform ( List< Vector3 >  path)

◆ GetPointOnCubic()

static Vector3 GetPointOnCubic ( Vector3  a,
Vector3  b,
Vector3  tan1,
Vector3  tan2,
float  t 
)
static

◆ SmoothBezier()

List<Vector3> SmoothBezier ( List< Vector3 >  path)

◆ SmoothOffsetSimple()

List<Vector3> SmoothOffsetSimple ( List< Vector3 >  path)

◆ SmoothSimple()

List<Vector3> SmoothSimple ( List< Vector3 >  path)

Member Data Documentation

◆ bezierTangentLength

float bezierTangentLength = 0.4F

Length factor of the bezier curves' tangents'.

◆ factor

float factor = 0.1F

Roundness factor used for CurvedNonuniform.

◆ iterations

int iterations = 2

Number of times to apply smoothing.

◆ maxSegmentLength

float maxSegmentLength = 2F

The length of the segments in the smoothed path when using uniformLength.

A high value yields rough paths and low value yields very smooth paths, but is slower

◆ offset

float offset = 0.2F

Offset to apply in each smoothing iteration when using Offset Simple.

See also
smoothType

◆ smoothType

Type of smoothing to use.

◆ strength

float strength = 0.5F

Determines how much smoothing to apply in each smooth iteration.

0.5 usually produces the nicest looking curves.

◆ subdivisions

int subdivisions = 2

Number of times to subdivide when not using a uniform length.

◆ uniformLength

bool uniformLength = true

Toggle to divide all lines in equal length segments.

See also
maxSegmentLength

Property Documentation

◆ Order

override int Order
get

The documentation for this class was generated from the following file: