寻路在游戏开发中的重要性,不用多说了。从大型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. selenium+python自动化之CSS定位

    一.css:属性定位 1.css可以通过元素的id.class.标签这三个常规属性直接定位到 2.如下是百度输入框的的html代码: <input id="kw" class ...

  2. selenium+python自动化之环境安装

    一.Python安装 1.操作系统:win7 64位系统 2.下载Python安装包,选择2.7版本和3.6版本都可以(最好安装2.7版本稳定)官网下载地址:https://www.python.or ...

  3. tomcat内存修改 解决内存溢出异常

    有时候tomcat刚解压完,部署项目后运行会报内存溢出的错误. 原因:项目过大,tomcat内存小. 解决:找到[tomcat]/bin/catlina.bat文件,打开: 在@echo off上面( ...

  4. Andaroid L新特性

    1.Material Design”(材料设计)的全新设计理念,和Holo相比,Material Design更加色彩丰富,不像Holo那样灰暗 2.1)卡片风格(锁屏界面) 2)环动式设计  And ...

  5. javascript中的removeEventListener失效问题

    一般现在我们用js绑定事件是 addEventListener(event,function,bool) event:事件的名称 字符串 如:'click', function: 事件处理的方法: b ...

  6. FileReader 基本介绍

    转自:http://blog.csdn.net/zk437092645/article/details/8745647 用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步 ...

  7. 真实赛车3,SPEEDRUSH TV 第3季,第3阶段(第3天),直线加速赛

    与其跳过,不如金币升级引擎和车身.因为后边紧跟一场计时赛.

  8. Saltstack系列5:Saltstack之pillar组件

    pillar组件 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等. 在pillar中定义的数据与 ...

  9. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  10. GCC同时使用静态库和动态库链接

    一 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库 ...