UI 講師:水母
場景
在開啟一個新專案時,Unity Editor會自動生成一個「Sample Scene」
可以直接在裡面做開發
但當我們要做一些完全不同的畫面or切換關卡時
新增一個不同的Scene是個好選擇
在scenes資料夾裡面點右鍵選「Create」選「Scene」
就能建立一個新的場景
當有多個Scene,在遊戲中需要進行切換時可以使用SceneManager.LoadScene來進行scene的更換
要使用SceneManager的話,最上方要先引入UnityEngine.SceneManagement名稱空間
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
private void LoadnextScene()
{
SceneManager.LoadScene("Level1");
}
}
第一種方法是用名稱讀取
但如果改了場景名稱這裡也需要修改
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
private void LoadnextScene()
{
SceneManager.LoadScene(1);
}
}
剛剛加入Build settings的時候可能會注意到旁邊有一排從0開始的數字
那個就是場景的index
我們也可以用這個index來讀取到場景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
private void LoadnextScene()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1);
}
}
當需要切換的場景是依序的時候(ex:3 4 5)
可以用另一種方式依序往下讀取
每次都讀取當前index+1的場景
畫布
Canvas是所有UI物件的基礎
所有UI物件都要被放在Canvas裡,作為他的子物件才能運行
建立:在Hierarchy裡按右鍵 --> UI --> Canvas
創建的同時Editor會自動建立一個EventSystem
那跟後面的互動部分有關
點到Canvas可以發現他比我們原本的編輯區大很多
首先要先改Canvas大小的設定
看到右邊Inspector裡的Canvas Scaler組件
裡面有一個UI Scale Mode
以像素為單位訂定的固定大小
除非調整Canvas組件設定否則無法變動
符合螢幕大小,可指定螢幕的大小數值
(通常用這個)
沒用過,但不建議固定
改成Scale with Screen Size
把Reference Resolution改成1920*1080(Full HD)
Game Panel的顯示比例也要改16:9,才不會跑掉
圖片
對Canvas按右鍵選UI -> Image新增一個Image物件
Image組件有點類似一般的Sprite Renderer,可以理解為UI裡的Sprite Renderer
上面的Rect Transform也可以理解成一般Transform的進階版
點一下錨點圖可以用GUI改
位置
長寬
錨點(不用改,可以影響座標基準點)
中心點(預設在中心
旋轉
大小
圖片,可以理解成一般的Sprite Renderer放圖像資源的地方
沒有圖片時的純色填充
材質
可否被Mask蓋住
文字
這是Unity新版的文字
舊版的可以改的東西比較少,同時也可能比較快被移除或成為過時組件
所以本節課以新版為例
在Canvas上點右鍵 --> UI --> Text - TextMeshPro
會彈出這個視窗
把兩個都import
我們看到右邊Inspector下方的TextMeshPro - Text (UI)組件
文字,預設New Text
各種預設好的文字樣式,可以自己試試
字型,等等教你們怎麼新增
文字樣式,由左到右:粗體、斜體、下劃線、刪除線、小寫、大寫
材質
是否根據目前文字框長寬調整文字大小至完全符合換行
文字大小
接續上一頁
可以調整字元之間、單字之間、行之間跟段落之間的間隔大小
對齊選項
當超出大小後的顯示模式,預設顯示,也可以調遮住等等
啟用/停用自動換行
文字顏色
首先下載你想使用的字體
並且把字體檔(.ttf)放進Assets/TextMesh Pro/Fonts裡面
接著對字體檔點右鍵,選Create --> TextMeshPro --> Font Asset
再來就可以點到剛剛的TextMeshPro物件
把Font Asset拖進TextMeshPro - Text(UI)組件裡的Font Asset欄位
字體就定義好了 耶
按鈕
在Canvas上點右鍵之後 UI --> Button - TextMeshPro
創建一個帶有TextMeshPro文字物件的按鈕
物件旁邊有個箭頭可以下拉
有TextMeshPro物件可以調整按鈕上的文字
右邊的Image組件
上面的Source Image可以改變按鈕的背景圖
按鈕互動時會變換顏色的圖(預設是按鈕背景)
按鈕互動時會變換顏色的圖(預設是按鈕背景)
一般狀況下的顏色
滑鼠移動到上面的顏色
按下瞬間的顏色
按下後還沒點擊其他地方的顏色
禁用(不可點擊)時的顏色
漸變時常
我們可以把前面學的場景切換結合button
先創一個腳本叫SceneLoader
把旁邊的程式貼上去
把腳本拖到canvas上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
public void LoadnextScene()
{
SceneManager.LoadScene(1);
//index改自己要切換的
}
}
接下來進到Button組件裡面
找到On Click()列表
按「+」加入一個事件
附帶有按鈕按下後要執行的函式的遊戲物件
所以我們要把剛剛放有腳本的canvas拖進去
這裡是按下按鈕要執行的事
總之就是
如果是要修改值的,填入的都是修改後的值(要把A改成B則欄位中填B)
沒有要修改值的就是直接選擇函式就可以執行了
有幾種常用的類別
ex:讓Canvas按下後消失:Canvas --> bool enabled
讓GameObject被停用:GameObject --> SetActive (bool)
改一個GameObject的名稱:GameObject --> string name
直接選SceneLoader(或你自己的腳本名稱) --> LoadnextScene()(或你自己的函式名稱)
來執行