Unity随机寻路

        当今的游戏设计行业越来越注重游戏的可玩性和交互性,而游戏中的角色寻路是其中一项重要的技术挑战。本篇博客将深入探讨如何使用Unity中的NavMesh和代码实现让角色在一个区域内随机寻路的功能。下面先给出代码实现,随后对代码进行注释和详细解释。

using UnityEngine;
using UnityEngine.AI;
using System.Collections;

public class RandomMovement : MonoBehaviour {

    public float range = 10.0f; //移动范围
    private NavMeshAgent agent;
    private Vector3 destination; //目的地

    void Start () {
        agent = GetComponent<NavMeshAgent>();
        SetDestination();
    }

    void SetDestination() {
        Vector3 targetPos = Random.insideUnitSphere * range; //生成一个随机目的地
        NavMeshHit hit;
        NavMesh.SamplePosition(targetPos, out hit, range, 1); //检查可到达性
        destination = hit.position; //保存目的地位置
        agent.SetDestination(destination); //设置目的地
    }

    void Update () {
        if(agent.remainingDistance < 0.5f) //如果已经到达
        {
            SetDestination(); //设置下一个目的地
        }
    }
}

代码解释:

  1. 我们首先导入了UnityEngine和UnityEngine.AI库,分别用于Unity和导航网格。
  2. 定义了一个名为RandomMovement的类,继承了MonoBehaviour类。
  3. 定义了一个公有变量range,表示角色可以移动的范围。
  4. 定义了NavMeshAgent类型的私有变量agent,用来控制角色在寻路过程中的移动。
  5. 定义了Vector3类型的私有变量destination,表示角色的目标位置。
  6. 在Start方法中,我们通过GetComponent方法获取角色的NavMeshAgent组件,并调用SetDestination方法设置角色的初始目标位置。
  7. 在SetDestination方法中,我们首先通过Random.insideUnitSphere方法生成一个随机的三维向量targetPos,表示目标位置。
  8. 然后利用NavMesh.SamplePosition方法检查目标位置是否可达,并将检查结果保存在NavMeshHit类型的hit变量中。
  9. 如果目标位置可达,我们将hit.position(即目标位置)保存在destination变量中,并通过agent.SetDestination方法告诉角色去往该位置。
  10. 在Update方法中,我们监测角色是否已经到达了目标位置,如果是,则调用SetDestination方法设置新的目标位置。

这个思路很简单,结合Unity的NavMesh可以写出十分简洁且实用的角色随机寻路代码,非常适用于一些需要增加游戏可玩性的游戏。

猜你喜欢

转载自blog.csdn.net/Asklyw/article/details/130402765