본문 바로가기

프로그래밍/개발일지

방송대 프로젝트 - 프로젝트 초기 셋팅

반응형

2022.06.21 방송대 기말고사를 끝내고 프로젝트를 제대로 시작하기 위한 준비를 하기 시작했다. 아마 이번달은 할 일이 많아서 기본 셋팅정도만 보고 다음달부터 최대한 시간을 내서 작업을 하게 될 것 같다. 이거 외에도 진행하는 프로젝트(유니티 플젝, 영어공부)가 있기 때문에 최대한 빠른시간 안에 성과를 내기 위해 버릴건 버리고 진행해나갈 것이다.

 

앞으로 프로젝트를 편하게 진행하기 위한 툴들을 추가하는 작업을 했다. 나중에 이런것들을 모아 EugeneTemplate과 같은 레포를 만들까 하는 생각도 든다. 이를 위해 레포에 추가한 이슈내역은 다음과 같다.

 

1.루키스 기반 기본 템플릿

성능상 살짝 아쉬운 부분도 있고 평소 쓰던 타입도 아니지만, 그래도 다양한걸 사용해보고자 하는 마음에서 지난번 루키스님의 강의에서 사용했던 기본 템플렛을 사용하기로 하였다. 특히 UI쪽이 재미있게 구성되어 있던데.. 이미 강의와 함께 개발 과정을 쭉 함께 사용해봤던 구조이기 때문에 빠르게 적응하고 프로젝트를 진행할 수 있을듯 하다! 이번에 프로젝트 셋팅하면서 아쉬운점을 모아 다음 프로젝트때 개선된 구조로 프로젝트 기본 템플릿(EugeneTemplate)을 만들어야 겠다.

 

2.RuntimeInitializeLoadType

어떤 씬에서 시작하든 상관없이 Play시 앱을 초기화시켜줄 수 있는 RuntimeInitializeLoadType을 이용하여 프로젝트를 구성할 예정이다. 이때 각 Manager들을 초기화 시켜주고, 현재 씬에 맞게 Scene 오브젝트를 생성시켜 줄 것이다. 시작씬을 픽스해두고 그 씬에서 이러한 앱 시작 초기화 작업을 진행해 줄 수도 있지만.. 이 방식을 더 자유롭고 아름다우니까..

 

해당 어트리뷰트와 유니티 이벤트 함수의 실행 순서는 아래를 참고하면 된다.

static Lifecycle() => Debug.Log(Prefix + "Static Constructor");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void Subs() => Debug.Log(Prefix + "Subsystem Registration");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] static void AfterAsm() => Debug.Log(Prefix + "AfterAssembliesLoaded");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] static void BeforeSlash() => Debug.Log(Prefix + "Before Splash");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void BeforeScene() => Debug.Log(Prefix + "BeforeScene");
private void Awake() => Debug.Log(Prefix + "Awake");
private void OnEnable() => Debug.Log(Prefix + "OnEnable");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] static void AfterScene() => Debug.Log(Prefix + "AfterSceneLoad");
[RuntimeInitializeOnLoadMethod] static void DefaultLog() => Debug.Log(Prefix + "RuntimeInit Default");
void Start() => Debug.Log("Start");

https://gist.github.com/hybridherbst/36ae70b6520981c8edc7b478423fae5e

 

3.InitalizeOnLoadMethodAttribute

에디터 작업에서의 통일성을 지키기 위한 코드를 작성할 것이다. 예를 들어서 RuntimeInitializeLoadType을 통해 UI Manager에 접근하고 해당 Manager가 초기화되는 시점에서 EventSystem을 생성할 것인데, 같은 씬에 EventSystem이 2개 이상 존재하면 매 업데이트 루프마다 경고를 출력하므로.. 이러한 현상을 막기 위해 씬 세이브 과정에서 모든 EventSystem을 서치하여 제가해주는 작업을 할 것이다. 이 외에도 에디터에서 발생하는 이벤트를 초기화시켜주는 작업을 함으로 작업을 더 수월하게 진행할 수 있게 될 것이다!

 

1번부터 3번까지 모두 일반적인 유니티 입문 강의에서는 다루지 않는 내용이다. 실제 프로젝트를 진행하면서 이런 기초작업을 잘하면 작업이 많이 편해지는데.. 이런걸 알려주는 사람이 별로 없으니 직접 이거저거 사용해보면서 나만의 프로젝트 셋팅방식을 만들어 보자. 나중에 게임잼을 나가든 개인 프로젝트를 진행하든 앞으로 큰 도움이 될 것이다. 그리고 이런식으로 프로젝트 셋팅해서 시작하는게.. 간지철철..

 

4.프로젝트 버전 변경

원래는 2021.3.4 버전대를 사용하려고 프로젝트 셋팅을 모두 진행했으나.. 내가 사용하고자 하는 에셋들이 해당 버전에서 적용되지 않는다. 커스텀 URP 쉐이더들이 2021.2 버전대를 기점으로 적용되지 않는거를 보아 이때 URP가 내부적으로 많이 바뀐듯하다.. 가능하면 신버전에 가까운 LTS 버전을 사용하는 것이 좋으나.. 어쩔 수 없으니 약간 구버전이지만 2020.3.17 버전을 사용해야겠다.

 

 

이렇게 변경내용들을 담아 dev에 머지 성공~

 

5.에셋 테스트

이쁘당~

주말에 시간내서 Oculus Quest2와 연동해야 제대로 에셋 테스트가 끝났다고 할 수 있겠다.

제발 한번에 성공하길 ㅜㅜ 여기서 망하면 시간낭비 엄청나게 할 듯 하다

 

6.문서화

1개의 이슈당 브랜치를 만들어서 dev에 머지하는 방식으로 작업하고 있다. 그래서 작업에 대한 전체적인 과정은 issues를 확인하게 할 것이다. 이 블로그는 그냥 일기처럼 쓰는 것이고.. 그리고 Readme에서도 전체적인 내용을 파악할 수 있게 이쁘게 작성할 것! 이제 프로젝트에 대한 기본적인 스펙이 잡힌 듯 하니 아래처럼 readme를 정리해두었다.

 

 

처음부터 당황스러운 과정들이 있었지만 하루만에 첫번째 이슈를 해결할 수 있었다! 기획은 뭐 오랫동안 해왔던거니 머리에 있는대로 쭉쭉 개발을 진행해나가보자.

 

반응형