Unity3D學習筆記(十九):UGUI、Image、Text、Button


UGUI:Unity官方最新,與NGUI同源
UI:User Interface(用戶的操作界面),圖片+文字
UGUI的組件:
1、創建UGUI組件時,會默認創建Canvas(畫布)和EventSystem(時間系統)
2、所有UGUI組件必須放在Canvas下才能顯示

Image組件(顯示圖片)
Source Image(源圖片):只支持Sprite精靈類型
Color(顏色):原有基礎上疊加
Materials(材質):做溶解的效果
Raycast Target:是否接受UGUI事件系統的射線檢測,
----圖片有按鈕有交互,需要勾選
----圖片沒有交互效果,或沒遮擋有交互效果的UI,不需要勾選,UI優化
Image Type:Simple(單一的) Tiled(平鋪) Filled(填充) Sliced(切片)
----Simple(單一的)
--------Preserve Aspect:圖片是否在顯示框內原比例顯示
----Tiled(平鋪)
--------注意1:平鋪模式的圖片Wrap Mode要使用Repeat模式
--------注意2:平鋪模式的圖片如果Border的情況,平鋪的是中間的切割出來的部分。
----Filld(填充)
--------Fill Method:填充模式:水平(血條),垂直,90,180,360(技能CD)
--------Fill Origin:填充起點
--------Fill Amount:填充的值,0沒有,1全部顯示
--------Clockwise:順逆時針
--------Preserve Aspect:圖片是否在顯示框內原比例顯示
--------Set Native Size:圖片顯示原尺寸
Image只支持Sprite精靈類型的圖片

Preserve Aspect:圖片是否在顯示框內原比例顯示
勾選:原比例顯示在顯示框內

不勾選:拉伸至整個顯示框

圖片模式:平鋪報錯,要把精靈圖片改成重復
循環模式:重復,限值,鏡像,單次鏡像

Sliced(切片):優化圖片的尺寸

Fill Center:是否填充中心部分

代碼操作
注意:要對UGUI的組件進行腳本操作,需要引用命名空間
1、using UnityEngine.UI
2、public UnityEngine.UI.Image image(引用其他命名空間下的類,也可以用這種方式)
Image的API:
替換圖片:
image.sprite = sprite;//替換圖片,原圖片改變擦除
image.overrideSprite = sprite;//在原圖片不變的基礎上,相當於覆蓋一層圖片
當sprite = null時,如果overrideSprite有圖,顯示override的圖片,如果沒有顯示白圖。
當overrideSprite = null時,顯示sprite的圖片
顏色:image.color = Color.red
射線:image.raycastTarget
填充值:image.fillAmount = count;//可以模擬進度條
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UGUI_Image : MonoBehaviour {
    //public UnityEngine.UI.Image image;//另一種引用形式
    private Image image;
    private Sprite sp;
    private Sprite sp1;
    private float count = 0;
    private void Awake()
    {
        image = GetComponent<Image>();
        //這種形式加載不到Sprite類型的圖片
        //錯誤加載方法:sp = Resources.Load("Texture/名字") as Sprite;
        //需要使用泛型的方法去加載Sprite的圖片
        sp = Resources.Load<Sprite>("Texture/名字");
        //Sprite多圖模式的加載,加載Spirite方式:數據結構(字典)來做管理(略)
        //加載多圖形式下的所有的sprite,返回的是一個數組。
        Sprite[] sp_arr =  Resources.LoadAll<Sprite>("Texture/data.dat 00003");//按名字索引圖片
        string strName = "data.dat 00003_17";
       
        foreach (var item in sp_arr)
        {
            //Debug.Log(item.name);
            if (item.name == strName)
            {
                sp = item;
            }   
        }       
        //sp = sp_arr[18];
    }
    // Use this for initialization
    void Start () {
        //在原有圖片上覆蓋一張圖片
        //image.overrideSprite = sp;
        //改變源圖片
        //image.sprite = sp;
        //image.overrideSprite = sp1;
        image.color = Color.red;
        //在填充模式下改變填充值
        //image.fillAmount = 0.5f;//fillMethod,枚舉類型;fillOrigin,int類型,也代表枚舉
    }
       
       // Update is called once per frame
       void Update () {
        if (Input.GetKeyDown(KeyCode.P))
        {
            image.sprite = sp;
            //image.overrideSprite = null;
        }
        //count += Time.deltaTime;
        //image.fillAmount = count;
    }
}
 
多圖模式下,也可以使用切片

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ClickChangeImage : MonoBehaviour {
    public Image image;
    public Text text;
    public string str;//替換的文字內容
    public string spriteName;
    private Sprite sp;
    private Button button;
       // Use this for initialization
       void Awake () {
        button = GetComponent<Button>();
        button.onClick.AddListener(ClickButton);
    }
    void ClickButton()
    {
        text.text = str;
        if (sp == null)
        {
            sp = Resources.Load<Sprite>("Tex/" + spriteName);
        }
        image.sprite = sp;
    }
}

 

Raw image(圖片)
Texture:任意的圖片類型都可以
UV Rect:
----x,y:代表圖片在顯示框內的偏移,x為正:圖片向左偏,y為正,圖片向下偏
----w,h:圖片在顯示框內的顯示比例,W為1:圖片橫向正常顯示,為0.5時:整個顯示框只能顯示圖片的橫向的一半,為2時:顯示框能顯示圖片橫向的2個。H縱向同理
x,y作用:飛機大戰-背景移動
Wrap Mode - repeat循環,否則只能拿圖片最邊緣的像素來填充空余部分
Wrap Mode - mirror鏡像循環偏移
wh作用:拼圖游戲-美術切圖

 

代碼操作
Texture類型的圖片可以這么加載
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UGUI_RawImage : MonoBehaviour {
    public RawImage image;
    private Texture tex;
       // Use this for initialization
       void Start () {
        //對於Texture類型的圖片使用以下兩種方式都是可以加載成功的
        //tex = Resources.Load("Texture/XM2") as Texture;
        tex = Resources.Load<Texture>("Texture/XM2");
        //改變RawImage的圖片
        image.texture = tex;
        //設置圖片在顯示框的偏移和大小比例
        //image.uvRect = new Rect(x,y,w,h);
    }
       
       // Update is called once per frame
       void Update () {
              
       }
}

 

 
Text組件(顯示文字)
Text:文本的內容
Character特征:
----Font(字體):
----Font Style(字體樣式):加粗,傾斜,加粗且傾斜,正常
----Font Size(字體大小):注意字體大小要適應你的文本框,否則可能出現不顯示情況
----Line Spacing行間距:0兩行重合,1空一點,2空一行
----Rich Text富文本:是否支持富文本
段落:
----Aligment(對齊方式):
----Align By Geometry(視覺幾何對齊):段落中心對齊的修正,有視覺上的差異
----Horizontal Overflow(水平溢出方式):溢出,換行,文本框空間不夠,不會換行會溢出
----Vertical Overflow(垂直溢出方式):截斷,溢出
----Best Fit(字體大小自適應):文本框空間不夠,字體自動變小,最小尺寸和最大尺寸。在文本框內,文本內容全部顯示如果能用最大值,字體的大小就是最大值的大小。字體大小不能超過最小值。
富文本:能改變局部指定的文本的樣式(大小,顏色,字體樣式)
----顏色:<color=red>文本內容</color> 或 <color=#ffffff>文本內容</color>
----大小:<size=40>文本內容</size>
----加粗:<b>文本內容</b>
----傾斜:<i>文本內容</i>、
----寫法是支持嵌套模式的。

RGB面板取值范圍0~255
RGB代碼取值范圍0~1
十六進制色值

代碼操作

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UGUI_Text : MonoBehaviour {
    public Text text;
       // Use this for initialization
       void Start () {
        text.text = "小明老師又吃<b><color=red>腰子</color></b>!";
        //代碼里的RGB的取值范圍是0-1, 色板上的是 0 - 255
        text.color = new Color(230 / 255f, 0, 255 / 255f);//230 0 255
        text.fontSize = 30;
       }
       
       // Update is called once per frame
       void Update () {
              
       }
}

Button組件(按鈕):復合組件:包含文本子物體,圖片組件,按鈕組件
Interactable(交互):是否可以交互
Transition(過渡方式):無,顏色,圖片,動畫
顏色過渡:
----Target Graphic(目標顏色):image繼承Graphic類,指定過度的圖形,不一定是button本身,指定誰過渡誰
----Normal Color(正常顏色):正常情況下的顏色
----Highlighted Color(懸停顏色):進入按鈕或者選中狀態下的顏色
----Pressed Color(點擊顏色):按下時的顏色
----Disabled Color(失活顏色):交互失活狀態的顏色
----Color Multiplier(顏色系數):圖像最終呈現的顏色 = 顏色系數 * 面板的選擇的顏色,RGB.R * 系數(值小於等於255)
----Fade Duration(漸變時間):
圖片過渡:
----Target Graphic:指定過度的圖像
----Highlighted Sprite :進入按鈕或者選中狀態下的顯示的圖片
同顏色一樣。
動畫過渡:依賴於動畫狀態機
----每個Normal等狀態的Trigger都對應了動畫狀態機里的觸發條件
----每個狀態播放不同的動畫。
Navigation(按鈕導航):假如有兩個按鈕,同時開啟了導航,那么當鼠標選中一個按鈕時,可以通過方向鍵來改變選中的按鈕。

代碼操作
引用按鈕組件
1、外部拖拽:必須公共
2、代碼注冊:作用域無限制
ClickButton方法:
1、必須是公共方法,
2、只能有一個參數(固定參數),string,bool,gameObject
3、方法可以重載
OnClick:當點擊按鈕的執行的方法組
1、拖拽的方式:方法必須的是公共的,方法可以有參數(參數個數只有一個)
2、代碼注冊事件的形式:方法必須符合AddListener里參數委托,必須是無返回值無參的!

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UGUI_Button : MonoBehaviour {
    public Button button;
    //1.先聲明一個委托類型, 無返回值,無參數的
    public delegate void Del();
    //2.聲明一個委托變量
    public Del del;
       // Use this for initialization
       void Start () {
        //3.添加方法進委托, 只有無返回值無參數的方法才能添加到del的委托變量里
        del += TestDel;
        //4.委托的調用跟方法一樣的,調用之前一定要做判null處理
        if (null != del)
        {
            del();
        }
        //把一個方法作為參數傳遞到了另一個方法的內部
        Test(TestDel);
        //使用代碼添加按鈕執行事件
        button.onClick.AddListener(AddClickButton);
        //刪除事件
        //button.onClick.RemoveListener(AddClickButton);
        //使用Invoke方法去執行了一次OnClick里存儲的所有的方法
        button.onClick.Invoke();
    }
    // Update is called once per frame
    void Update () {
              
       }
    //委托類型作為參數
    void Test(Del de)
    {
        if (de != null)
        {
            de();
        }
    }
    void TestDel()
    {
        Debug.Log("TestDel");
    }
    public void ClickButton(GameObject str1)
    {
        Debug.Log("你點擊了按鈕!" + str1);
    }
    public void ClickButton(string str)
    {
        Debug.Log("你點擊了按鈕!" + str);
    }
    public void ClickButton()
    {
        Debug.Log("你點擊了按鈕!");
    }
    void AddClickButton()
    {
        Debug.Log("腳本添加的方法");
    }
}

 

Unity 按鈕(Button)的禁用和禁用與變灰

//禁用
this.GetComponent<Button>().enabled= false;
//禁用與變灰
this.GetComponent<Button>().interactable = false;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM