1. 程式人生 > >NGUI系列教程五(角色資訊跟隨)

NGUI系列教程五(角色資訊跟隨)

在一些網路遊戲中,我們常常可以看到角色的上方顯示著角色的名稱,等級,血量等資訊。它們可以跟隨角色移動,並且可以顯示和隱藏。今天我們就來學習一下這些功能的實現方法。
1. 新建unity工 程,匯入NGUI外掛。對於字型按鈕等的製作方法參見以前的系列教程。這裡我們直接開始學習製作方法。首先新建一個2DUI,設定UI的層為NGUI。新 建完成後,使用選單NGUI -->Create a Panel ,在現有Panel的節點下新建一個Panel,命名為Panel_CharacterInfo,作為角色資訊面板的根節點。使用Widget Tool建立兩個Label,一個命名為Name,另一個為Life。再建立一個Progress Bar,用於顯示角色的血量資訊。在建立一個建立完成後場景中檢視列表如圖:

2.  場景設定,現在我們新建一個Plane作為地面,新建一個PointLight用於場景照明,然後再新建一個Cube,作為我們的角色。場景設定如圖

3. 為cube新增角色控制器。首先匯入角色控制Package。在工程視窗中點選右鍵,選擇ImportPackage,選擇 Character Controller。該包包括兩個角色控制器,我們先把Cube自帶的BoxCollider刪除,然後為它新增 FPSInputController,CharacterMotor兩個指令碼。就完成Cube的角色設定了,點選執行,按下鍵盤的方向鍵可以看 到,Cube可以根據我們的按鍵左右移動。

4.編寫UI跟隨角色控制指令碼指令碼。對於實現方法,我們可以有以下思路。首先我們想要清楚,我們想要實現的是UI跟隨Cube移動。這裡我們就要考 慮,UI要得到Cube在螢幕上的座標位置。然後再根據位置做相應的移動。我們知道在Unity中,Camera. WorldToScreenPoint和Camera. ScreenToWorldPoint可以分別將世界座標和螢幕座標相互轉換。有了思路我們就可以動手寫程式碼。程式碼比較簡單,我已經在後面註釋了,大家可 以一目瞭然。

public class UIFollowTarget : MonoBehaviour {

    public GameObject TargetObject;         //目標物體。這裡是指Cube
    public Camera worldcamera;         //世界相機。
    public Camera guiCamera;           //UI相機
// Use this for initialization
void Start ()
    {
        worldcamera = NGUITools.FindCameraForLayer(TargetObject.layer);     //這裡是通過物體的層獲得相應層上的相機
        guiCamera = NGUITools.FindCameraForLayer(this.gameObject.layer);   //通過指令碼所在物體的層獲得相應層上的相機
}

// Update is called once per frame
void Update ()
    {

}
    void LateUpdate()
    {        
        Vector3 pos = worldcamera.WorldToScreenPoint(TargetObject.transform.position);         //獲取目標物體的螢幕座標
        pos = guiCamera.ScreenToWorldPoint(pos);                              //將螢幕座標轉換為UI的世界座標
        pos.z = 0;                                //由於NGUI 2D介面的Z軸都為0,這裡我們將座標修改為0.只取其X,Y座標。
        transform.position = pos;      //將修改過的座標賦給UI介面。這裡指Panel_CharacterInfo
    }
}

5. 將指令碼賦給Panel_CharacterInfo,設定目標物體為Cube,Worldcamera為Main Camera,guicamera設定為NGUI的Camera。完成後點選執行,我們可以看到,UI已經在跟隨物體移動了。

6. 當場景中有很多角色的時候,我們可能有時候只想看我們選中的角色的資訊。沒有選中的就隱藏,這樣的功能大家可以在熟悉了這些之後自己實現。這裡提供一個思 路供大家參考:首先定義一個角色資訊的類,然後根據當前選擇的角色,讀取該角色的資訊,賦值給UI裡的Name life等引數。並且賦值角色的位置資訊給UI,這樣UI就可以動態的顯示在響應角色的位置上。