unity基础——Navigation导航系统(补充)
1)修改 door 的成本。
·
1、Off Mesh Link 过渡动画设置
- 首先创建一个动画
- 关闭 Nav Mesh Agent 中的 Auto Traverse Off Mesh Link
- 编写脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class OffMeshTest : MonoBehaviour { //Player public NavMeshAgent agent; //跳跃动画 public Animation ani; //是否正在传送 bool isTransfering; //传送目标 OffMeshLinkData omld; void Update() { // 检测是否处于OffMeshLink上 if(agent.isOnOffMeshLink) { if(!isTransfering) //未开始传送 { ani.Play("offmeshAni"); omld = agent.currentOffMeshLinkData; isTransfering = true; } else //开始传送 { // 获取动画的归一化进度(0到1之间) float timeLerp = ani["offmeshAni"].normalizedTime; // 计算线性插值位置(从起点到终点) var posLerp = Vector3.Lerp(omld.startPos, omld.endPos, timeLerp); // 添加Y轴的正弦曲线运动,模拟跳跃抛物线 posLerp.y+= Mathf.Sin(timeLerp * Mathf.PI) * 2; if(!ani.isPlaying) //动画停止播放 { agent.transform.position = omld.endPos; isTransfering = false; // 完成OffMeshLink过渡 agent.CompleteOffMeshLink(); } } } } }
2、Navigation Area导航区域成本设置
成本设置——代码实现:
1)修改 door 的成本
2)Area Mask
代码实现:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class NavAreaTest : MonoBehaviour
{
//Player
public NavMeshAgent agent;
void Update()
{
if (Input.GetKeyDown(KeyCode.T))
{
NavMesh.SetAreaCost(NavMesh.GetAreaFromName("Door"), 10000.0f);
}
if(Input.GetKeyDown(KeyCode.M))
{
int walkable = 1 << NavMesh.GetAreaFromName("Walkable");
int jump= 1 << NavMesh.GetAreaFromName("Jump");
int door = 1 << NavMesh.GetAreaFromName("Door");
agent.areaMask = walkable + jump+ door;
}
}
}
3、多导航场景叠加跳转
实现代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
public class Test : MonoBehaviour
{
public OffMeshLink oml;
GameObject linkGo;
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
// Scene加载模式 为 叠加 LoadSceneMode.Additive (两个Scenes同时出现)
SceneManager.LoadScene("SceneAdd2", LoadSceneMode.Additive);
}
if (Input.GetKeyDown(KeyCode.B))
{
linkGo = GameObject.FindGameObjectWithTag("Link");
oml.endTransform = linkGo.transform;
}
}
}
4、Nav Mesh Agent (导航代理组件)
1)Steering
- Stopping Distance:到达目标位置立即停止运动(不为0)
- Auto Braking:自动刹车
多个寻路点 不勾选
2)Obstacle Avoidance
- Radius(半径)
- Height(高度)
- Quality(质量):质量越高,监测频率越高
- Priority(优先级):数字越小,优先级越高
3)Path Finding
- Auto Repath(重新规划路径):
不勾选 遇到障碍 障碍消失 Player 未到达指定位置
勾选 遇到障碍 障碍消失 Player 到达指定位置
5、其他问题
人物运动打滑
偏离中心点
12--15
更多推荐
所有评论(0)