天天看點

Unity3D學習筆記04:角色控制器CharacterController控制人物移動旋轉

           如果你在遊戲的開發中,想要控制主角的移動卻又不想處理剛體的碰撞,那麼Unity3D中的角色控制器元件CharacterController就可以滿足你的要求了。它包含一些剛體的屬性,比如,如果在一個添加了角色控制器元件的對象上添加一個帶有SimpleMove()函數的腳本,那麼該對象的重力被自動應用,而且該對象的Y軸上的速度被忽略;而如果你想保留Y軸上的速度,不應用重力,則可使用角色控制器的Move()函數控制對象。好了,下面通過具體的例子來學習角色控制器CharacterController的使用方法。

       我們要實作的效果是我們的英雄在三個點之間來回直線運動,并且在到達某一點時實作轉身的效果。

       首先建立一個工程,我們把需要的主角模型拖到場景中,主角模型可以從文章最後的工程下載下傳後獲得。我們把貼圖拖到主角模型上,就出現了一個帥氣的魔法師角色。然後我們建立一個平面Plane,三個空對象,命名為point1,point2,point3,并添加辨別,還有在場景中加入一個Directional light燈光。完成之後的效果如下:

Unity3D學習筆記04:角色控制器CharacterController控制人物移動旋轉

         然後我們開始編寫腳本代碼,建立一個C#檔案,重命名為“heroControl”,具體代碼如下所示,注釋都已添加。

using UnityEngine;
using System.Collections;

public class heroControl : MonoBehaviour {

    //定義主角角色控制器
    CharacterController hero;

    //點數組
    public Transform[] points;

    //下一個點的下标,主角移動速度
    public int nextIndex;
    public int moveSpeed = 10;

    void Start()
    {
        //初始化主角移動速度
        nextIndex = 0;
        //獲得主角的角色控制器元件
        hero = GetComponent<CharacterController>();
    }
    void Update()
    {
        //如果主角距離點的距離大于0.2,則算出主角的朝向,移動主角人物
        if (Vector3.Distance(ignoreY(points[nextIndex % points.Length].position), ignoreY(transform.position)) > 0.2f)
        {
            //主角的朝向即為下一個點坐标減去主角坐标的向量
            Vector3 direction = (ignoreY(points[nextIndex % points.Length].position) - ignoreY(transform.position)).normalized;
            //插值改變主角的朝向,使其有一個自然轉向的過程,防止其瞬間轉向
            hero.transform.forward = Vector3.Lerp(transform.forward, direction, 0.1f);
            //移動主角
            hero.SimpleMove(transform.forward * moveSpeed);
        }
        else
        {
            //如果到達點,則使下一點作為目标點
            nextIndex++;
        }
    }
    //這個函數用來取消向量的Y軸影響,比如主角的高度與點之間可能有一段距離,我們要忽略這段距離
    Vector3 ignoreY(Vector3 v3)
    {
        return new Vector3(v3.x, 0, v3.z);
    }
}
           

       最後我們把腳本檔案拖到主角模型上,然後别忘了把三個點拖到我們定義的點數組中

Unity3D學習筆記04:角色控制器CharacterController控制人物移動旋轉

      好了,運作程式,我們可以看到主角自己在三個點之間來回巡邏,并在到達某一點後轉身繼續向下一點運動,我們這裡隻是截圖,是以看不出效果,請大家下載下傳項目工程源碼後運作檢視效果。

Unity3D學習筆記04:角色控制器CharacterController控制人物移動旋轉

     項目源碼下載下傳位址:點此下載下傳

繼續閱讀