Unity/2D RPG

Canvas에서 메뉴 by Unity

YunSeong 2021. 8. 18. 13:20
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