寻路在游戏开发中的重要性,不用多说了。从大型ARPG游戏到小规模体验游戏,都会不同程度的用到寻路功能。

塔防类游戏,战棋类游戏经常用到waypoint(路径)寻路。

下面我们来介绍一下waypoint寻路。

1.Path(路径)的设计。

图中每一个蓝色的Cube表示一个路径点(WayPoint),由7个waypoint构成path;

       

Path.cs代码如下:

using UnityEngine;
using System.Collections; public class Path : MonoBehaviour {
public WayPoint[] wayPoints;
public ArrayList points; //存储wayPoints的transform.position属性 // Use this for initialization
void Awake()
{
//print("path");
points = new ArrayList();
for (int i = ; i < wayPoints.Length; i++)
{
points.Add(wayPoints[i].transform.position);
}
} //判断是否有下一个路径点
public bool HasNextPoint()
{
//points实例化过,并且存在N个路径点
if (points!=null && points.Count>)
{
return true;
}
return false;
} public Vector3 GetNextPoint()
{
if (points!=null && points.Count>)
{
Vector3 p=(Vector3)points[];
points.RemoveAt();
return p;
}
return Vector3.zero;
}
}

为需要移动的物体或者人物创建WayPointAI

WayPointAI代码如下

using UnityEngine;
using System.Collections; public class WayPointAI : MonoBehaviour
{
public Path path;
private Vector3 pos;
private float rotateSpeed = 10f;
private float moveSpeed = 5f;
// Use this for initialization
void Start()
{
if (path!=null && path.HasNextPoint())
{
pos = path.GetNextPoint();
}
} // Update is called once per frame
void Update()
{
bool reached = MoveToTarget(pos);
if (reached==true && path!=null && path.HasNextPoint())
{
pos = path.GetNextPoint();
}
}
bool MoveToTarget(Vector3 point)
{
//只在XZ平面上移动,消除鼠标点击对Y轴的偏移,保持transform.y
Vector3 pointR = new Vector3(point.x, transform.position.y, point.z);
//Quaternion插值 物体朝向目标点平缓转向
Quaternion wantedRot = Quaternion.LookRotation(pointR - transform.position);
transform.rotation = Quaternion.Lerp(transform.rotation, wantedRot, rotateSpeed * Time.deltaTime);
//使用插值当物体到达目标点以后,会有抖动现象,在point处消除抖动
float distance = Vector3.Distance(pointR, transform.position);
if (distance < 0.05f)
{
return true; //到达point
}
//向目标点移动
Vector3 direction = (pointR - transform.position).normalized;
transform.Translate(direction * moveSpeed * Time.deltaTime, Space.World);
return false;
} }

WayPoint寻路的更多相关文章

  1. A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)

    在Unity3d中,我们一般常用的寻路算法:   1.A*算法插件   与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不 ...

  2. A*寻路算法探究

    A*寻路算法探究 A*算法常用在游戏的寻路,是一种静态网路中求解最短路径的搜索方法,也是解决很多搜索问题的算法.相对于Dijkstra,BFS这些算法在复杂的搜索更有效率.本文在U3D中进行代码的测试 ...

  3. Unity3D寻路导航烘焙

    在初次进行3D(三维)游戏体验中,避免不了对游戏有生疏的情况,因此在游戏中一般会插入新手指导.自动寻路.导航地图等AI人工智能技术到游戏中,方便玩家更快体验,为了玩家的体验更好,Unity3D寻路导航 ...

  4. 一步一步开发Game服务器(五)地图寻路

    目前大多数使用的寻路算法有哪些? 目前市面上大部分游戏的寻路算法是A*,或者B*. A*通常所说的是最优算法也就是寻找最短路径.B*碰撞式算法也就是,也就是不断的去碰撞能走就走,不管是不是绕路.当然以 ...

  5. A星寻路算法介绍

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...

  6. 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了

    地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图

  7. A*寻路算法

    对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解. 简而言之,A*寻路就是计算从起点经过该 ...

  8. MMORPG大型游戏设计与开发(服务器 游戏场景 聊天管道和寻路器)

    又快到双十一,又是不少同仁们出血的日子,首先希望大家玩的开心.我曾经想要仔细的剖析场景的的每个组件,就像这里的聊天管道与寻路器,但是仔细阅读别人代码的时候才发现元件虽小但是实现并不简单,因为有些东西还 ...

  9. A star 寻路

    大白话说一下几个点: 通俗的来说,其实就是以一个规则来 从A点走到B点. 怎么来判断我们走的格子是一个合适的格子? 就是靠一个规则来计算,这个规则就是估价函数. 估价函数: 常用:曼哈顿算法 F = ...

随机推荐

  1. 如何面试程序员 zhuan zai

    zhuan zai  http://blog.csdn.net/cuibo1123/article/details/41931909aia 面试对于大多数开发人员来说是一项很基本的技能.一次失败的招聘 ...

  2. 【Reporting Services 报表开发】— 页码编列

    一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH4 二.在报表文件 ...

  3. C#子线程刷新界面并关闭窗体

    目的:要循环刷新界面上的控件,同时不影响用户操作.循环结束后关闭窗体. 步骤:先创建一个窗体,窗体中拖入一个lable控件(label1),一个button控件(button1) 代码窗口输入: // ...

  4. 转(linux shell)(2)

      http://oldboy.blog.51cto.com/2561410/1665163 1.按单词出现频率降序排序! 2.按字母出现频率降序排序! the squid project provi ...

  5. HDP2.4安装(二):Centos7配置

    Centos7 Minimal Install 安装完成后是不支持上网的,并且大部分常用的软件也未安装,首先要解决的问题就是网络配置.当网络配通后,即可通过Xshell或其它工具来远程进行操作与管理, ...

  6. android ANR

    下面有两篇关于Android ANR的文章,感觉不错,分享一下! [Android实例] [Sundy系列]网上绝无仅有的Log分析教程及例子!android ANRhttp://blog.csdn. ...

  7. [linux]BASH 的基本语法

    最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     最简单的例子 -- ...

  8. [转]使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试

    本文关键字:Minidumps, Windows, SEH, VisualC, .NET 摘要 本文讲述了 minidumps 是怎样工作的.当你的程序崩溃的时候应该如何生成它们.以及如何在 Visu ...

  9. 剑指offer系列60---第一个只出现一次的字符

    [题目]在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置. * 若为空串,返回-1.位置索引从0开始 * [思路]1 首先遍历字符串数组,添 ...

  10. LitDB文章

    阅读目录 1.LiteDB初步介绍 2.LiteDB使用基本案例 3.LiteDB的技术细节 4.资源其他 今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介 ...