【问题标题】:Getting closest possible destination - Unity3d获得最近的可能目的地 - Unity3d
【发布时间】:2018-03-01 07:15:10
【问题描述】:

当导航网格障碍物挡住路时,我正在尝试了解如何使用 Unity 的导航系统到达最近的目的地。 我有这个示例,其中包含一个胶囊障碍物(打开 Carve)和一个使用脚本管理的胶囊代理。它似乎工作正常,但是当我“单击”障碍物以设置代理的目的地(到雕刻区域内的一个点)时,代理会移动到障碍物周围的另一个位置。

如何让代理到达障碍物周围的最近点或距离所选目的地最近的点(即障碍物区域内)?

移动代理的脚本

using UnityEngine;
using UnityEngine.AI;

public class CapsuleMovement : MonoBehaviour {
    NavMeshAgent agent;
    public NavMeshPathStatus partial;

    void Start() {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update() {
        if (Input.GetMouseButtonDown(0)) {
            RaycastHit hit;

            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
                agent.destination = hit.point;
            }
        }
    }
}

【问题讨论】:

标签: c# unity3d navmesh


【解决方案1】:

将被点击对象的中心位置向移动的单位/玩家稍微移动,然后使用该位置作为您的坐标,而不是直接点击鼠标。


如果这不起作用。

这不是一个有保证的答案,因为在这种情况下很难给出答案,但我希望这能让你走得更远。

我怀疑它可能是您单击的坐标,它没有按应有的方式工作。尝试在鼠标单击的位置生成一个“ClickObject”,它可以只是一个彩色球体。这样您就可以确认点击实际发生的位置。


这里还有两种在使用 NavMesh 和定位时可能会派上用场的方法。

您可以尝试使用 SamplePosition。

https://docs.unity3d.com/540/Documentation/ScriptReference/NavMesh.SamplePosition.html

在指定范围内的 NavMesh 上找到最近的点。

也许还有 FindClosestEdge

https://docs.unity3d.com/530/Documentation/ScriptReference/NavMesh.FindClosestEdge.html

从 NavMesh 上的某个点定位最近的 NavMesh 边缘。

【讨论】:

  • 谢谢。你是对的,我的点击不是在地形上,而是在物体上。将位置设置为障碍物的中心,使代理移动到障碍物的最近边缘。
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2015-10-17
相关资源
最近更新 更多