效果
分析
在这里我们需要用到的知识点有
- AI(地面烘焙,自动寻路)
- 射线检测
具体流程
首先我们需要创建一个地面Plane
创建好之后在右侧Inspector面板中把Navigation Static勾选上
因为在后面导航烘焙中需要静态才可以烘焙,所以我们需要把地面设置为导航静态
设置好之后点击Window/AI/Navigation
点击之后就会出现这么一个面板
我们选择Bake
然后点击下面的Bake开始烘焙
烘焙完之后我们发现,边缘的一些地方我们还没有烘焙到
怎么解决呢
我们发现了Agent Radius这个属性
Agent Radius : 这个属性可以调整距离边缘远近的问题我们之前是0.5f,现在把他调成0.1f
然后我们再次点击Bake烘焙
我们发现这次比之前烘焙面积大了很多
接下来我们就开始创建一个Cube开始寻路
我们给创建好的Cube添加一个Nav Mesh Agent组件
这个组件就是用来寻路用的,具体详情大家可以查看unity官方文档
链接: Nav Mesh Agent 文档.
下面我们就开始写代码
using UnityEngine;
using UnityEngine.AI;
public class Move : MonoBehaviour
{
NavMeshAgent agent;
Camera cam;
// Start is called before the first frame update
void Start()
{
agent = GetComponent<NavMeshAgent>();//获取cube中的NavMeshAgent组件
cam = Camera.main;//取到相机
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0))//当鼠标左键按下的时候
{
Ray ray=cam.ScreenPointToRay(Input.mousePosition);//从当前点击的位置发射一条射线
if(Physics.Raycast(ray,out RaycastHit hit))//判断当前射线有没有射中物体
{
if(hit.transform.CompareTag("Ground"))//判断射中的物体是不是地面
{
//是的话我们就让cube移动过去
agent.SetDestination(hit.point);//设置目标点
}
}
}
}
}
在代码中我们判断了射中的物体是否是地面,他的tag是Ground刚刚没有设置,在这里我们重新设置一下
选中Plane
点击AddTag
然后我们编辑一个Ground保存就好啦
保存之后我们就可以在tag列表中看到这个tag啦
然后我们选中他就可以啦!!!(注意,选中的tag一定要和代码里面的tag一模一样)
好啦在这里本篇文章就结束啦,喜欢的小伙伴麻烦点个赞哦!!!每一个赞都是博主写文章最大的动力,谢谢大家!
(文章中出现的射线检测如果有不会的请大家关注博主,在后期博主会专门写一篇关于射线检测的文章哦)