unity学习笔记

一、导航组件

在Unity中,导航组件通常指的是与游戏中的导航和路径寻找相关的系统。Unity中最常用的导航组件之一是NavMesh(Navigation Mesh)系统。NavMesh系统允许游戏对象在场景中寻找和移动到目标位置。

现状有如下场景,要让角色沿着阶梯和斜坡走,使用导航系统就要告诉导航系统哪些区域可以走哪些区域不可以走。导航通过生成网格的方式,让网格内的区域可以走网格外的区域不可以走。

unity学习笔记_第1张图片

1.如何生成网格?

为需要生成网格的区域添加NavMeshSurface组件

选择窗口→AI→导航会打开如下界面:

unity学习笔记_第2张图片

网格是通过图中的半径和高度的数据来生成网格,比如现状有一个高度为1.8m的洞穴,那他就会计算出不能通过,反正如果高于两米那就能通过。

最大坡度:表示人物能通过的最大坡度为45°。

步高:就是通过台阶每一步可以抬升多少,如果相邻台阶高于步高人物就不能上去。

现在点击Bake之后就能通过对应的区域去计算出能移动的网格,也就意味着人物在蓝色区域可以行走。

unity学习笔记_第3张图片

可以发现图中还有一部分是空缺的部分,这个空缺的区域是跟之前的代理半径相关的。

2.创建角色在网格中移动。

现在的目的:鼠标点击哪里,角色就移动到该位置。

首先为角色添加组件NavMeshAgent。

unity学习笔记_第4张图片

NavMeshAgent 组件是 Unity 导航系统中的关键组件之一,用于启用游戏对象在场景中进行导航。该组件使游戏对象能够在场景中寻找路径、移动到目标位置,并处理避障等导航相关的任务。

常用属性:

代理类型:这个可以设置不同类型的人物的代理类型.

基准偏移X:

表示游戏对象在 NavMesh 上的垂直偏移。这个值会影响寻路时的起点和终点高度。当游戏对象的底部与NavMesh表面不完全对齐时,可以通过调整 baseOffset 来校正。

转向(Angular Speed) :

作用: angularSpeed 控制游戏对象旋转的速度,即角速度。该值表示每秒旋转的度数。

使用场景:适用于控制游戏对象在转向时的平滑性。

速度(Speed) :

作用: speed控制游戏对象的移动速度。

使用场景: 通过调整 speed ,可以控制游戏对象在NavMesh上移动时的整体速度。

角速度(Angular Speed) :

作用: angularSpeed 是 NavMeshAgent 在旋转时的角速度,即每秒旋转的度数。

使用场景:适用于调整游戏对象在导航中的旋转速度。

加速度(Acceleration) :

作用: acceleration 控制游戏对象在达到目标速度之前的加速度。

使用场景:通过调整 acceleration,可以影响游戏对象在开始移动时的加速度。

停止距离(Stopping Distance) :

作用:stoppingDistance 定义了游戏对象在到达目标位置前应该停止的距离。

使用场景:通过设置stoppingDistance,可以确保游戏对象在接近目标时不会超过目标位置。

自动刹车(Auto Braking) :

作用: autoBraking 控制是否启用自动刹车。如果启用,NavMeshAgent 会在接近目标时逐渐减速,而不是突然停止。

使用场景:适用于使游戏对象的移动看起来更加平滑,避免突然停止。

躲避障碍中的优先级:如果同时有两个游戏物体同时通过一个区域,谁的优先级高谁就先移动。

然后再控制游戏物体的脚本中写一下代码:

public class playerControl : MonoBehaviour
{
    private NavMeshAgent agent;
    void Start()
    {
        //获取代理组件
        agent = GetComponent < NavMeshAgent > ();

    }

    // Update is called once per frame
    void Update()
    {
        //如果按下鼠标
        if (Input.GetMouseButtonDown(0))
        {
            //获取点击位置
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if(Physics.Raycast(ray,out hit))
            {
                //点击位置
                Vector3 point = hit.point;
                //设置该位置为导航点
                agent.SetDestination(point);
            }
        }
    }
}

这样就能实现游戏物体跟着鼠标点击位置移动了,并且会自动躲避障碍物。

unity学习笔记_第5张图片

你可能感兴趣的:(unity,学习,笔记)