目录
- 安装导航网格
- 为角色和地图设置和烘培导航网格
- 编写移动功能的脚本
- 测试和运行
在Unity的世界里,当你轻点鼠标,角色仿佛被赋予了新的使命,沿着一条无形的轨迹,向着地图上的目标点进发。每一次移动,不仅是简单的位移,更是对未知的探索。这种交互,让玩家与游戏世界紧密相连,仿佛自己就是那个掌控命运的魔法师,用指尖绘制出角色的冒险之路......
安装导航网格
1.打开package Manager包管理器,找到并选择Unity Registry。
2.在搜索框里输入“AI”,找到AI Navigation,然后点一下“安装”按钮。(像我这里,因为之前已经装过了,所以没有显示“安装”按钮。如果你是第一次装,就会看到一个“安装”按钮,点一下就能装上了)
为角色和地图设置和烘培导航网格
python1.我们首先需要为角色添加一个导航组件,选中角色对象,然后在其上添加一个Nav Mesh Agent组件。
2.设置角色的碰撞框(角色身上绿色的圆柱型框框),让其尽量去贴近我们的角色。
3.接着我们为地形添加导航网格。选中地形Terrain,然后点击Add Component,添加Nav Mesh Surface组件。
4.设置Default Area的属性为Walkable(可行走的)。
5.点击“Bake”烘培。
6.(可选)如果需要额外添加“不可行走的”障碍物。选中该障碍物对象,点击Add Component,为其添加一个NavMeshModifier的组件。
7.(可选)勾选上Override Area,选择Not Walkable(不可行走的)。
8.(可选)重新烘培地形。
编写移动功能的脚本
1.在Assets文件夹下创建一个空文件夹,可命名为Scripts(名称可自定),用于存放脚本。接着,在Scripts文件夹中创建C#脚本。
2.实现鼠标点击的移动功能
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class PlayerController : MonoBehaviour { //获取到导航网格的代理 private NavMeshAgent agent; //动画器 private Animator anime; //声明射线检测结果的变量 RaycastHit hitByScreen; void Start() { agent = transform.GetComponent(); anime = transform.GetComponent(); hitByScreen = new RaycastHit(); } void Update() { //当鼠标左键按下时触发。0代表左键,1代表右键 if (Input.GetMouseButtonDown(0)) { //创建一条从鼠标在屏幕上的位置射出到接触到场景物体的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //判断射线是否碰到场景的物体 if (Physics.Raycast(ray, out http://www.devze.comhitByScreen)) { //判断射线碰撞到的是否为障碍物(这里的6就是我们的图层编号,第6是障碍物图层) if (hitByScreen.collider.gameObject.layer == 6) { //获取到碰撞到的障碍物的位置,然后把位置android加上大小,就可以获取到障碍物边缘的坐标点(也就是障碍物前面的地面上的点) hitByScreen.point = hitByScreen.collider.gameObject.transform.position + hitByScreen.collider.gameObject.transform.localScale; //把这个点设置为目的地,角色就会在障碍物前面停下 agent.SetDestination(hitByScreen.point); } else { //把射线碰到物体的点设置为目的地点,并且角色会向目的地移动 agent.SetDestination(hitByScreen.point); } //角色开启跑步动画 anime.SetBool("Run", true); } } //如果角色到达指定地点就停止跑步动画 if (hitByScreen.point != null && transform.position.x == hitByScreen.point.x && transform.position.z == hitByScreen.point.z) { //角色停止跑步动画 anime.Sewww.devze.comtBool("Run", false); } } }
测试和运行
经过对案例的运行测试,成功实现在“无障碍物”地图上点击鼠标左键,角色朝鼠标位置移动。在“有障碍物”地图上点击障碍物,角色成功移动到障碍物前停下,并且停止跑步动画。
到此这篇关于Unity3D游戏-鼠标点击使角色移动避开障碍物的文章就介绍到这了,更多相关Unity3D游戏-鼠标使角色移动内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的python相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论