[Bounce Game] ๐ฅ ๋ฏธ๋๊ฒ์ ๋ง๋ค๊ธฐ 4
1. UI ๊ตฌํํ๊ธฐ
Hierarchy์์ create -> UI -> Canvas๋ฅผ ๋ง๋ ๋ค.
UI์ Button์ ์์ฑํด์ค๋ค Option Button์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
Panel์ ์์ฑํด์ค๋ค Option์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , Option์๋์ Button์ 4๊ฐ ๋ง๋ ํ ์ด๋ฆ์ ๊ฐ๊ฐ Play, Sound_On, Sound_Off, Menu๋ก ๋ฐ๊ฟ์ค๋ค. ์ด๋ Sound ๋ฒํผ ๋๊ฐ๋ ์๋ก ๊ฒน์ณ ๋๋๋ค.
์ดํ ๋ฒํผ๋ณ ์์ ์ด ์ํ๋ Asset์ ๋ฃ์ด์ค๋ค, Panel์๋ ์ ๋นํ ์์์ ๋ฃ์ด์ฃผ๊ณ , ํฌ๊ธฐ ์กฐ์ ์ ํ๋ค.
๊ทธ๋ฌ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋์๋ค.

์ดํ Canvas์ ์์์ผ๋ก UI_Manager๋ผ๋ ์ด๋ฆ์ผ๋ก Empty ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ ํ UI_Manager๋ผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ ๋ฃ์ด์ค๋ค.
์คํฌ๋ฆฝํธ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋ค.
public GameObject option_Button;
public GameObject option;
public GameObject sound_On;
public GameObject sound_Off;
public void Pause()
{
option_Button.SetActive(false);
option.SetActive(true);
}
public void Begin()
{
option_Button.SetActive(true);
option.SetActive(false);
}
public void Sound_On()
{
sound_On.SetActive(false);
sound_Off.SetActive(true);
}
public void Sound_Off()
{
sound_On.SetActive(true);
sound_Off.SetActive(false);
}
public void MainMenu()
{
}
๊ฐ๊ฐ์ ๋ฒํผ์ ๋ค์๊ณผ ๊ฐ์ด ํจ์๋ฅผ ๋ฐฐ์ ํด์ฃผ๋ฉด ๋๋ค.

์ดํ Sound_Off ์ค๋ธ์ ํธ์ inspector์ ์๋ ์ด๋ฆ ์์ ๋ฒํผ์ ๋๋ฌ์ ๋นํ์ฑํ ์ํจ ํ์, Option๋นํ์ฑํ๋ฅผ ์ํค๊ณ ๊ฒ์์ ์๋์ํฌ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋๋ค.

2. MainMenu Scene ๋ง๋ค๊ธฐ
๋ค์์ผ๋ก ์ด์ ๊น์ง ๋ง๋ค์๋ Scene์ ๋ณต์ฌํ์ฌ MainMenu๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ์ดํ ์์ ์๋ GameManager๋ฅผ ์ ์ธํ๊ณ ๋ค ์ง์์ค๋ค.
์ดํ ์๋ก์ด Canvas๋ฅผ ๋ง๋ ํ MainMenu๋ผ๋ ์ด๋ฆ์ผ๋ก Panel์ ๋ง๋ ๋ค. MainMenu์ด๋ฆ์ Panel์ ์์์ผ๋ก Text์ Button์ ๋ฃ์ด์ ๊พธ๋ฉฐ์ค๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์๋ค.

๋ค์์ผ๋ก Stage_List๋ผ๋ ์ด๋ฆ์ผ๋ก Panel์ ๋ง๋ ํ ๊ทธ ์์์ผ๋ก Text์ Button`์ ๋ฃ์ด์ ๊พธ๋ฉฐ์ค๋ค. ์ดํ ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.

3. MainMenu ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
์ง๊ธ๊น์ง MainMenu์ ์ฌ๋ฌ ์ค๋ธ์ ํธ๋ค์ ๋ง๋ค์ด ์ฃผ์๋ค. ์ด์ ๊ทธ ์ค๋ธ์ ํธ์ ๋ฒํผ๋ค์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํ์ฌ MainMenu_UI_Manager์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ ํ ๋ค์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋ค.
public class Bounce_MainMenu_UI_Manager : MonoBehaviour
{
private GameObject Game_Manager;
public GameObject MainMenu;
public GameObject Stage_list;
public GameObject Lock;
// Start is called before the first frame update
void Start()
{
Game_Manager = GameObject.FindGameObjectWithTag("GameManager");
if (Game_Manager.GetComponent<Bounce_GameManager>().Is_Go_Stage_List == true)
{
Go_Stage_List();
}
Is_Lock();
}
// Update is called once per fram
// ========================== Main Menu =========================
public void Go_Stage_List()
{
MainMenu.SetActive(false);
Stage_list.SetActive(true);
Game_Manager.GetComponent<Bounce_GameManager>().Is_Go_Stage_List = true;
}
public void Show_Rank()
{
}
public void End()
{
Application.Quit();
}
private void OnApplicationQuit()
{
Debug.Log("์ข
๋ฃ");
}
// ========================== Stage List =========================
public void Go_MainMenu()
{
MainMenu.SetActive(true);
Stage_list.SetActive(false);
Game_Manager.GetComponent<Bounce_GameManager>().Is_Go_Stage_List = false;
}
public void Go_Stage(int Stage)
{
Game_Manager.GetComponent<Bounce_GameManager>().Current_Stage = Stage;
SceneManager.LoadScene("Level " + Stage);
}
public void Is_Lock()
{
for (int i = 0; i <= Game_Manager.GetComponent<Bounce_GameManager>().Clear_Stage; i++)
{
Lock.transform.GetChild(i).gameObject.SetActive(false);
}
}
}
๊ฐ๊ฐ์ ๋ฒํผ์ ์๋ On Click() Event ํจ์๋ค์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋ค๋ฅธ Scene์ผ๋ก ์ด๋ํ๊ธฐ ์ํ์ฌ ๊ฐ๊ฐ์ Scene๋ค์ Buildํด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํด ์ง๊ธ๊น์ง ๋ง๋ค์ด๋ testํ์ผ์ ๋ณต์ฌํ์ฌ Level 1์ด๋ผ๋ Scene์ ๋ง๋ค์ด์ค๋ค. ์ดํ Level 1์ ์์ ์ด ์ํ๋ ๋๋ก ๊พธ๋ฏผ๋ค. ๋ค ๊พธ๋ฉด์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด Build Setting์ ํด์ฃผ๋ฉด ๋๋ค.

๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐