欢迎加入Unity业内qq交流群:956187480
自动寻路已经很久没有用到了,自从学习unity的时候了解接触了一下NavMessAgent组件,至今再也没有研究过。没办法,经手的项目很少用到这个组件的。趁着最近手上闲下来了想重新稳固一遍,生怕将来用到的时候还得浪费时间
先从简单的了解NavMessAgent开始
一,建立NavMessAgent环境新建plane,打开Window>Navigation,在Inspector面板右侧有一个navigation面板,不同的Unity版本这个界面可能不太一样。选中plane打开Navigation。在Navigation面板里面里面勾选Navigation Static选项,其他的默认不改动。然后点击左边Bake面板。这时候会有一个计算的过程,曾经用过烘焙或者遮挡剔除的朋友应该对这个过程很熟悉了。不过和之前两个功能一样,如果你没有保存场景level,unity会提示你先保存,然后再bake。由于现在场景里面的物体很少,所以Bake的过程很快就结束了。Navigation Area的选项可以自己自定义添加。
bake结束后scene界面就会发生变化,新建控制物体cube,并添加Navmessagent组件。新建脚本编写控制逻辑
#region 模块信息
// **********************************************************************
// Copyright (C) 2019 The company name
//
// 文件名(File Name): Tese01.cs
// 作者(Author): #AuthorName#
// 创建时间(CreateTime): #CreateTime#
// 团队成员(TeamMembers):
// 脚本描述(Module description):
// **********************************************************************
#endregion
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Tese01 : MonoBehaviour {
Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标
Vector3 mousePositionOnScreen;//获取到点击屏幕的屏幕坐标
Vector3 mousePositionInWorld;//将点击屏幕的屏幕坐标转换为世界坐标
public GameObject target;
private NavMeshAgent nav;
// Use this for initialization
void Start () {
nav = gameObject.GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update () {
nav.SetDestination(target.transform.position);
if (Input.GetMouseButtonDown(0))
{
MouseFollow();
}
}
void MouseFollow()
{
//获取鼠标在相机中(世界中)的位置,转换为屏幕坐标;
screenPosition = Camera.main.WorldToScreenPoint(transform.position);
//获取鼠标在场景中坐标
mousePositionOnScreen = Input.mousePosition;
//让场景中的Z=鼠标坐标的Z
mousePositionOnScreen.z = screenPosition.z;
//将相机中的坐标转化为世界坐标
mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
//物体跟随鼠标移动
target.transform.position = mousePositionInWorld;
//物体跟随鼠标X轴移动
//transform.position = new Vector3(mousePositionInWorld.x, transform.position.y, transform.position.z);
}
}
运行工程点击鼠标演示结果
二.添加障碍物,绕过障碍物新建适当大小的障碍物,打开障碍物的Navigation面板,勾选Navigation Static。选Notwalkable,然后再bake一下
演示结果
欢迎加入Unity业内qq交流群:956187480