나 개발자 진짜 되냐?

[ 12月 2日 ] 오늘 내가 배운 것 _ 55日次 _ 12월의 시작! 본문

오늘 공부를 정리해봐요!

[ 12月 2日 ] 오늘 내가 배운 것 _ 55日次 _ 12월의 시작!

Snow Rabbit 2024. 12. 2. 22:27

 

 

자,

전편에 이어서 계속해서 매니저를 만져보자

 

https://qua28.tistory.com/228

 

[ 11月 29日 ] 오늘 내가 배운 것 _ 54日次 _ Async란? Lamda 문법 정리

오늘은!프레임 워크를 복습하며 짜보았다. 이번에는 비동기적 기능을 사용할 것이기 때문에 Async 기능을 사용할 것이다. 허엇 Async? 가 뭘까 함께 알아보자! Async메서드가 비동기로 실행될 것

qua28.tistory.com

 

음..

ResourceManager을 만들어보자!

 

 

우리는 로드에셋 함수를 만들어 줘야 하는데,

뭐 스프라이트인지 오브젝트인지 알 수 없기 때문에

 

 

뭐 올지 모르니 일단 T로 지정!

그러면? 반환값도

Void가 아니라 T로 해줘야 한다.

 

여기서 key값은 에셋 이름이 될 것이다.

 

다음에 ResourceLoad를 써야 하는데

보통 경로로 쓰는데

 

이 경로를

우리는 Enum으로 설정해 보자!

 

 

이렇게!

위에 AssetType은 Resource파일 밑에고

그 파일 밑에 즉 하위폴더는

CategoryType가 될 것이다.

 

 

 

매개변수로 받아준다.

하위폴더는 없을 수도 있으니 처음에 None로 해준다.

 

다음에 handle이라는 빈 오브젝트를 하나 만든다.

 

다음에 경로를 설정해야 한다.

 

 

 

만약에 경로가 없으면 "" 해서 비우고

아니면 다음경로로 들어가세요!라는 의미

 

이렇게 되면 두 번째 경로까지 들어갈 수 있도록

만들어 주었다.

 

자 이제 경로는 두었고,

하나의 예외처리를 해주어야 한다.

 

이 예외처리는

한번 불러온 것들은

중복해서 불러오지 않게 하기 위해

에셋을

딕셔너리로 만들어주는 작업을 할 것이다.

 

딕셔너리를 만들어주고!

 

키를 찾아볼 것이다!

무슨 키냐!

key _ path

 

이렇게 키를 저장할 것이기 때문에 이렇게 받아준다.

 

없으면 생성해줘야 한다.

 

아까는 키를 빼고 만들어 주었기 때문에

key를 더해줘야 한다

아까도 이야기했지만 key는 에셋이름이다.

 

 

리소시스를 로드해 올 건데

그곳은 경로에 이름을 가져올 것이고

그 타입은 T일 것이다.

 

뭘 가져올지 모르기 때문에 T로 반환했듯

여기서도 타입은 T로 통일한다!

 

오브젝트가 없거나, 경로가 없는 경우가 있을 수 있으니

이 부분에 대한 예외처리를 해주자.

 

 

만약에 널이면

고대로 반환하고

널이면 뭐 경로에 아무것도 없는 거니깐..!

 

그리고 아니면

딕셔너리에 값을 추가해 주면 된다!

 

아까 경로와 ( 딕셔너리의 key )

방금 만든 오브젝트 ( 딕셔너리의 value )

 

그리고 마지막으로

 

 

다 불러왔으니

아까 맨 처음에 만든 변수에다가

다 넣어주고!

return 해주면 된다!

 

자..

여기서 또 아쉬운 부분이 있어서 하나 발전시켜야 한다.

 

이 ResourcesLoad의 경우

크기가 왕 크면

그만큼 오래 걸린다.

 

하지만 이 녀석들 동기동기동기들이라

 

크기가 크면

그만큼 멈춰 있기에...

비동기동기로 바꿔주어야 한다.

 

그렇다면!!

 

전에 배웠던?!

 

Async

를 써주면 되겠지요!?

 

 

오브젝트를 비동기로 바꾸어 준다.

 

어싱크대는

반환값을 무조건 Task, Task <T>로 해주어야 하는 특성 있었다.

 

그래서 우리는

 

맨 윗줄을 이렇게 고쳐줘야 한다.

 

 

이 빨간 줄은

using문이 없어서 그렇다! 없다면 추가해 주자!

 

어싱크이기 때문에

오브젝트가 아니라 이제 오퍼레이션으로 바뀌어야 하고

 

늘 해주었던,

while문을 돌려서

다 끝나지 않았다면!

디버그를 일단 찍어두자.

 

 

while문 탈출할 때 await 필수..!

 

그다음에!

우라 아까 obj를 operation으로 바꿨었는데

 

그 obj를 다시 만들어주자

 

 

이 오퍼레이션에 추가한 정보를 obj에 담으면 끝!

 

 

자, 이제 마지막으로

리소시스로 불러오도록 게임매니저에 가서 작성해 보자

 

 

그냥 해주면 안 된다.

상속의 친구가 있기에

 

 

override를 해주어야 한다.

 

이렇게 받아주면 되는데..

파란 줄은 뭘까 하니

 

우리는 이 로드에셋이 어싱크를 해주었기에

 

이를 감싸는 함수도 어싱크어야 한다!

 

어싱크를 해주었으니..

어웨이트도 해주어야 한다.

 

오브젝트를 만들어주었으면 생성해 준다.

 

진짜 끝!

 

 

뿌듯합니다!

 

이 스켈리톤 코드를 어떻게 더 발전시킬 수 있을지

!!

 

기대가 된다 호호