(오늘의 완성된 개인 과제. 제목은 사나이 클럽이다.)
구현한 요구사항
필수요구사항
- 캐릭터 만들기 ✅
- 캐릭터 이동 ✅
- 방 만들기 ✅
- 카메라 따라가기 ✅
- 캐릭터 애니메이션 추가 ✅
- 이름 입력 시스템 ✅
- 캐릭터 선택 시스템 ✅
선택요구사항
- 시간 표시 ✅
- 인게임 이름 바꾸기 ❌
- 참석 인원 UI ✅
- 인게임 캐릭터 선택 ❌
- NPC 대화 ❌
어려웠던 점 & 오류 상황
1. Scene끼리 정보 전달하기
[오류 상황]
InitScene에서 MainScene으로 넘어가는 과정에서
입력한 이름을 어떻게 전송을 하나 고민을 했다.
그래서 구글링 한 결과 DontDestroyOnLoad 라는 메서드를 알게 되었고
'SceneVar'라는 변수 저장용 EmptyObject를 만들어서
별도의 'SceneVariable'이라는 스크립트를 할당한 뒤
이 오브젝트를 넘기는 식으로 시도했었다.
그런데 MainScene에서 넘어간 오브젝트를 Find로 찾는 것부터 에러가 생겼다.
이를 해결하기 위해 다시 구글링을 하니
static(정적) 메서드를 사용하면 해결이 된다고 하는데
분명 기억에 있던 개념이라 다시 살펴보니
GameManager가 하던 일이었다.
[해결]
'이래서 GameManager가 정적 메서드랑 싱글톤 선언을 하는구나...'
라고 생각한뒤 SceneVar는 삭제하고 GameManager를 만들어서 해결했다.
GameManager의 싱글톤 선언과 자주 쓰이는 패턴은 다음과 같다.
public static GameManager I;
private void Awake()
{
if (I != null)
{
Destroy(gameObject);
return;
}
I = this;
DontDestroyOnLoad(gameObject);
}
2. Resource.Load에서 Sprite가 정상적으로 가져와지지 않는 현상
[오류 상황]
InitScene에서 캐릭터 선택하기를 구현하던 중
자꾸 Resource.Load로 불러오던 Sprite가
하얀 사각형으로 불러와지는 문제가 있었다.
분명 코드도 문법 오류가 없다고 생각했는데...
구글링을 해보니 이유를 알게 되었다.
[해결]
Resource.Load 메서드는 기본적으로 Unity 프로젝트 폴더 내에
'Assets/Resources' 라는 폴더가 있다는 것을 전제로 한다.
나는 그걸 모른채 다른 경로에 위치한 Sprite를
경로만 복사해서 붙여놓은 채 정상적인 결과를 기대했기 때문에
오류가 난 것이다.
그리고 확장자명은 쓰면 안된다.
확장자명을 쓰면 다른 이름으로 인식해 해당 리소스를 가져오질 못한다.
예컨대, 'Assets/Resources/Sprites/player_idle.png' 파일을 가져오고 싶다면,
'Resource.Load<Sprite>("Sprites/player_idle")' 과 같이 써야 정상적으로 작동한다.
3. 캐릭터 전환 시 애니메이션이 제대로 적용되지 않는 현상
[오류 상황]
7번 캐릭터 선택 시스템을 구현하는 과정에서
InitScene에서 원하는 캐릭터를 선택하면
'GameManager.I.PlayerType' 를 이용해 값을 저장한 뒤
캐릭터에 해당하는 오브젝트를 활성/비활성화 시키는 것까지는 구현했다.
하지만, 변경된 오브젝트에 대해서는
Animation Controller가 제대로 할당되어 있는데도 불구하고
idle에서 run으로 넘어간다거나
마우스 위치에 따라 고개를 돌리는 기능 등이 작동하지 않는 것이었다.
[해결]
위에서 발생한 오류들로 미루어보아
스크립트 중 애니메이션을 담당하는
'GameAnimationController'에 문제가 있음을 직감했다.
코드를 읽어보니
기본적으로 자식 오브젝트에 접근할 때 비활성화 된 오브젝트는
처리하지 않는다는 사실을 간과하고 있었다.
그래서 상속받을 때 Awake에서 Animation Controller를 지정해주던 것을
ChangeAnimator 메서드를 새로 만들어서
지속적으로 Update 하는 식으로 변경해서 해결했다.
느낀 점
오늘이 마감일이라서 그런지
개인 과제에 더 밀도있게 집중했는데
그래서 그런지 고민하고 해결하는 과정이
잘 안 풀리는 때도 있었지만,
내 힘으로 해결하고 프로젝트를 완성해 나가는 것에
굉장한 재미를 느꼈다.
앞으로 어떤 Unity 프로젝트를 맡게 되더라도
혼자서 잘 헤쳐나갈 수 있겠다라는 믿음이 생겼다.
https://github.com/cn7249/SanayeeClub
'TIL(Today I Learned)' 카테고리의 다른 글
Unity 팀 프로젝트 : 카메라 회전과 기울임 기능 추가하기 - TIL#24 (0) | 2024.01.25 |
---|---|
Unity 팀 프로젝트 : 개발 방향 결정, 임무 분담 - TIL#23 (0) | 2024.01.24 |
객체 지향 프로그래밍, Unity 개인 과제 - TIL#21 (0) | 2024.01.22 |
Unity 게임 개발 입문 : 탑다운 슈팅 프로젝트 - TIL#20 (0) | 2024.01.19 |
Unity 입문하기, 세팅과 기본 조작 - TIL#19 (0) | 2024.01.18 |