728x90
반응형
게임을 진행하다가도 메뉴를 열 수 있어야하기 때문에 canvas에 메뉴를 만들기로 했다.
1. UI
일단 위와 같은 식으로 이중 panel의 형태로 메뉴창을 만들었다.
Canvas
ㄴ 반투명 panel
ㄴ 검은색 panel
ㄴ Button_1
Button_2
Button_3 과 같은 구조를 가진다.
이런 식으로 option창이나 원하는 메뉴창들을 만들어줬다.
2. class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class MainMenuManager : MonoBehaviour
{
public GameObject menu;
public GameObject main;
public GameObject option;
void Start()
{
DontDestroyOnLoad(gameObject);
}
public void openMainPage() //처음 화면으로 나오는 함수이다.
{
main.SetActive(false);
option.SetActive(false);
if ("StartScene" != SceneManager.GetActiveScene().name) //게임 화면을 보고 있을 때는 처음 화면으로 이동하기 위해서 DontDestroyOnLoad인 오브젝트들을 삭제해준다.
{
Destroy(gameObject);
Destroy(GameObject.FindWithTag("Player"));
Destroy(GameObject.FindWithTag("MainCamera"));
LoadingSceneManager.LoadScene("StartScene");
}
}
public void openMain()
{
main.SetActive(true);
option.SetActive(false);
}
public void openOption()
{
main.SetActive(false);
option.SetActive(true);
}
public void closeAll()
{
main.SetActive(false);
option.SetActive(false);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape)) // esc를 이용해서 메뉴창을 열 수 있게 해준다.
{
openMain();
}
}
}
|
cs |
15 - 여러 게임 화면들을 지나면서 계속 존재해야하기 때문에 다른 scene을 load할 때 파괴되지 않도록 했다.
20~21 - 이런 식으로 SetActive()를 이용해서 상황에 알맞은 함수들을 만든다. (parameter로 true를 전달하면 눈에도 보이고 상호작용도 할 수 있지만 false를 전달하면 보이지도 않고 상호작용도 할 수 없다.)
52~55 - esc버튼을 눌렀을 때 메뉴창을 열 수 있도록 했다.
이 class는 만든 메뉴 창들을 담고 있는 canvas에 연결해준다.
3. 버튼, 함수 연결
위 사진과 같이 버튼을 클릭해서 Inspector을 열고 onClick()에 +를 누른고 나서
아까 위에서 만든 class를 넣어준 (이 사진에서는 'menu' type은 Canvas) Canvas를 넣어준다.
그리고 오른쪽에 dropDown에서 c#Script/함수를 적절히 선택해서 연결해줄 수 있다.
4. 결과
그렇게 위 동영상 같이 자연스러운 메뉴창을 만들 수 있다.
728x90
반응형
'Unity > 2D RPG' 카테고리의 다른 글
보스 공격 패턴 by Unity (0) | 2021.08.28 |
---|---|
키 배치 설정 by Unity (0) | 2021.08.18 |
캐릭터 나눠지고 합쳐지게 by Unity (0) | 2021.08.05 |
friction, Collider2D in Unity (0) | 2021.08.02 |
캐릭터(원거리 공격) byUnity (0) | 2021.07.24 |