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;