WayPoint寻路
生活随笔
收集整理的這篇文章主要介紹了
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 = 0; i < wayPoints.Length; i++)
{
points.Add(wayPoints[i].transform.position);
}
}
//判斷是否有下一個路徑點
public bool HasNextPoint()
{
//points實例化過,并且存在N個路徑點
if (points!=null && points.Count>0)
{
return true;
}
return false;
}
public Vector3 GetNextPoint()
{
if (points!=null && points.Count>0)
{
Vector3 p=(Vector3)points[0];
points.RemoveAt(0);
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寻路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看S/4HANA指定时间段批量生产
- 下一篇: springcloud中怎么利用gatw