簡體   English   中英

獲得最近的可能目的地 - Unity3d

[英]Getting closest possible destination - Unity3d

我試圖了解當導航網格障礙物擋在路上時如何使用 Unity 的導航系統最接近目的地。 我有一個帶有 Capsule 障礙(開啟 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;
            }
        }
    }
}

取點擊對象位置的中心並將其稍微移向移動的單位/玩家,然后使用該位置作為您的坐標,而不是直接單擊鼠標。


如果那不起作用。

這不是一個有保證的答案,因為在這種情況下很難給出答案,但我希望這能讓你更進一步。

我懷疑這可能是您單擊的坐標,它沒有正常工作。 嘗試在鼠標單擊的位置生成一個“ClickObject”,它可以是一個彩色球體。 這樣您就可以確認點擊實際發生的位置。


這里還有 2 種在使用導航網格和定位時可能會派上用場的方法。

您可以嘗試使用 SamplePosition。

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

在指定范圍內查找 NavMesh 上最近的點。

也許還有 FindClosestEdge

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

從導航網格上的一個點定位最近的導航網格邊緣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM