오목 게임의 시작화면을 기획하고, 코드를 간략하게 짜보았다.

기획: 진안
- 앱을 실행하면 최상단에 게임 이름
- 매칭하기 버튼을 누르면 매칭중… 버튼으로 바뀌며 상대를 찾는다. 상대를 찾으면 인게임 scene으로 넘어간다.
- 매칭중… 버튼을 한번더 누르면 매칭하기 버튼으로 바뀌며 매칭이 취소된다.
- 스킬관리 버튼을 누르면 스킬관리 Scene으로 넘어간다.
- 종료버튼을 누르면 앱이 종료된다.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
public class MainSceneManager : MonoBehaviour
{
[SerializeField] private Text gameTitleText;
//SerializeField는 private 필드여도 인스펙터 창에서 설정가능하게만든다. 각 필드를 선언
[SerializeField] private Button matchButton;
[SerializeField] private Button skillButton;
[SerializeField] private Button exitButton;
private bool isMatching = false;
// 매칭상태를 끄고키는 스위치처럼 쓸 변수 선언 후 꺼진상태로 할당.
private Coroutine matchingCoroutine;
// 코루틴 타입의 matchingCouroutine 이라는 변수를 선언하여,
// 해당 변수가 코루틴으로 진행할 함수를 시작, 멈출 수 있게 만든다.
void Start()
{
gameTitleText.text = "Super 스킬 오목"; // 게임 제목
matchButton.onClick.AddListener(OnMatchButtonClicked);
// 해당 버튼 누를시 OnMatchButtonClicked라는 함수 호출
// AddListener의 경우 UI 의 상호작용 이벤트들에(onClick 같은) 접근하여
// 소괄호 안의 매개변수를 호출한다. 여기서는 함수 호출
skillButton.onClick.AddListener(OnSkillButtonClicked);
exitButton.onClick.AddListener(OnExitButtonClicked);
}
private void OnMatchButtonClicked() // 매칭버튼 메서드
{
if (!isMatching) // 매칭스위치가 꺼져있다면,
{
// 매칭 시작: 버튼 텍스트 변경 및 코루틴 시작
isMatching = true; // 매칭스위치 상태전환
matchButton.GetComponentInChildren<Text>().text = "매칭중…";
//matchButton이라는 버튼객체의 자식 객체의 컴포넌트 Text 항목을 찾아서 .text로 접근
//"매칭하기" -> "매칭중..." 으로 수정해버림
matchingCoroutine = StartCoroutine(WaitAndLoadInGame());
//코루틴 변수 matchingCoroutine은 WaitAndLoadInGame이라는 메서드를 실행한다.
}
else // 매칭스위치가 켜져있다면
{
// 매칭 취소: 상태 초기화 및 버튼 텍스트 원복
isMatching = false; // 매칭스위치 상태전환
matchButton.GetComponentInChildren<Text>().text = "매칭하기";
if (matchingCoroutine != null)
// 매칭코루틴이라는 코루틴변수가 할당이 되어있다면, 즉 매칭중이라면
{
StopCoroutine(matchingCoroutine); // 매칭코루틴 정지한다.
matchingCoroutine = null; // 비어있는 기본값을 할당한다.
}
}
}
private IEnumerator WaitAndLoadInGame() // IEnumerator 타입의 코루틴 함수
{
// 매칭 진행을 보여주기 위해 3초 대기 (예시) 실제로는 서버의 매칭 로직에 따라서 제작할것.
yield return new WaitForSeconds(3f);
// 매칭이 완료되었고, 취소되지 않은 경우에만 씬 전환
if (isMatching)
{
SceneManager.LoadScene("BattleScene"); // 배틀씬으로 넘어가기.
}
}
private void OnSkillButtonClicked() // 스킬버튼을 누르면 호출하기로되어있는 메서드
{
SceneManager.LoadScene("SkillScene"); // 스킬관리페이지로
}
private void OnExitButtonClicked() // 종료버튼을 누르면 호출하기로 되어있는 메서드
{
Application.Quit(); // 종료
}
}
'Unity 개발 공부' 카테고리의 다른 글
| [내배캠] 본캠 2일차. 팀 카드 뒤집기 게임 #2 (0) | 2025.04.08 |
|---|---|
| [내배캠] 본캠 1일차. 팀 카드 뒤집기 게임 #1 wireframe. (0) | 2025.04.07 |
| [내배캠] 9일차 기초문법 활용해서 구구단, 최대값,최소값 내기 (25.04.02) (0) | 2025.04.01 |
| [내배캠] 9일차 코루틴에 대한 기초 공부. (25.04.02) (0) | 2025.04.01 |
| [내배캠] 8일차 게임속 상호작용 분석하기 (25.04.01) (1) | 2025.04.01 |