【Unity3D】UGUI之Image和RawImage

1 紋理(Texture)

Image 控件和 RawImage 控件都是承載渲染圖片的控件,都需要指定一個紋理(Texture)圖片。在 Assets 窗口選中一張圖片,在 Inspector 窗口的參數(shù)設(shè)置面板可以查看和編輯圖片屬性。圖片屬性中最重要的是圖片類型(Texture Type),有 Default、Normal map、Editor GUI and Legacy GUI、Sprite(2D and UI)、Coursor、Cookie、Lightmap、Single Channel 8 種類型,其中最常用的是 Default 和 Sprite 2 種類型,以下是這 2 種類型圖片的參數(shù)設(shè)置面板。

當給圖片設(shè)置精靈(Sprite)類型時,可以點擊【Sprite Editor】按鈕編輯圖片的邊框,以解決圖片邊界變形問題:圖片在橫向拉伸時,左右兩邊的邊邊界不會拉伸;圖片縱向拉伸時,上下兩邊的邊界不會拉伸;無論水平還是縱向拉伸,四個角的邊界始終不變形。

2 Image 控件

1)面板屬性

Image 控件只能添加精靈(Sprite)類型圖片, 面板屬性如下:

2)Image Type

Image Type 有 Simple、Sliced、Tiled、Filled 4 種類型,對應(yīng)面板屬性如下:

  • Simple:圖片適配控件大小自由拉伸,勾選 Preserve Aspect 保持圖片寬高比不變,Set Native Size 設(shè)置控件寬高為圖片原始寬高;
  • Sliced:圖片適配控件大小自由拉伸,需要設(shè)置邊界,4 個角的邊界始終不變形,取消 Fill Center 只繪制邊界;
  • Tiled:當控件比較大、圖片比較小時,圖片從下往上、從左往右重復(fù)平鋪,鋪滿整個控件空間;
  • Filled:只顯示圖片的一部分,可以用于技能 CD,Set Native Size 設(shè)置控件寬高為圖片原始寬高。

重復(fù)平鋪:

繪制部分:

3)遮掩(Mask)

可以給 Image 控件添加 Mask 組件,以控制子控件的顯示區(qū)域,如:創(chuàng)建一個 Image 控件,改名為 MaskImage,將 Source Image 設(shè)置為一個圓形的圖片(已修改為 Sprite 類型),并為其添加 Mask 組件;在 MaskImage 下創(chuàng)建 Image 子控件,將 Source Image 設(shè)置為一個正方形的 Sprite 圖片??丶蛹?、Mask 組件、原圖如下:

顯示效果如下:

注意: MaskImage 中的圓形圖片,必須是 png 格式的,并且圓形外面無像素(不是白色或黑色)。

3 RawImage 控件

RayImage 對圖片類型沒有要求,但是沒有 Image Type 屬性,面板屬性如下:

4 應(yīng)用

本節(jié)將通過技能 CD 的案例,展示 Image 控件的應(yīng)用。

1)創(chuàng)建 UI

創(chuàng)建 3 個 Image 控件,分別重命名為 Circle、Skill、White,并給 Circle 添加 Mask 組件,再創(chuàng)建一個 Text 控件,這些控件的寬高都是 300,控件層級結(jié)構(gòu)如下:

Circle、Skill、White 對應(yīng)的圖片如下:

將 White 控件的 Image Type 設(shè)置為 Filled,F(xiàn)ill Origin 設(shè)置為 Top,取消 Clockwise 選項,如下:

2)腳本組件

SkillCD.cs

using UnityEngine;
using UnityEngine.UI;

public class SkillCD : MonoBehaviour {
    private Image skillWhiteImage;
    private Text skillWaitText;
    private bool hasReleaseSkill = false;
    private float skillInterval = 2; // 技能冷卻時間
    private float skillWaitTime = 0; // 釋放技能后等待時間

    private void Start () {
        skillWhiteImage = transform.Find("White").GetComponent<Image>();
        skillWaitText = transform.Find("Text").GetComponent<Text>();
        skillWhiteImage.fillAmount = 0;
    }

    private void Update () {
        skillWaitTime += Time.deltaTime;
        if (!hasReleaseSkill && Input.GetMouseButtonDown(0)) {
            releaseSkill();
        }
        waitSkill();
    }

    private void releaseSkill() { // 釋放技能
        skillWhiteImage.fillAmount = 1;
        skillWaitText.text = skillInterval.ToString("0.0");
        hasReleaseSkill = true;
        skillWaitTime = 0;
    }

    private void waitSkill() { // 等待技能點亮
        if (hasReleaseSkill) {
            float resTime = skillInterval - skillWaitTime;
            skillWhiteImage.fillAmount = resTime / skillInterval;
            skillWaitText.text = resTime.ToString("0.0");
            if (skillWaitTime > skillInterval) {
                hasReleaseSkill = false;
                skillWaitText.text = "";
            }
        }
    }
}

3)運行效果

聲明:本文轉(zhuǎn)自【Unity3D】UGUI之Image和RawImage

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容