筆記19 UGUI

Canvas

添加、渲染組件、接收射線組件

在這裏插入圖片描述

縮放組件(懶人必會法、完美自適應:錨點、UI中心)

在這裏插入圖片描述
在這裏插入圖片描述

Text(富文本、描邊、陰影)

在這裏插入圖片描述
在這裏插入圖片描述

Image

圖片形式、圖片展開方式(可做進度條、血條)

在這裏插入圖片描述

血條的製作

在這裏插入圖片描述

立即減血

using UnityEngine.UI;

//UI相關的,都要先寫好名稱空間using UnityEngine.UI;
public class HPBar : MonoBehaviour {
    //給區間。使得unity裏面由原本的天數值,變成了滑塊
    [Range(0,1)]
    //讓外界設置一個血量的百分比
    public float HpValue = 1;
    //拿到修改的Image。FillImage填充的Image。
    public Image FillImage;
    //寫完後,在unity裏,把填充的Image拖到右側C#組件裏

    void Start () {
		
	}
	
	void Update () {
        //正常等於HpValue。此處由於是不規則血槽,0.75即爲滿血。
        //HpValue表示從0到1,所以此處還需要 * 0.75f
        FillImage.fillAmount = HpValue * 0.75f;
	}
	
    //給外界一個刷新血量的方法。最小血量、最大血量
    public void RefreshHp(float minHp, float maxHp)
    {
        //顯示的百分比 = 最小血量 /最大血量
        HpValue = minHp / maxHp;
    }
} 

滑動減血

using UnityEngine.UI;

//UI相關的,都要先寫好名稱空間using UnityEngine.UI;
public class HPBar : MonoBehaviour {
    //給區間。使得unity裏面由原本的天數值,變成了滑塊
    [Range(0,1)]
    //讓外界設置一個血量的百分比
    public float HpValue = 1;
    //拿到修改的Image。FillImage填充的Image。
    public Image FillImage;
    //寫完後,在unity裏,把填充的Image拖到右側C#組件裏

    //做滑動減血。
    //生成一個值
    public float value;

    void Start () {
        //首先它倆值一樣(第一時間是滿血的),這樣就不會做差值
        value = HpValue;
	}
	
	// Update is called once per frame
	void Update () {
        /*Value的值,利用插值來計算。(現在的值value,應該達到的值HpValue,
        時間1 * Time.deltaTime即血條移動速度)*/
        value = Mathf.Lerp(value, HpValue, 1 * Time.deltaTime);

        //正常等於HpValue。此處由於是不規則血槽,0.75即爲滿血。
        //HpValue表示從0到1,所以此處還需要 * 0.75f
        //此處,用Value替換HpValue
        FillImage.fillAmount = Value * 0.75f;
	}

    //給外界一個刷新血量的方法。最小血量、最大血量
    public void RefreshHp(float minHp, float maxHp)
    {
        //顯示的百分比 = 最小血量 /最大血量
        HpValue = minHp / maxHp;
    }
}

Raw Image(普通紋理、偏移與壓縮)

在這裏插入圖片描述

button

顏色、精靈切換,按鈕事件,製作技能按鈕

在這裏插入圖片描述

製作技能按鈕的代碼

 using UnityEngine.UI;

public class ButtonTest : MonoBehaviour {
    //給外界開放一個窗口,CD需要多長時間
    public float CD = 2f;
    //添加名稱空間後,拿到上面填充是圖片
    private Image FillImage;
    //計時器。到達CD的時間就可以從頭來了
    private float timer = 0;

    void Start () {
        //在這裏拿到它的子物體的組件
        FillImage = transform.GetChild(0).GetComponent<Image>();
        //爲了不用在unity裏做關聯,拖上腳本就可以使用。那麼就要動態給按鈕添加事件
        //首先得到這個按鈕組件,之後得到onClick,接着加一個監聽(監聽方法的名稱)
        GetComponent<Button>().onClick.AddListener(buttonClick);
	}
	
	void Update () {
		if (timer >= 0)
        {
            //圖片轉動的百分比等於它自身減去每一幀它會走的百分比
            //此處減上2秒纔會結束
            FillImage.fillAmount -= 1/CD * Time.deltaTime;
        }
	}

    //需要一個button事件。就是當點了這個按鈕之後,就會調這個事件
    void buttonClick()
    {
        //全黑
        FillImage.fillAmount = 1;
        //timer等於2
        timer = CD;
    }
}

控件之間的導航

在這裏插入圖片描述

Toggle

在這裏插入圖片描述

    public void ToggleChanged(bool b)
    {
        Debug.Log(b);
    }
    //寫完,到unity裏面關聯

Slider滑動條、進度條

在這裏插入圖片描述

Scrollbar滑動條

在這裏插入圖片描述

Dropdown下拉框(修改模板)

在這裏插入圖片描述

InputField輸入框

在這裏插入圖片描述

Panel(其實就是一個半透明的灰色的Image)

在這裏插入圖片描述

Scroll View滑動視圖

在這裏插入圖片描述

圖集

在這裏插入圖片描述

事件

這些控件的所有事件,都是通過unity封裝好的幾個接口來實現的。
例如:幫Image實現點擊的接口,那麼它也會變成button。

先寫明名稱空間,這個名稱空間下面有很多事件

 using UnityEngine.EventSystems;

鼠標接口(5個):鼠標移進來,鼠標移出去。點擊鼠標,鬆開鼠標。點擊。

public class EventTest : MonoBehaviour, IPointerEnterHandler,
IPointerExitHandler, IPointerDownHandler,IPointerUpHandler,IPointerClickHandler,
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("Click");
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("Down");
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("Enter");
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("Exit");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("Up");
    }
} 
public class EventTest : MonoBehaviour, IBeginDragHandler,
IDragHandler,IEndDragHandler   
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("beginDrag");
    }

    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("drag");
        //跟隨鼠標移動
        transform.position = Input.mousePosition;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        Debug.Log("endDrag");
    }   
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章