為了豐富我們的游戲,我們經(jīng)常會(huì)給游戲中的角色(怪物)添加行走路線,本想用 ITweenPath 插件實(shí)現(xiàn),但是一直沒(méi)有找到合適的辦法,因?yàn)椴恢廊绾螌?shí)現(xiàn)實(shí)行的獲得地形高度,或者如果使用角色控制器移動(dòng)(CharacterController),怎么使用 ITweenPath 驅(qū)動(dòng)?本人愚笨,自己實(shí)現(xiàn)了個(gè)(這兒只是使用 ITweenPath 繪制出來(lái)的點(diǎn)),也算拋磚引玉,如果讀者知道如何更簡(jiǎn)單的實(shí)現(xiàn)方式,還請(qǐng)告之!共同進(jìn)步!
先來(lái)看看最終的效果圖:
場(chǎng)景中有兩個(gè)角色,然后他們會(huì)在 ITweenPath 繪制的線上隨機(jī)移動(dòng)!下面我們先搭建好測(cè)試的場(chǎng)景,如下圖:
然后我們使用 ITweenEditor 編輯場(chǎng)景中角色的行進(jìn)路線,如下圖:
后面,就需要我們自己去實(shí)現(xiàn)行走的邏輯了,獲取 ITweenPath 曲線上的點(diǎn),前面的文章中提到,詳細(xì)可以看此鏈接,然后我們新建立一個(gè)RoleController.cs 文件,然后編寫(xiě)我們的代碼,全部代碼如下:
復(fù)制代碼代碼如下:
using UnityEngine;
using System.Collections;
public class RoleController : MonoBehaviour
{
public iTweenPath tweenPath;
/// <summary>
/// 曲線上面點(diǎn)的個(gè)數(shù),點(diǎn)數(shù)越多移動(dòng)越平滑
/// </summary>
public int pointSize = 5;
/// <summary>
/// 角色移動(dòng)速度
/// </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è)置移動(dòng)向量
/// </summary>
protected void SetMoveDirection()
{
if (this.positionList == null) return;
if (this.moveIndex < this.positionList.Length)
新聞熱點(diǎn)
疑難解答
圖片精選