Unity 导航网格代理 (NavMesh Agent)使用遇到的位置问题

在角色控制脚本中定义了agent

	private NavMeshAgent agent;//导航属性
	private bool autoNav = false;//是否在寻路

 在Start中初始化:

		if (!this.gameObject.GetComponent<NavMeshAgent>())//导航
		{//为什么会有残留值
			agent = this.gameObject.AddComponent<NavMeshAgent>();
			//agent.destination = this.transform.position;
            agent.stoppingDistance = 0.3f;
            //agent.nextPosition = this.transform.position;
            agent.updatePosition = false;
		}
		else
		{
            agent = this.gameObject.GetComponent<NavMeshAgent>();
            agent.updatePosition = false;
        }

通过AddComponent的方式,add成功以后会影响角色坐标(角色之前销毁过),怎么设置都不行。最终通过给角色提前拖上NavMeshAgent走get方式就正常了。

Unity使用`NavMeshAgent`组件可以使得游戏对象(通常是玩家控制的角色或AI控制的NPC)能够根据导航网格NavMesh)进行智能寻路。以下是使用`NavMeshAgent`的基本步骤: 1. **创建导航网格**:首先需要为游戏世界生成导航网格。这可以通过选择场景中的地形或模型,然后在Inspector面板中点击`Bake`按钮来完成。这将生成NavMeshNavMesh的生成规则可以通过`Window > AI > Navigation`面板进行配置。 2. **添加NavMeshAgent组件**:将需要进行导航的游戏对象(例如角色)选择,然后点击`Add Component`按钮,在搜索框中输入`NavMeshAgent`并添加。 3. **设置NavMeshAgent参数**:在添加了`NavMeshAgent`组件之后,可以通过Inspector面板调整其参数,如速度(Speed)、加速度(Acceleration)和转向速度(Angular Speed)等。 4. **编写控制脚本**:为了控制角色的移动,需要编写一个脚本来控制`NavMeshAgent`。以下是一个简单的脚本示例: ```csharp using UnityEngine; using UnityEngine.AI; // 引入命名空间 public class CharacterMovement : MonoBehaviour { private NavMeshAgent agent; void Start() { // 获取NavMeshAgent组件 agent = GetComponent<NavMeshAgent>(); } void Update() { // 每帧更新Agent的目标位置 if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, 100.0f)) { agent.SetDestination(hit.point); // 设置目的地为鼠标点击的位置 } } } } ``` 5. **附加脚本到游戏对象**:将编写好的脚本附加到你希望进行导航的游戏对象上。 6. **测试导航**:运行游戏并点击游戏视图中的地面,角色应自动沿着导航网格移动到鼠标点击的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值