為了豐富我們的游戲,我們經(jīng)常會給游戲中的角色(怪物)添加行走路線,本想用 ITweenPath 插件實現(xiàn),但是一直沒有找到合適的辦法,因為不知道如何實現(xiàn)實行的獲得地形高度,或者如果使用角色控制器移動(CharacterController),怎么使用 ITweenPath 驅(qū)動?本人愚笨,自己實現(xiàn)了個(這兒只是使用 ITweenPath 繪制出來的點),也算拋磚引玉,如果讀者知道如何更簡單的實現(xiàn)方式,還請告之!共同進步!
先來看看最終的效果圖:
場景中有兩個角色,然后他們會在 ITweenPath 繪制的線上隨機移動!下面我們先搭建好測試的場景,如下圖:
然后我們使用 ITweenEditor 編輯場景中角色的行進路線,如下圖:
后面,就需要我們自己去實現(xiàn)行走的邏輯了,獲取 ITweenPath 曲線上的點,前面的文章中提到,詳細可以看此鏈接,然后我們新建立一個RoleController.cs 文件,然后編寫我們的代碼,全部代碼如下:
復(fù)制代碼代碼如下:
using UnityEngine;
using System.Collections;
public class RoleController : MonoBehaviour
{
public iTweenPath tweenPath;
/// <summary>
/// 曲線上面點的個數(shù),點數(shù)越多移動越平滑
/// </summary>
public int pointSize = 5;
/// <summary>
/// 角色移動速度
/// </summary>
public float speed = 3f;
public AnimationClip walkClip;
public AnimationClip idleClip;
private Vector3[] pathPositionList;
private Vector3 pathPoint;
private Vector3[] positionList;
private Vector3 nextPoint;
private Vector3 direction;
private int moveIndex;
private bool moveStatus;
private bool idleStatus;
private Animation animation;
void Awake()
{
this.pathPositionList = PointController.PointList(tweenPath.nodes.ToArray(), this.pointSize);
this.animation = this.GetComponent<Animation> ();
this.moveIndex = 0;
this.moveStatus = false;
this.idleStatus = false;
if (this.pathPositionList.Length > 0)
{
this.pathPoint = this.pathPositionList [Random.Range(0, this.pathPositionList.Length)];
}
}
void Start()
{
this.transform.position = this.GetTerrainPosition (this.pathPoint);
this.StartCoroutine(this.SetNextPositionList(0));
}
void Update()
{
this.SetMoveDirection ();
this.SetMovePosition ();
}
/// <summary>
/// 設(shè)置移動向量
/// </summary>
protected void SetMoveDirection()
{
if (this.positionList == null) return;
if (this.moveIndex < this.positionList.Length)
新聞熱點
疑難解答
圖片精選