WayPoint寻路
寻路在游戏开发中的重要性,不用多说了。从大型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寻路的更多相关文章
- A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)
在Unity3d中,我们一般常用的寻路算法: 1.A*算法插件 与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不 ...
- A*寻路算法探究
A*寻路算法探究 A*算法常用在游戏的寻路,是一种静态网路中求解最短路径的搜索方法,也是解决很多搜索问题的算法.相对于Dijkstra,BFS这些算法在复杂的搜索更有效率.本文在U3D中进行代码的测试 ...
- Unity3D寻路导航烘焙
在初次进行3D(三维)游戏体验中,避免不了对游戏有生疏的情况,因此在游戏中一般会插入新手指导.自动寻路.导航地图等AI人工智能技术到游戏中,方便玩家更快体验,为了玩家的体验更好,Unity3D寻路导航 ...
- 一步一步开发Game服务器(五)地图寻路
目前大多数使用的寻路算法有哪些? 目前市面上大部分游戏的寻路算法是A*,或者B*. A*通常所说的是最优算法也就是寻找最短路径.B*碰撞式算法也就是,也就是不断的去碰撞能走就走,不管是不是绕路.当然以 ...
- A星寻路算法介绍
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...
- 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了
地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图
- A*寻路算法
对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解. 简而言之,A*寻路就是计算从起点经过该 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 聊天管道和寻路器)
又快到双十一,又是不少同仁们出血的日子,首先希望大家玩的开心.我曾经想要仔细的剖析场景的的每个组件,就像这里的聊天管道与寻路器,但是仔细阅读别人代码的时候才发现元件虽小但是实现并不简单,因为有些东西还 ...
- A star 寻路
大白话说一下几个点: 通俗的来说,其实就是以一个规则来 从A点走到B点. 怎么来判断我们走的格子是一个合适的格子? 就是靠一个规则来计算,这个规则就是估价函数. 估价函数: 常用:曼哈顿算法 F = ...
随机推荐
- 简单实现JS Loading功能
我们经常在浏览网页的时候会看到数据在加载时,出现的LOADING提示.其实这个功能原理是很简单的,就是一个DIV遮盖当前页面,然后Loading就在遮盖DIV层上展示出来,现在我们来动手实现一下. 1 ...
- 利用Java Service Wrapper将java项目添加到windows服务中
1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...
- Android Studio2.0 教程从入门到精通Windows版 - 安装篇
详见:http://www.open-open.com/lib/view/open1468118887690.html
- MyEclipse Hibernate 学习总结
最近在学习Hibernate,先把学习的过程记录一下,方便自己以后复习. 1.使用工具 MyEclipse 10 2. 1)新建Java程序 2)右键程序,选择MyEclipse-> Add H ...
- 【linux】linux启动过程
- java 输入输出项目
package hellohe; import java.util.Scanner; /** * * @author Administrator *1.导入java.util.scanner; *2. ...
- android 插件化开发 开源项目列表
开源的插件化框架 Qihoo360/DroidPlugin CtripMobile/DynamicAPK mmin18/AndroidDynamicLoader singwhatiwanna/dyna ...
- 百度地图和js操作iframe
document.getElementById("ifarme-63").contentWindow.document.getElementById("qksv" ...
- 理解和配置 Linux 下的 OOM Killer
原文:http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/ 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有 ...
- windows类书的学习心得(转载)
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...