Unity 导航


一,生成Nav Mesh


1.新建一个Plane.


2.选中Plane将其设置成Static(静态)--->Navigation Static-->Navigation



3.在Navigation 面板中调整参数



设置好后点击Bake(烘培).


二.人物添加Nav Mesh Agent 组件




脚本控制:

GetComponent <NavMeshAgent> ().SetDestination (v3 target);

地图之间连线:


将需要连线的物体,地面 设为Off Mesh Link Generation


设置好后点击Bake(烘培).


单根连线(传送点)


新建一个Cube(心疼Cube君);




在Cube上建一个小Cube1

在地面上新建一个小Cube2

不用空物体的原因是不好确定位置,要把中心露出一半以上,最后取消网格就好.

将大Cube设为静态



在Cube1上添加组件:Off Mesh Link



把 Cube1 放在Start中

把Cube2 放在End中

创建一个Cube3添加Nav Mesh Agent 组件

写入代码

using UnityEngine;
using System.Collections;

public class JiaoNangScript : MonoBehaviour
{
	//定义一个变量
	NavMeshAgent n;

	//射线
	Ray ray;
	RaycastHit h;
	Vector3 m_pos;

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

	void Update ()
	{
//		if (Input.GetMouseButtonDown (1)) {
		ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		if (Physics.Raycast (ray, out h)) {
			m_pos = h.point;
		}
		n.SetDestination (m_pos);
//		}
	}
}

即可.

跨越鸿沟两种方法:烘培面板调 跨越宽度参数,或者同上设置起点和终点
 




### Unity 导航系统教程及相关问题 Unity导航系统是一种强大的工具,用于实现角色的路径规划和动态避障。以下是关于 Unity导航系统的详细介绍以及可能遇到的相关问题。 #### 1. **导航网格(NavMesh)** 在 Unity 中,导航网格是导航系统的核心组件之一。它通过分析场景中的几何体来创建可行走区域的地图[^5]。开发者可以通过 `Navigation` 面板设置静态对象作为障碍物或可通行区域。 #### 创建 NavMesh 使用以下代码可以初始化并更新导航网格: ```csharp using UnityEngine; using UnityEngine.AI; public class NavMeshExample : MonoBehaviour { void Start() { // 获取当前活动的游戏对象的 NavMeshAgent 组件 NavMeshAgent agent = GetComponent<NavMeshAgent>(); // 设置目标位置 Vector3 targetPosition = new Vector3(0, 0, 10); agent.SetDestination(targetPosition); // 让代理移动到指定的目标位置 } } ``` #### 2. **路径计算与动态避障** 路径计算由 `NavMeshAgent` 完成,该组件负责处理从当前位置到目标位置的最佳路径。如果路径被阻塞,则会自动重新计算新的路径[^6]。 动态避障功能允许多个 AI 同时在地图上移动而不会相互碰撞。此功能基于社交距离模型,能够模拟真实世界的行为模式。 #### 3. **常见问题及其解决方案** ##### (1)**无法生成有效的 NavMesh** 如果发现某些区域未包含在 NavMesh 中,可能是由于这些物体缺少 `NavMeshSurface` 或者其层设置不正确。确保所有参与导航的对象都标记为 `Navigation Static` 并分配给合适的图层层级[^7]。 ##### (2)**AI 卡住或者绕路** 这种情况通常是因为地形复杂度超出了默认参数范围。调整 `NavMesh Build Settings` 下的最大坡度、最小跳跃高度等属性可以帮助改善这一现象[^8]。 ##### (3)**性能优化建议** 对于大规模开放世界的项目来说,实时重建整个地图可能会带来较大的开销。因此推荐采用分块加载的方式管理不同区域内的数据结构[^9]。 #### 4. **注意事项** 当尝试修改运行期间内存布局时需格外小心,因为这可能导致不可预见的结果甚至崩溃风险[^4]。务必测试任何自定义逻辑以验证其稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值