-
(14) Start Scene #UI 구현 & 씬 변환Galaxy Ball/1. 멀티플레이 - 대전모드 2024. 3. 31. 03:12
이제 전 글에서 만든 버튼 UI가 제 역할을 하도록 구현해보도록 하겠다
버튼은 총 5개. 각각 어떻게 구현할지 정리부터 하고 가자
<메인화면>
Single Player - Coming Soon
Multi Player - 인게임 씬변환
Online Play - Coming Soon
Setting - 설정창 씬변환
Quit - 게임 종료
인게임씬은 이미 구현해놨으니 상관없고 설정창에 대해서 세부적으로 정해보자
<설정창>
- BGM
- Sound Effect
- Credit
사실 설정이래야봤자 사운드 설정밖에 없긴하다.
그리고 크레딧을 아예 메인 화면에 버튼으로 올릴까도 고민을 했는데 이미 버튼갯수는 5개로 충분한데다
굳이 게임할때 관심도 가지지 않는 크레딧창을 메인에 올리는게 맞나라는 생각도 들어 설정창안에 넣어버리기로 했다
우선 버튼을 관리할 스크립트를 하나 새로 만들어주자. 보통 이런것들은 GameManager가 관리하는게 국룰이긴 하지만
BGM 재생에, 구체 생성, firezone 등등...
이미 맡고 있는 역할이 너무 많기에 버튼만 담당하는 스크립트를 하나 더 만들어주기로 했다
빈 오브젝트 ButtonManager를 만든뒤 새 스크립트 ButtonManager를 넣어주자
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ButtonManager : MonoBehaviour { public Button SinglePlayer; public Button MultiPlayer; public Button OnlinePlay; public Button Setting; public Button Quit;
전역변수로 각각의 버튼을 입력받게 한뒤 Inspector창에서 알맞는 버튼들을 넣어주자
Single Player - Coming Soon
Multi Player - 인게임 씬변환
Online Play - Coming Soon
Setting - 설정창 씬변환
Quit - 게임 종료
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<Single Player - Coming Soon>
<Online Play - Coming Soon>
가장 먼저 Single Player와 Online Player부터 해결해보자.
사실상 이 둘은 Coming Soon만 띄우면 되니 가장 간단한 케이스이다
하지만 이 Coming Soon을 띄우는 방식 역시 조금이라도 참신하게 해보고 싶었다
원래는 버튼을 누르면 주변에서 자동으로 발사되는 구체의 텍스트에 랜덤한 숫자가 아닌
"Coming Soon!" 텍스트를 들어가게 하는건 어떨까 생각도 해보았지만 이건 진짜 하다가 내 머리가 먼저 터질것 같다
그냥 평범하게 버튼을 누르면 그 위치에 기존 텍스트가 사라지고 "Coming Soon!"이 활성화 되는걸로 하겠다
더 자세하게는 3초동안 텍스트가 변경된뒤 다시 원래 텍스트로 돌아가는걸로 하겠다
그리고 아직 3초가 지나지 않았는데 한번더 버튼이 눌린다면 3초 카운트가 초기화 되는걸로 하겠다
using System.Collections; using UnityEngine; using UnityEngine.UI; using TMPro; public class ButtonManager : MonoBehaviour { public Button SinglePlayer; public Button MultiPlayer; public Button OnlinePlay; public Button Setting; public Button Quit; private TextMeshProUGUI singlePlayerText; private TextMeshProUGUI onlinePlayText; private Coroutine resetSinglePlayerCoroutine; private Coroutine resetOnlinePlayCoroutine; void Start() { singlePlayerText = SinglePlayer.GetComponentInChildren<TextMeshProUGUI>(); onlinePlayText = OnlinePlay.GetComponentInChildren<TextMeshProUGUI>(); // SinglePlayer 버튼에 클릭 이벤트 리스너 추가 SinglePlayer.onClick.AddListener(OnSinglePlayerClicked); OnlinePlay.onClick.AddListener(OnOnlinePlayClicked); } void OnSinglePlayerClicked() { if (resetSinglePlayerCoroutine != null) StopCoroutine(resetSinglePlayerCoroutine); singlePlayerText.text = "Coming Soon!"; resetSinglePlayerCoroutine = StartCoroutine(ResetTextAfterDelay(singlePlayerText, "Single Player", 3f)); } void OnOnlinePlayClicked() { if (resetOnlinePlayCoroutine != null) StopCoroutine(resetOnlinePlayCoroutine); onlinePlayText.text = "Coming Soon!"; resetOnlinePlayCoroutine = StartCoroutine(ResetTextAfterDelay(onlinePlayText, "Online Play", 3f)); } IEnumerator ResetTextAfterDelay(TextMeshProUGUI text, string originalText, float delay) { yield return new WaitForSeconds(delay); text.text = originalText; } }
기본적으로 클릭이벤트를 추가하고, 버튼 클릭시 3초동안 텍스트를 변경해주는 코드이다
한가지 다른게 있다면 코루틴을 추가해 버튼을 누를때마다 딜레이 카운트를 초기화한다는것이다
버튼 클릭시 텍스트가 변경되고 3초뒤에 돌아오는것도, 중간에 다시 클릭시 3초 카운트가 초기화되는것도 볼 수 있다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<Quit - 게임 종료>
이번엔 Quit 버튼을 누르면 게임이 종료되게 만들어보겠다
Quit.onClick.AddListener(OnQuitClicked);
.....
void OnQuitClicked()
{
Application.Quit();
Debug.Log("게임 종료!");
}이건 별거 없다. 이게 실제 모바일에서 구동하는 게임이 아니니 유니티 내에서는 작동하질 않아 확인할 순 없어
우선 디버그라도 붙여뒀다.
여담으로 게임종료대신 유니티 게임실행 종료라도 해보려고 찾아봤는데 그건 스크립트로 제어가 불가능하다고 한다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<Multi Player - 인게임 씬변환>
<Setting - 설정창 씬변환>
이것 역시 간단하다. 미리 만들어둔 씬으로 전환만 하면 되기 때문
MultiPlayer.onClick.AddListener(OnMultiPlayerClicked);
Setting.onClick.AddListener(OnSettingClicked);
......................
void OnMultiPlayerClicked()
{
SceneManager.LoadScene("Main Scene");
}void OnSettingClicked()
{
SceneManager.LoadScene("Setting Scene");
}이제 한번 결과를 확인해보자
드디어 열심히 만든 시작화면과 인게임화면이 연결되는 감격적인 순간이다ㅠㅠ
다음글에서는 아직 만들지 못한 설정씬을 만들어보도록 하겠다
'Galaxy Ball > 1. 멀티플레이 - 대전모드' 카테고리의 다른 글
(16) 아이템 디자인 (1) 2024.04.03 (15) Setting Scene # 자잘한 보완 & Credit Scene (0) 2024.04.02 (13) Start Scene #UI & 배경 화면 보완 (1) 2024.03.29 (12) Start Scene #배경화면 (2) 2024.03.29 (11.5) 버그 개선 #3 (0) 2024.03.29