chyam

[unity]- 2d 탑다운 [ 설정 창 ] 본문

unity

[unity]- 2d 탑다운 [ 설정 창 ]

chyam_eun 2024. 7. 5. 11:21

>설정 UI 버튼으로 만들기

실행하면 화면이 어두워지는데 이는 검은색 배경을 처음에 만든 다음에 전체화면으로 만들어서 투명도를 낮춰주었다. 전체화면은 shift+alt하고 맨오른쪽 맨밑에꺼 누르면된다. 

앞에서 배운대로 anchor설정을 건들여서 퀘스트 내용이 나오는 부분은 맨위에 해두었다.

종료는 약간 주의하라고 빨간색으로했다.

 

-계속하기 버튼

    public GameObject menuSet;

GameManager에 선언해준다. 

    private void Update()
    {
        if (Input.GetButtonDown("Cancel"))
        {
            if (menuSet.activeSelf)//켜져있는가
            {
                menuSet.SetActive(false);
            }
            else
                menuSet.SetActive(true);
        }
    }

단발적인것이므로 Update에 해준다. 

Cancel버튼은 esc이다. 

esc를 눌렀을때, 메뉴창이 켜져있다면 메뉴창을 안보이게하고, 안보이면 켜준다.

 

버튼에 아래를 추가해준다.

클릭했을때 SetActive를 비활성화할수도있다.

 

 

- 종료하기

간단하다.. 원래 지정된 함수?가 있다.

    public void GameExit()
    {
        Application.Quit(); //게임 바로 종료.
    }

버튼에 위 사진처럼 해준다. 누르면 저 함수가 시행된다.

 

- 저장하기

    public GameObject player;
    public TextMeshProUGUI questTalk;

플레이어의 위치를 저장해야하므로 player를 선언한다.

퀘스트이름을 저장하는것도 선언한다.

 

선언하고 꼭 player를 넣어줘야한다.. 이거 안넣었다가 계속 저장안돼서 뭔가했었다....

questTalk는 퀘스트 이름이 나오는 부분.

public void GameSave()
    {
        PlayerPrefs.SetFloat("PlayerX", player.transform.position.x);
        PlayerPrefs.SetFloat("PlayerY", player.transform.position.y);
        PlayerPrefs.SetInt("QuestId", questManager.questId);
        PlayerPrefs.SetInt("QuestActionIndex", questManager.questActionIndex);
        PlayerPrefs.Save(); //위 내용 다 저장된다.
        Debug.Log("Game saved!");
        menuSet.SetActive(false);

    }

플레이어의 위치를 저장하기 위해 x,y를 저장해준다. 

퀘스트id랑 몇번째 인덱스인지도 저장한다. 

PlayerPrefs는 간단한 데이터 저장 기능을 지원한다. 

Save를하면 위의 내용이 다 저장된다. 

그리고나서 메뉴창을 비활성화 시킨다.

    public void GameLoad()
    {
        if (!PlayerPrefs.HasKey("PlayerX"))
            return;
        float x = PlayerPrefs.GetFloat("PlayerX");
        float y = PlayerPrefs.GetFloat("PlayerY");
        int questId = PlayerPrefs.GetInt("QuestId");
        int questActionIndex = PlayerPrefs.GetInt("QuestActionIndex");

        player.transform.position=new Vector3(x, y, 0);
        questManager.questId = questId;
        questManager.questActionIndex = questActionIndex;
        questManager.ControlObject();
    }

플레이어X 키가 PlayerPrefs에 없으면( 저장된게없으면) 바로 리턴해준다. 

x,y,id,,여기에 저장했던 값을 불러온다. 

그리고 위치를 x,y,0으로 설정하고 각각에 부여한다. 

ControlObject함수는 동전 퀘스트 관련 정보이다. 

 

    private void Start()
    {
        GameLoad();
        questTalk.text=questManager.CheckQuest();
    }

Start함수에서 GameLoad를 실행시킨다. 

그리고 퀘스트 확인을할수있도록 questTalk의 텍스트부분에 퀘스트 이름을 저장한다.