mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-27 10:46:17 +00:00
提交
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Pathfinding {
|
||||
/// <summary>
|
||||
/// Returns a path heading away from a specified point to avoid.
|
||||
/// The search will terminate when G \> length (passed to the constructor) + FleePath.spread.
|
||||
///
|
||||
/// Can be used to make an AI to flee from an enemy (cannot guarantee that it will not be forced into corners though :D )
|
||||
/// <code>
|
||||
///
|
||||
/// // Call a FleePath call like this, assumes that a Seeker is attached to the GameObject
|
||||
/// Vector3 thePointToFleeFrom = Vector3.zero;
|
||||
///
|
||||
/// // The path will be returned when the path is over a specified length (or more accurately when the traversal cost is greater than a specified value).
|
||||
/// // A score of 1000 is approximately equal to the cost of moving one world unit.
|
||||
/// int theGScoreToStopAt = 10000;
|
||||
///
|
||||
/// // Create a path object
|
||||
/// FleePath path = FleePath.Construct (transform.position, thePointToFleeFrom, theGScoreToStopAt);
|
||||
/// // This is how strongly it will try to flee, if you set it to 0 it will behave like a RandomPath
|
||||
/// path.aimStrength = 1;
|
||||
/// // Determines the variation in path length that is allowed
|
||||
/// path.spread = 4000;
|
||||
///
|
||||
/// // Get the Seeker component which must be attached to this GameObject
|
||||
/// Seeker seeker = GetComponent<Seeker>();
|
||||
///
|
||||
/// // Start the path and return the result to MyCompleteFunction (which is a function you have to define, the name can of course be changed)
|
||||
/// seeker.StartPath(path, MyCompleteFunction);
|
||||
///
|
||||
/// </code>
|
||||
/// </summary>
|
||||
public class FleePath : RandomPath {
|
||||
/// <summary>
|
||||
/// Default constructor.
|
||||
/// Do not use this. Instead use the static Construct method which can handle path pooling.
|
||||
/// </summary>
|
||||
public FleePath () {}
|
||||
|
||||
/// <summary>
|
||||
/// Constructs a new FleePath.
|
||||
/// The FleePath will be taken from a pool.
|
||||
/// </summary>
|
||||
public static FleePath Construct (Vector3 start, Vector3 avoid, int searchLength, OnPathDelegate callback = null) {
|
||||
var p = PathPool.GetPath<FleePath>();
|
||||
|
||||
p.Setup(start, avoid, searchLength, callback);
|
||||
return p;
|
||||
}
|
||||
|
||||
protected void Setup (Vector3 start, Vector3 avoid, int searchLength, OnPathDelegate callback) {
|
||||
Setup(start, searchLength, callback);
|
||||
// Set the aim to a point in the opposite direction from the point we to avoid
|
||||
// TODO: Why is this multiplication by 10 here?
|
||||
// Might want to remove it
|
||||
aim = start - (avoid-start)*10;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user