-
내일배움캠프 23일차 TIL - 유니티 입문 팀 프로젝트 2TIL/Unity 2024. 5. 17. 21:02
[학습목표]
유니티 입문 주차 팀 프로젝트를 진행하고 필수 요구사항 기능 구현을 완료한다.
[학습내용]
시작 화면 구성
우선 팀원별로 역할을 분배하여 시작하였다. 나는 게임이 시작하는 스타트 씬을 맡아서 구현하였다.
와이어 프레임에 따라 세 개의 버튼을 배치하였고, 각각 버튼에 알맞는 기능을 구현하였다. 기능 구현이 우선이기 때문에 하얀 사각형은 나중에 알맞은 이미지로 바꾸고 배경도 추가해야 한다.
public void QuitGame() { // 구동 환경이 유니티 에디터일 경우 #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; // 구동 환경이 응용프로그램일 경우 #else Application.Quit(); #endif }
종료 버튼 기능을 구현하던 중, Application.Quit()을 실행하여도 게임이 종료하지 않는 현상이 있었다. 그래서 구글에 찾아보니, 에디터 환경에서는 해당 메서드가 동작하지 않는다고 한다. 빌드한 후에 응용프로그램 상태에서는 작동한다고 한다.
그래서 #if 문을 이용하여 유니티 에디터일 경우에는 다른 코드로 종료할 수 있도록 수정해주었다.
시작 화면 두 번째에 있는 게임 방법 버튼을 클릭하였을 경우에는 위의 UI가 활성화되도록 구현했다. 마찬가지로 기능 구현이 우선이기에 나중에 상세한 설명과 디자인이 추가되어야 할 것이다.
따로 닫기 버튼을 만들지 않고 패널의 아무곳을 클릭하면 다시 비활성화 되도록 구현했다. 이건 따로 스크립트를 작성하지 않고 버튼 컴포넌트 자체 기능으로 구현해줬다.
시작화면 구성을 마칠 쯤 되니, 다른 팀원들도 각자 씬 기초 구현을 완료했다. 스타트 씬에서 필요한 게 더 뭐가 있을까 고민하다가 게임 매니저를 만들었다. 스타트 씬에서 초기화 되고, 싱글톤 디자인으로 계속 들고 있을 오브젝트다.
using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class GameManager : MonoBehaviour { public static GameManager Instance; [SerializeField] private GameObject mushroom; private float intervalTime = 1f; private bool isPlaying = false; public int totalScore = 0; public void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(this); } } public void FixedUpdate() { if (isPlaying) { if (intervalTime > 0) { intervalTime -= Time.fixedDeltaTime; } else { MakeMushroom(); intervalTime = 1; } } } public void GameStart() { isPlaying = true; Time.timeScale = 1f; totalScore = 0; } public void GameOver() { isPlaying = false; } public void GamePause() { Time.timeScale = 0f; } public void MakeMushroom() { Instantiate(mushroom); } }
이 게임 매니저에서는 게임의 시작과 정지, 그리고 게임의 핵심 로직인 버섯 생성 등을 담당할 예정이다. 점수 등의 정보도 들고 있어야 하기 때문에 씬이 바뀌어도 파괴되지 않도록 DontDestroyOnLoad()도 사용해주었다.
[결과물]
현재까지 다른 팀원들과 구현한 것들이다.
https://github.com/LolDaeNam/AvoidTeemoMushroom
[회고]
게임 매니저를 만들 동안 다른 팀원들은 버섯(탄막)이나 씬 이동, 점수 시스템 등의 다른 기능을 구현했다. 그 과정에서 유니티의 같은 씬을 수정하였기 때문에 깃허브 충돌이 발생했다. 이 충돌을 해결하는 데 많은 시간을 투자했다. 일단 핵심 기능 구현은 다행히 끝났으나, 충돌 처리에 너무 많은 노력과 시간을 쏟아부은 거 같다.
다음에 구현해야 할 기능들로는 HP 시스템, 난이도 시스템, 아이템, 캐릭터 변경 등이 있다. 특히 난이도 시스템을 오늘 거의 구현했는데, 깃허브 충돌 처리 과정에서 날아가버렸다. 그래도 핵심적인 것들은 기억하고 있으니 다음에 바로 구현할 수 있을 거 같다.
그래서 우선 다음 주에는 난이도 시스템을 먼저 구현할 예정이다. HP 시스템은 팀원이 맡을 거 같다. 주말에 시간이 난다면 이미지 등을 직접 그려봐야겠다.
'TIL > Unity' 카테고리의 다른 글
내일배움캠프 25일차 TIL - 유니티 입문 팀 프로젝트 4 (0) 2024.05.21 내일배움캠프 24일차 TIL - 유니티 입문 팀 프로젝트 3 (0) 2024.05.20 내일배움캠프 22일차 TIL - 유니티 입문 팀 프로젝트 (1) 2024.05.16 내일배움캠프 21일차 TIL - 스파르타타운 제작 마무리 (0) 2024.05.14 내일배움캠프 20일차 TIL - 스파르타타운 게임 제작 (0) 2024.05.13