寻路统一中的循环运动系统

Posted

技术标签:

【中文标题】寻路统一中的循环运动系统【英文标题】:Loop movement system in pathfinding unity 【发布时间】:2013-11-25 08:21:04 【问题描述】:

我正在使用取自此处http://arongranberg.com/astar/docs/ 的 A* 寻路算法,并且我试图使一个对象在一个循环系统中统一地从一个随机点移动到另一个随机点。这是用于移动对象的代码: 我试图将这些点放入一个数组中,但它没有用。作者说如果我想在 AI 到达目的地后有额外的行为,我应该在 OnTargetReached() 方法中编写代码,但我不知道具体该怎么做。如果您有任何想法,即使是最小的想法也会很有帮助。

public virtual void SearchPath () 
    //if (target == null) 
    // Debug.LogError ("Target is null, aborting all search"); canSearch = false; return; 

    lastRepath = Time.time;
    //This is where we should search to


    //Vector3 [] position = new Vector3[2];
    //position[0] = new Vector3(Random.Range(-2,-7), 0, Random.Range(21,26));
    //position[1] = new Vector3(Random.Range(19,23), 0, Random.Range (28,31));
    //position[2] = 
    canSearchAgain = false;

    //Alternative way of requesting the path
    //Path p = PathPool<Path>.GetPath().Setup(GetFeetPosition(),targetPoint,null);
    //seeker.StartPath (p);

    //We should search from the current position

    seeker.StartPath (GetFeetPosition(),targetPosition);    


public virtual void OnTargetReached () 
    //End of path has been reached
    //If you want custom logic for when the AI has reached it's destination
    //add it here
    //You can also create a new script which inherits from this one
    //and override the function in that script
    //Vector3 new_targetPosition = new Vector3(Random.Range(19,23), 0, Random.Range (28,31));
    //Vector3 new_targetPosition = new Vector3(19,0,28);
    seeker.StartPath (GetFeetPosition(),new_targetPosition);

【问题讨论】:

【参考方案1】:

在你的场景中粘贴一堆节点(只是空的统一对象) 将它们命名为 node1,2,3,4,5 制作你的循环/路径并按顺序编号。

制作一个具有公共 transform[] nodeLoop 的 pathManager 脚本;数组并按顺序将节点拖到数组上。 现在你有一个节点/位置列表。

现在只需将它连接到您现有的 OnTargetReached() 制作一个只获取下一个节点位置的函数...

类似的东西

void OnTargetReached ()

  new_targetPosition = pathManager.m.getNextPathPoint()

pathmanager 有这样的东西...

int pathPoint=0;
Vector3 getNextPathPoint()

   pathPoint++;
   if(pathPoint >= nodeLoop.length)
       pathPoint=0;
   return nodeLoop[pathPoint];

抱歉草率的伪代码,但你应该明白了

【讨论】:

以上是关于寻路统一中的循环运动系统的主要内容,如果未能解决你的问题,请参考以下文章

R中的布朗运动/循环

降低绘图循环的速度以查看 R 中的运动(无需单击)

C# Unity 2D 自上而下的运动脚本不起作用

统一。如何使玩家转向运动方向

如何将此统一运动脚本转换为刚体?

运动会报名系统的简易实现