标签: navmesh

什么会导致NavMesh代理计算无效路径?

问题描述

我与我的导航网格代理挣扎的同时有计算路径无效obvisously没有理由.当问题已经以初始有效路径移动时,问题会不时发生.

特工无法找到自己的方式

在上图中,目的地是左上角的圆锥体.(不要介意NavMeshAgent的方向箭头,我试图用手移动代理,以试图"解锁"他)

  • 实例化时,我要求我的代理计算它们到NavMesh上给定目标点的路径(我使用NavMesh.SamplePosition确保目标点在NavMesh上).一切正常.经纪人找到了自己的方式并开始向目标迈进
  • 但是,在旅途中,突然之间,他失去了自己,而NavMesh自第一步以来没有改变.我没有问他什么,没有新的计算方法.

测试解决方案

  1. 检查目的地是否在NavMesh上

    public Vector3 GetCharacterPositionOnNavMesh( Vector3 position )
    {
        NavMeshHit hit;
        bool positionFound = NavMesh.SamplePosition( position, out hit, 500, NavMesh.AllAreas );
    
        if ( !positionFound )
            Debug.LogWarning( "No valid position found !" );
    
        return positionFound ? hit.position : position;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 检查我的代理的区域掩码,以确保他们可以找到目的地的路径,尽管NavMesh的各个区域

  3. 如果代理的路径无效,则几乎检查每个帧.如果是,请使用CalculatePath或计算新的SetDestination.有时,它有效,有时不行.

    protected virtual void Update()
    {
        if ( !Running || !agent.enabled || !agent.isOnNavMesh )
            return; …
    Run Code Online (Sandbox Code Playgroud)

artificial-intelligence unity-game-engine navmesh

17
推荐指数
1
解决办法
2620
查看次数

如何让游戏玩法忽略Unity3D中UI按钮的点击?

我正在尝试创建一个3D点击以在Unity3D中移动游戏.

我添加了一个UI Button(使用UnityEngine.UI),我想最终点击以打开和关闭运行.

然而,点击Button实际上似乎是点击进入场景(在我的情况下UnityEngine.UI.Button导航)并导致我的播放器移动到不同的位置.

如何禁用光线投射以单击UI按钮或以某种方式让UI捕获自己的事件?

我一直在使用典型的Unity3D代码让用户进入游戏玩法等

if (Input.GetMouseButtonDown(0))
  {
Run Code Online (Sandbox Code Playgroud)

如果我尝试这种方法也一样

if( Input.touches.Length > 0 )
        {

        if ( Input.touches[0].phase == TouchPhase.Began )
            {
Run Code Online (Sandbox Code Playgroud)

在iOS,Android和桌面上似乎就是这种情况.

这似乎是一个基本问题,点击UI(Button等)似乎落入游戏玩法.

c# unity-game-engine navmesh

9
推荐指数
2
解决办法
1万
查看次数

Unity Nav Mesh:找到圆上最近的位置

想象一下,弓箭手需要至少距离 3m 才能射中目标,但距离不能超过 10m。所以他必须在这个半径内找到一个有效的位置(当然是在 3d 中)。

因此,我需要的是一种方法,它可以返回导航网格上最近(可到达)的点,并在半径内具有清晰的视线。

在此输入图像描述

我正在考虑始终使用圆边作为计算的起点。因为这应该始终是最近的点。但这在本例中不起作用:

在此输入图像描述

由于圆圈边缘没有直接视线,我不能将其作为起点。

我也在考虑随机选择点(例如 5000 个),检查它们是否具有视线并检查与弓箭手的距离。但这当然是一个可怕的解决方案。

怎样才能找到这个神奇的点呢?

(我不需要脚本,而是一个想法:D)

编辑: 不需要有目标的有效路径。例如,如果一条河流挡住了弓箭手的路径,他将无法找到目标。但他仍然可以射过河。这意味着他可以找到一个有效的位置。 在此输入图像描述

c# unity-game-engine navmesh

7
推荐指数
1
解决办法
1645
查看次数

给定一个开始和目标,如何找到导航网格中最短的方式?

我用google搜索"导航网格上的A*算法"只是为了得到错误的估算g值的方法,就像这样

在此输入图像描述

或这个 在此输入图像描述

通过总计蓝线段的长度,我们得到g值,但它被高估了(g值应该被低估).此算法将返回优化路径,但不保证最短路径.

我能想到的唯一方法是根据导航网格绘制可见性图.但这会花费太多内存.

在此输入图像描述

有没有其他方法来计算导航网格中的最短路径?

c++ graph a-star path-finding navmesh

5
推荐指数
1
解决办法
759
查看次数

Unity NavMesh 可以用来实现 A* 算法吗?

我期待在我正在开发的游戏中使用 A* 寻路。(我实际上是在为自己制作一个游戏来了解这一点)。我想知道如何将 Unity NavMesh 与自定义 A* 算法一起使用,而不是使用 NavMeshAgent。

c# a-star unity-game-engine navmesh

5
推荐指数
1
解决办法
1295
查看次数

Unity3D NavMesh:到某个区域的最短路径

考虑以下情况。

NavMesh 内部有一个 AI 代理必须到达的预定义区域。为了方便起见 - 它是圆形区域。

找到该区域的最近点是非常简单的任务。不,我需要找到到达某个区域的最短路径

在图片示例中,最近的点显然需要代理移动比最佳距离更远的距离。

那么,在这种情况下如何计算所需的目的地点呢?

我必须自己实现波传播算法吗?使用A * 而不是内置的 NavMesh?有没有涉及Unity3D工具的简单解决方案?

注意:所需区域只是由(Vector3)位置和(浮动)半径定义的抽象,而不是游戏场景中的实际对象。

path-finding unity-game-engine navmesh

5
推荐指数
0
解决办法
780
查看次数

NavMeshAgent统一无法正常工作

我正在统一制作游戏,它抛出错误“由于没有有效的NavMesh而无法创建代理”,而且我不知道问题出在哪里。

设定图片

using UnityEngine;
using System.Collections;

public class EnemyMotion : MonoBehaviour {
    public NavMeshAgent agent;
    public Rigidbody rb;
    public GameObject otwt;

    void Start () {
        rb = GetComponent<Rigidbody>();
        agent = GetComponent<NavMeshAgent>();
    }
    void Update () {
        gameObject.transform.Rotate(270, 0, 0);
        agent.SetDestination(otwt.transform.position);
    }
}
Run Code Online (Sandbox Code Playgroud)

game-engine unity-game-engine navmesh

4
推荐指数
1
解决办法
9921
查看次数

Unity3D如何连接NavMesh和NavMeshAgent

我在编辑器中收到此错误

"SetDestination" can only be called on an active agent that has been placed on a NavMesh. 这些是我在解决问题时尝试的步骤:

  1. 将 NavmeshAgent 扭曲到 NavMesh 位置
  2. 手动将 NavMeshAgent 移动到 NavMesh
  3. 重新烘焙 NavMesh 并执行上述步骤
  4. 使用 NavMeshAgent 和新的 NavMesh 创建一个盒子
    • 有人有我可以使用的其他提示吗?

agent unity-game-engine navmesh

3
推荐指数
1
解决办法
5857
查看次数

NavMesh 根本不会烘焙

我试图在Unity3D飞机上烘焙导航网格,但没有成功。直到最近,在2020.1发布日期左右,我才遇到这个问题。我将平面设置为导航静态、可行走,并在选定平面的情况下烘焙导航网格。NavMesh创建了一个对象。烘焙后“源边界范围”变得非常小。导航网格根本不会出现在屏幕上,通常它应该显示为蓝色。想知道最近是否有其他人遇到过这个问题,或者我可以做些什么来纠正它。

在此处输入图片说明

unity-game-engine navmesh

3
推荐指数
2
解决办法
2864
查看次数

如何将Navmesh添加到现有的Aframe(v1.3.0)?

我不希望玩家穿墙。我尝试了 aframe extras,但它在当前的 aframe 版本中不起作用。还有其他适用于 Aframe 1.3.0 的方法或解决方案吗?

navmesh aframe

3
推荐指数
1
解决办法
1272
查看次数