1. Aseprite 묶음 그대로 사용하기(실패)
에셋 중에서 Aseprite 형식의 에셋을 간혹 접하는 경우가 있다.
sprite, 애니메이션 다 한 묶음에 들어가 있길래
그냥 드래그 앤 드롭해서 그대로 갖다 쓰려고 했다.
Failed to load 'D:/GameEngine/UnityProject/OneMonthTask/Assets/Resources/CharacterPack/Aseprite file/Archer.aseprite'. File may be corrupted or was serialized with a newer version of Unity.
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
그런데 애니메이터를 수정하려던 순간 오류가 떴다.
GPT한테 무슨 오류냐고 물어본 답변▼
이 오류는 Unity에서 .aseprite 파일을 불러올 수 없는 이유를 나타냅니다. 가능한 원인으로는 다음과 같은 것들이 있습니다:
- 파일 손상: Archer.aseprite 파일이 손상되었을 가능성이 있습니다. 파일이 제대로 저장되지 않았거나, 저장 중에 문제가 발생했을 수 있습니다.
- Unity 버전 문제: 해당 파일이 Unity의 더 최신 버전에서 저장된 후, 현재 사용 중인 Unity 버전이 이를 불러올 수 없는 경우입니다. Unity의 최신 버전으로 업데이트하면 해결될 수 있습니다.
- Aseprite 지원 문제: Unity가 기본적으로 Aseprite 파일 형식을 직접 지원하지 않습니다. 일반적으로 .aseprite 파일은 Unity에서 사용할 수 있도록 .png와 같은 이미지 파일로 내보낸 후 사용해야 합니다.
해결 방법:
- 파일 손상 확인: Aseprite에서 해당 파일이 정상적으로 열리는지 확인하세요. 만약 Aseprite에서도 파일이 열리지 않으면 파일이 손상된 것일 수 있습니다.
- Unity 버전 업데이트: Unity를 최신 버전으로 업데이트한 후 다시 시도해 보세요.
- Aseprite 파일 내보내기: Aseprite에서 해당 파일을 .png 또는 .json 형식으로 내보내고, Unity에서 사용할 수 있는 형식으로 변환하세요.
아무래도.. 날먹은 안되는 것 같다.
결국엔 Aseprite안의 Sprites와 Animator, Clips들을 사용해서 따로 프리팹을 만들어야할 것 같다.
1. 플레이어 프리팹 만들기 첫 번째 : 기본 셋팅
Player는 처음에 빈오브젝트로 만들었고, SpriteRenderer에는기본 Sprite를 넣어주는데, Aseprite에서 첫 번째 Sprite를 드래그 앤 드롭해서 넣어줬다.
애니메이터는 빈 애니메이터 하나 만들어서 넣어줬다.
간혹 자식으로 SpriteRenderer를 따로 넣는 경우도 있는데 이거는 따로 나누면 Sprite 경로를 못찾으니까 정 따로 나누고 싶다면 SpriteRenderer랑 Animator를 같이 둬야한다.
2. 플레이어 프리팹 만들기 두 번째 : 애니메이터 만들기
2.1. 애니메이터, 클립 추출하기
클립은 요렇게 Aseprite안에 들어있다.
드래그 앤 드롭해서 애니메이터창에 넣어도 되지만 ReadOnly로 되어있다.
ReadOnly로 되어있어서 Loop Time을 체크하고 싶은 상황에선 못한다.
애니메이션만 복사해서 다른 폴더에 붙여도 Aseprite 통째로 복붙이 되기 때문에 안된다.
그렇다면 애니메이션 클립만 따로 추출해내자.
Aseprite 부모 오브젝트 클릭해보면 `Export Animation Assets`가 있다.
클릭하면 요로코롬 뜨는데 추출하고 싶은거 선택하면 된다.
필자는 클립만 추출해냈다. (컨트롤러는 체크해제) 왜냐면 아까 빈 애니메이터 만들어뒀으니까..
애니메이션 클립들은 Clips 라는 폴더에 저장했다.
Idle은 Loop Time 체크!
Attack은 해제해줬다. 공격은 1번 실행하니까.
2.2. 애니메이터 완성하기
필자가 만들 프로젝트는 플레이어가 가만히 있고 체력도 없고 공격만 할거라서 상태가 Idle, Attack 2가지 뿐이다.
파라미터에 Attack 상태 Bool값으로 넣어주고~
HasExitTime 체크 해제해주고~
Transtion Duration 0으로 해준다. 이유는 다음 애니메이션 상태로 변경될 때 지연없이 바로 다음 애니메이션으로 넘기기 위해서다.
Attack에서 Idle로 돌아갈 때는 애니메이션이 Attack 모션이 다 끝난 뒤 Idle로 돌아가야하니까 Has Exit Time에 체크 해준다.
Idle로 넘어갈 때 너무 빨리 다음 모션으로 넘어가길래 0.4초 지연시간을 뒀다.
(수정) 0.4 → 0.3초로 바꿈. 결과 영상은 0.4초
결과 영상
'Unity 공부 기록' 카테고리의 다른 글
[Unity/유니티] Pivot(피봇) 재설정 하기 (1) | 2024.09.07 |
---|---|
[유니티/Unity] Physics2D.OverlapCircle 중앙 정렬 (0) | 2024.09.06 |
[유니티/Unity] Slice된 Texture2D를 Png 썸네일 이미지로 생성하는 툴 (0) | 2024.09.03 |
댓글