开发者

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

目录
  • 安装导航网格
  • 为角色和地图设置和烘培导航网格
  • 编写移动功能的脚本
  • 测试和运行

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

安装导航网格

1.打开package Manager包管理器,找到并选择Unity Registry。

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

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

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

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

python

1.我们首先需要为角色添加一个导航组件,选中角色对象,然后在其上添加一个Nav Mesh Agent组件。

2.设置角色的碰撞框(角色身上绿色的圆柱型框框),让其尽量去贴近我们的角色。

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

3.接着我们为地形添加导航网格。选中地形Terrain,然后点击Add Component,添加Nav Mesh Surface组件。

4.设置Default Area的属性为Walkable(可行走的)。

5.点击“Bake”烘培。

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

6.(可选)如果需要额外添加“不可行走的”障碍物。选中该障碍物对象,点击Add Component,为其添加一个NavMeshModifier的组件。

7.(可选)勾选上Override Area,选择Not Walkable(不可行走的)。

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

8.(可选)重新烘培地形。

编写移动功能的脚本

1.在Assets文件夹下创建一个空文件夹,可命名为Scripts(名称可自定),用于存放脚本。接着,在Scripts文件夹中创建C#脚本。

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

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游戏-鼠标点击使角色移动避开障碍物的文章就介绍到这了,更多相关Unity3D游戏-鼠标使角色移动内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的python相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜