일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Console.WriteLine
- c# 백준
- 유니티상호작용
- c#기초문법
- 시샵문법
- 스파르타
- c#코테
- c#
- C#문법
- 오블완
- unity3d게임만들기
- unity게임만들기
- 유니티3dui
- unity3dservival
- 유니티서바이벌게임만들기
- 시샵
- 유니티게임만들기
- 유니티공부
- unity게임
- c#기본문법
- c# c#프로그래머스
- c#코딩기초트레이닝
- c#프로그래머스기초문법
- unity공부
- 티스토리챌린지
- 스파르타코딩클럽
- unity3d
- c#문제
- 유니티
- Unity
- Today
- Total
나 개발자 진짜 되냐?
[ 12月 19日 ] 오늘 내가 배운 것 _ 68日次 _ 오늘은 발표 자료 준비中 본문
나는 지금 발표자료 준비 중
발표자료 준비하면서
내 코드에 대해서
다시 돌아보는 시간을 가졌다.
.. 어렵다
다시 봐도 어렵다.
발표자료를 정리하면서
나중에 들어올 질문도 재차 확인해야 하고
데이터도 확인해야 하고..
쉽지 않다.
면접준비도 해야 하고.
오늘은 내가 만든 매니저들을 정리해 보는 시간을 살짝 가져보자.
< Singleton >
싱글톤을 상속받는 매니저들이다.
이 싱글톤은 추상화를 통해
독립적으로 사용할 의도가 없고
하위클래스에서만 사용을 하게끔 하고
싱글톤의 공통 조작들을 제공해 줄 수 있게 했다.
< ResourceManager >
경로에 대한 설정을 하기 위해
리소스 밑에 파일들을 enum으로 해주고
이미 불러온 데이터를 딕셔너리에 저장하고,
리소스폴더에서 데이터를 불러오는 방식을
동기로 가져오는 과정과
비동기로 가져오는 과정을
두 개로 나누어서 구분된다.
동기에서는
리소시스 폴더에서 데이터를 즉시 로드한다.
에셋풀이 있다면 캐시 된 데이터를 반환한다.
handle이 되겠네요
딕셔너리 키값이 없다면
Resources.Load로 데이터를 로드하고
성공하면 assetPool에 추가한다.
비동기로드에서는
로드 중에 다른 작업을 수행할 수 있게 해 준다.
코드는 굉장히 똑같다.
로드에셋함수는 어떤 데이터를 불러올지 모르기 때문에
프리팹이나 스프라이트나 뭐 게임오브젝트나 등등
T로 반환하고 T를 꼭 써줘야 한다.
< SceneLoadManager >
ChangeScene이 중요한데
여기는 씬로드 자체를 제어하기 위해 있는 친구이다.
SceneManager.LoadScene은 비동기이기 때문에
그 밑의 코드들의 순서를 보장하지 못한다.
그래서 async 해주어
씬의 진행상황을 받아올 수 있게 되었다.
isDone을 통해
끝나지 않았다면
디버그 찍어주고
await 해줘서 기다린다.
while문이 끝나면
씬을 확인해 보고
씬 이름을 nowScene에 넣어주고 액션을 실행시켜 준다.
while문이 근데 또 비동기가 아니기 때문에
이 전체를 다 비동기 해주어야 한다.
그래서 이 함수 전체에다가 async를 달아준다.
UnLoad도 마찬가지이다.
이 친구는 single이 아니라
addtive로 해주면 다 쓰고 꺼줘야 하기 때문에 있는 친구이다.
< UIManager >
여기서는 UI를 동적으로 생성해 주는 친구이다.
Resource 폴더에 UI 프리팹을 로드해 주고
show, hide로 껐다 킬 수 있게 해 주었다.
무엇보다
이 UI를 딕셔너리에 저장해서 재사용이 가능하게 해 주었다.
밑에 코드를 보자
UI가 표시될 부모 트랜스폼을 만들어준다.
부모 오브젝트가 이동하면 같이 움직일 수 있게 해 주었다.
FindFirstObjectByType 함수를 사용하여
씬에서 특정 타입의 첫 번째 객체를 검색해서 찾는다.
SceneBase타입의 첫번째 객체를 찾아준다.
show해주는 부분이다.
UI프리팹을 Resource파일에서 가져와주고 보여주게 된다.
uiList.TryGetValue(uiName, out UIBase ui);
이 부분이 특히 어려웠는데
아까 만들어둔 딕셔너리에서 키값을 찾아주는 함수라고 한다!
키가 있으면 uiList 안에 uiName값을 ui에 넣어주고
아니면! ui는 null이고 메서드는 false로 준다.
hide 해주는 부분이다.
메모리방지를 위해
UI를 제거하고 딕셔너리에서 삭제해 준다.
여기가 이제 UI를 로드해 주는 곳이다.
동적으로 캠버스를 만들어주고
사이즈 및 설정을 해준다.
만약에 우리가 게임씬이든 인트로씬이든
둘 다 게임매니저라는 오브젝트 친구가 있어야 한다고 쳐보자.
그렇게 되면
씬이 바뀔 때마다
싱글톤에 의해 새로운 게임매니저 오브젝트가 생성될 것이다.
그러면 그 오브젝트에 달려있던 인스펙터들이 날아가버리기 때문에
싱글톤으로 만들어 둔 의미가 없어진다.
그래서 우리는
현재 존재하는 오브젝트를
씬을 하나 만들어서 다 넣어주고
addtive를 활용해서 모든 씬이 로드될 때
매니저가 있는 씬을 먼저 로드되게 만들어 둘 것이다.
즉
그래서 모든 씬들이 시작하기 전에
매니저가 있는 씬을 먼저 실행시키게 해줄 것이다.
그래서 씬들에게
너보다 먼저 만들어지는 씬이 있어..
라는 사실을 알려주기 위해
씬베이스를 만들어줄 것이다.
< SceneBase >
isDontDestroy를 실행한 적이 있냐?
없다면 씬을 이동해 주고
true 해줘서 실행했다고 알려주고
다시 unload 해준다.
addtive이기 때문에
화면이 끝나면 unload 해줘야 한다.
이쯤하고
내일은 데이터부분에 대해 정리해봐야겠다.
'오늘 공부를 정리해봐요!' 카테고리의 다른 글
[ 12月 20日 ] 오늘 내가 배운 것 _ 69日次 _ 오늘도 발표 자료 준비中 (1) | 2024.12.20 |
---|---|
[ 12月 18日 ] 오늘 내가 배운 것 _ 67日次 _ UI는 어려워 (5) | 2024.12.18 |
[ 12月 17日 ] 오늘 내가 배운 것 _ 66日次 _ 튜터님은 츤데레👏 (4) | 2024.12.17 |
[ 12月 16日 ] 오늘 내가 배운 것 _ 65日次 _ 쓰리 투 원 대격변! (0) | 2024.12.16 |
[ 12月 13日 ] 오늘 내가 배운 것 _ 64日次 _ JSON을 SO로 바꾸기 (4) | 2024.12.13 |