unity3d开发2d游戏:自动寻路Navmesh入门

  现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用unity3d开发2d游戏,自动寻路可以有很多种实现方式。第一种比较传统的是使用A星寻路,它是一种比较传统的人工智能算法,在游戏开发中比 较常用到。大部分的页游和端游都用到这种技术。在Unity游戏也可以用这种技术,Asset Store上面已经有相关的组件了,感兴趣的同学可以自己去了解。我在后面有机会再来详细介绍了。今天我们来学习Unity官方内置的寻路插件 -Navmesh。由于内容比较多,我们将分几次来系统学习。今天先通过学习一个最简单的例子来入门unity3d开发2d游戏。

  实例

  我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。

  步骤

  1.创建地形

  2.添加角色

  3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。

  4.选中地形,在Navigation窗口中,设置Navigation Static

  5.依次选中障碍物,在avigation窗口中,设置Navigation Static

  7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了

  8.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent

  9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

  using UnityEngine;

  using System.Collections;

  //Author:[email protected]

  public class PlayerController : MonoBehaviour

  {

  private NavMeshAgent agent;

  void Start()

  {

  //获取组件

  agent = GetComponent();

  }

  void Update()

  {

  //鼠标左键点击

  if (Input.GetMouseButtonDown(0))

  {

  //摄像机到点击位置的的射线

  Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

  RaycastHit hit;

  if (Physics.Raycast(ray, out hit))

  {

  //判断点击的是否地形

  if (!hit.collider.name.Equals("Terrain"))

  {

  return;

  }

  //点击位置坐标

  Vector3 point = hit.point;

  //转向

  transform.LookAt(new Vector3(point.x, transform.position.y, point.z));

  //设置寻路的目标点

  agent.SetDestination(point);

  }

  }

  //播放动画,判断是否到达了目的地,播放空闲或者跑步动画

  if (agent.remainingDistance == 0)

  {

  animation.Play("idle");

  }

  else

  {

  animation.Play("run");

  }

  }

  }

  完成了!这个unity3d开发2d游戏实例可以很简单的让我们学会如何最基本的使用自动寻路组件Nav。但是,这个组件还提供了更加强大的功能,比如,起始点和目标点中间出现阻断了,

更多关于unity3d开发2d游戏的信息,可查询天地会http://bbs.9ria.com/thread-109043-1-1.html

你可能感兴趣的:(unity3d开发2d游戏:自动寻路Navmesh入门)