unity手遊(3)NGUI:HUD使用

前言


本文由作者@zx一路飛奔出品,轉載請註明出處

文章地址:http://blog.csdn.net/u014735301/article/details/43085145

作者微博:http://weibo.com/u/1847349851


NGUI HUD Text是一款不錯的信息顯示插件,

例如人物頭頂的對話顯示,受到傷害,治療的數字顯示等。

顧名思義,這款插件是基於NGUI開發的,也就是說它必須跟NGUI配套使用。

這裏我使用這個插件來做一個攻擊傷害的顯示,同時也在怪物頭頂做了血條。先看看效果!




感覺還是超酷的! 下面來看看插件是怎麼使用的


血條製作


在項目中導入NGUI插件和HUD Text插件 創建一個NGUI 2D界面,

創建一個空對象,命名爲HP-small,使用2個UISprite圖片,HP-bg,HP-for,來作爲血條的背景圖片,和顯示在前面的圖片。

同時用到UISlider腳本。value值是用來控制HP-for圖片的長度,從而造成扣血的效果



同時爲了使血條能夠顯示在enemy的頭頂,還需要添加UIFollowTarget腳本

在enemy上方創建一個空對象,將腳本中target選擇那個對象。




這樣在遊戲中,血條就會跟隨enemy的移動而移動了!!同時傷害顯示也會在這個地方出現!!


傷害顯示


還是在HP-small上掛上HUDText腳本 




True Type Font 選擇字體,下面是字體大小,樣式,

Effect 是信息顯示的樣式,我選擇none。

Offset ,Alpha,Sacle 爲顯示信息的動畫效果,可以默認,也可以自己調整

在enemy控制腳本中,使用它,

HUDText mText.Add(String text, Color color, float stayDuration)text是需要顯示的文本,color是文本顏色,stayDuration是文本顯示的時間

    //受到傷害
    public void GetDamage(float hit, float multipleDamage)
    {
        Debug.Log("enemy受到了" + hit + "點傷害 * " + multipleDamage);
        for (int i = 0; i < multipleDamage; i++)
        {
            text.Add("-" + hit + "", Color.yellow, 0.1f);
            //根據血量的扣除,來調整value的值
            slider.value -= 0.1f;
        }
        EnemyLockTarget(player);
        ctrlAnimState = ControlAnimationState.TakeAtk;
	}

這樣就可以造成剛開始圖片中的效果了!!


實例化enemy和血條


在NGUI,創建空對象,命名爲HUDRoot,掛上HUDRoot腳本。在實例化hudtext時,就會在該對象下面出現

using UnityEngine;
using System.Collections;

public class SpawnTest : MonoBehaviour {
    //enemy 和 HUD 的prefab
    public GameObject enemyPrefab,HUDPrefab;

	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {   
            //實例化enemy
            GameObject enemy = Instantiate(enemyPrefab, new Vector3(transform.position.x, transform.position.y,
                Random.Range(-5f,5f)), Quaternion.identity) as GameObject;
            //在HUDRoot對象下,實例化血條和HUDText
            GameObject HUD =  NGUITools.AddChild(HUDRoot.go,HUDPrefab);
            //設置target對象爲enemy的子物體showInfo
            UIFollowTarget follow = HUD.GetComponent<UIFollowTarget>();
            follow.target = GameSetting.GetTransform(enemy.transform,"showInfo");
            //將hudtext腳本賦值給EnemyController使用
            HUDText hud = HUD.GetComponent<HUDText>();
            EnemyController enemyC = enemy.GetComponent<EnemyController>();
            enemyC.text = hud;
        }
	}
}

    //查找某個物體下無限層級的子物體名稱,並返回該子物體。
    static public Transform GetTransform(Transform check, string name)
    {
        foreach (Transform t in check.GetComponentsInChildren<Transform>())
        {
            if (t.name == name) { return t; }       
        }
        return null;
    }









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章