当前位置: 代码网 > it编程>游戏开发>游戏引擎 > Unity3D游戏-鼠标点击使角色移动避开障碍物

Unity3D游戏-鼠标点击使角色移动避开障碍物

2025年09月15日 游戏引擎 我要评论
在unity的世界里,当你轻点鼠标,角色仿佛被赋予了新的使命,沿着一条无形的轨迹,向着地图上的目标点进发。每一次移动,不仅是简单的位移,更是对未知的探索。这种交互,让玩家与游戏世界紧密相连,仿佛自己就

在unity的世界里,当你轻点鼠标,角色仿佛被赋予了新的使命,沿着一条无形的轨迹,向着地图上的目标点进发。每一次移动,不仅是简单的位移,更是对未知的探索。这种交互,让玩家与游戏世界紧密相连,仿佛自己就是那个掌控命运的魔法师,用指尖绘制出角色的冒险之路......

安装导航网格

1.打开package manager包管理器,找到并选择unity registry。

2.在搜索框里输入“ai”,找到ai navigation,然后点一下“安装”按钮。(像我这里,因为之前已经装过了,所以没有显示“安装”按钮。如果你是第一次装,就会看到一个“安装”按钮,点一下就能装上了)

为角色和地图设置和烘培导航网格

1.我们首先需要为角色添加一个导航组件,选中角色对象,然后在其上添加一个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 hitbyscreen))
{
//判断射线碰撞到的是否为障碍物(这里的6就是我们的图层编号,第6是障碍物图层)
if (hitbyscreen.collider.gameobject.layer == 6)
{
//获取到碰撞到的障碍物的位置,然后把位置加上大小,就可以获取到障碍物边缘的坐标点(也就是障碍物前面的地面上的点)
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.setbool("run", false);
}
}
}

测试和运行

经过对案例的运行测试,成功实现在“无障碍物”地图上点击鼠标左键,角色朝鼠标位置移动。在“有障碍物”地图上点击障碍物,角色成功移动到障碍物前停下,并且停止跑步动画。

到此这篇关于unity3d游戏-鼠标点击使角色移动避开障碍物的文章就介绍到这了,更多相关unity3d游戏-鼠标使角色移动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com