【Unity3D】自动寻路
来源:互联网 发布:淘宝双收藏是什么意思 编辑:程序博客网 时间:2024/05/22 00:14
毕竟游戏里面,不能所有物体都要求它按照一条定向的路径移动的,需要给玩家一个操作空间,让玩家点哪,这东西自然而然地去哪里。因此自《【iTween】指定路径位移》(点击打开链接)之后,自动寻路的需求应运而生。不过,Unity3D自带的功能,就能完成这个看起来高大上的功能。下面举一个例子说明这个问题。
如下图,摆了4个cube当作墙,然后摆一个球,当作游戏的主角,鼠标点哪走哪,但关键是不会出现穿墙的情况。
具体做法如下:
一、场景布置
1、如下图所示,没什么好说的。
2、之后先将这个场景保存为Navmesh,然后如下图打开自动寻路设置界面。
如下图所示,在Navigation界面,对所有代表墙的Cube和地板Plane都勾上Navigation Static。表示这些都是寻路的阻碍物。
都设置好再点击Bake。烘培之后就会出现如下图的淡蓝色的,可移动的区域。这是Unity3D自己能计算出来的。
3、给球加上Nav Mesh Agent这个组件,表示它是一个被导航体。里面的半径、速度等,Unity3D给你上这个组件的时候,基本会给你计算好的,如果你是自己导入的3D模型估计需要将半径改到和你的3D模型基本匹配的程度。
4、之后再给Plane上一个plane标签,用于碰撞检测。因为Unity3D中,鼠标点击Plane,需要是在鼠标点击的屏幕像素点,发出一条直线和Unity3D世界中物体碰撞,才能找到准确的点击的。这在《【Unity3D】判断是否鼠标点击物体与血条制作》(点击打开链接)已经说了,这里不再赘述了。毕竟这个plane注定要会被我们一会儿疯狂点击的。
二、脚本设置
给球sphere赋予如下的Navigation.cs:
using UnityEngine;using System.Collections;public class Navigation : MonoBehaviour{ private NavMeshAgent navMeshAgent; void Start() { navMeshAgent = gameObject.GetComponent<NavMeshAgent>();//初始化navMeshAgent } void Update() { if (Input.GetMouseButtonDown(0))//鼠标左键点下 { Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);//住摄像机向鼠标位置发射射线 RaycastHit mHit; if (Physics.Raycast(mRay, out mHit))//射线检验 { if (mHit.collider.gameObject.tag == "plane") { navMeshAgent.SetDestination(mHit.point);//mHit.point就是射线和plane的相交点,实为碰撞点 } } } }}则能够享受NavMeshAgent带来的Unity3D自动寻路的欢乐~(*^_^*)
- Unity3D自动寻路
- unity3d自动寻路
- Unity3D- 自动寻路
- 【Unity3D】自动寻路
- unity3d 自动寻路算法
- Unity3D中的自动寻路
- [Unity3D]Unity3D自动寻路Demo
- 【Unity3D】自动寻路的跳跃
- Unity3d NavMeshAgent自动寻路组件
- Unity3d 自动寻路(自带)
- Unity3D 自动寻径
- Unity3D开发敌人自动攻击和自动寻路
- Unity3D 中自动寻路教程 (一)
- Unity3d自带的自动寻路系统(一)
- Unity3d里面的自动寻路Navigation组件
- unity3d开发2d游戏:自动寻路Navmesh入门
- 【学习笔记】Unity3d中的自动寻路入门
- Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
- Unity3d+SQLite 中表名有无双引号的区别
- springmvc常用注解标签详解
- LR(0)分析算法
- 基于RHadoop的k-means聚类算法
- 将两个数交换的3种方法(异或法有陷阱!)
- 【Unity3D】自动寻路
- Java 连接 Memcached 服务
- TiD 2017质量竞争力大会召开时间
- Cacheline技术浅析
- VideoView使用小结
- 开源 | 语音识别商用开源代码与免费开放平台最全盘点分析
- 和为s的两个数字
- tomcat映射虚拟目录
- 关于idea在运行web项目时部署的位置