# Day 28 | Unity遊戲開發 - 介面設置及場景轉換
###### tags: `Unity` `AR手遊`
在上一篇文章提到對話系統的管理,今天我們要來說明主畫面設定及場景資料轉換。
需要注意的是,介面的素材圖需要將背景及按鈕分別輸出喔!
> **目錄**
> 素材圖
> 介面設置
> 場景轉換
## 素材圖
| 開始畫面-背景 | 關卡介面-背景|
| --------| --------|
| ||
| **開始畫面-按鈕** | **關卡介面-按鈕**|
| | |
## 介面設置
### 開始畫面
在Scene中使用Canvas加入主畫面介面,並將開始按鈕放上正確位置

### 關卡介面
另外開一個新場景,並將關卡介面圖放入Scene中

將所有關卡按鈕放置正確的位置,按鈕名稱依照關卡順序取名

## 場景轉換
### 場景切換
將所有需要切換的場景在File>Build Settings>Scenes In Build中加入
新增SceneManager()來管理所有場景,在SceneTrans()中使用string傳關卡名稱
```
public void SceneSwitch(string _SceneName)
{
SceneManager.LoadScene(_SceneName);
}
```
在Scene按鈕中,加上場景切換功能

### 關卡切換
我們的關卡希望可以完成一關,才可以解鎖下一關,因此需要設立一個變數來判斷關卡是否解鎖。
在LevelSelection()中加入bool,來判斷關卡目前狀態
```
private bool unlocked; //預設為fasle
```
在PressSelection()中:
* 判斷bool值,來決定是否切換場景
* 因為有多個關卡需要切換,因此使用string傳關卡名稱
```
public void PressSelection(string _LevelName)
{
if (unlocked)
{
SceneManager.LoadScene(_LevelName);
}
}
```
在Scene中,為每個按鈕都加上場景切換功能

在每個遊戲關卡中加入SingleLevel()中,使用PlayerPrefs儲存關卡數值
```
public levelIndex;
public Score;
public void PressedFinished()
{
PlayerPrefs.SetInt("Lv" + levelIndex, Score);
}
```
在LevelSelectioon()中讀取PlayerPrefs數值,更新關卡狀態
```
private void UpdateLevelStatus()
{
int previousLevelNum = int.Parse(gameObject.name) -1;
if(PlayerPrefs.GetInt("Lv" + PreviousLevelNum) > 0) //上一個關卡分數是否大於0
{
unlocked = true;
}
}
```
並在Update()中加入
```
UpdateLevelStatus()
```
---
如此一來便完成介面及場景切換功能嘍!下一篇將會為各位介紹我們所用到的專案管理工具,明天見!