✅ 한 것들
- 지원서 작성 및 깃북 정비
- R&D : Isometric, Spine
🛠️ R&D
Isometric
2D
- unity 자체 isometric tilemap 사용하거나 직접 만들 수도 있긴 함
- 애니메이션 만들 때 8축 다 그려야 해서 오래 걸림
- 넓은 물체 sorting 문제 생김
3D
- 2D에 비해 디테일 그리는거 어렵고 오래 걸린다
- 애니메이션 쉽게 만들 수 있다
2D + 3D
- 가장 좋다. 애니메이션 필요하면 3D로, 디테일 필요하면 2D로.
- collider를 직접 설정해줘야 해서 번거로울 수 있다
한 칸의 크기 (PPU)는 가로 기준
그려진 한 면에서 가로와 세로를 찾아 Cell Size 비율을 설정
Sprite Editor에서 Slice할 때 Isometric이 아니라 Rectangle로 하는 것
분명 Multiple Rectangle로 잘랐는데 모양이 다이아 모양이 됐다면 파일 지우고 다시


코드 : https://gist.github.com/SeizeTheDay7/cf3f9f63f7fc295dddcd10bd5be511bf
참고할만한 영상 : https://www.youtube.com/watch?v=_TY0F7Zm6Lc
문제
- 방향키로 조작하면 대각선으로 이동 끝내려고 해도 마지막 남은 방향키가 하나라 동서남북 직선 방향 Idle 애니메이션이 재생됨.
- 입력 버퍼를 넣으면 빠르게 방향 전환할 때 어색한 문제 발생
- 이동 버퍼를 넣으면 조작감이 답답해지는 문제 발생
- 애니메이션을 update가 아니라 fixedupdate에 넣으면
- 마우스로 클릭하면 해당 위치로 가는 이동법 도 많은 Isometric 게임에서 채용됨. 하지만 navmesh는 3D가 기준.
- 억지로 2D에 3d collider 추가해서 쓰거나, 외부 라이브러리 가져와서 써야됨
향후에 진짜로 필요해지면 더 고민해보기
근데 애초에 Isometric 할거면 강도가 총 겨누지 않는 이상 3D 기반으로 만드는게 맞는 거 같다
NavMesh도 안되고 collider 지정도 곤란하고 애니메이션도 힘들고
튜토리얼이 괜히 없는게 아님
Spine 패키지
https://www.youtube.com/watch?v=DxDZtTK2nlE
SkeletonAnimation 컴포넌트
- spine 패키지의 핵심
- 하는 일
- GameObject에 Spine skeleton을 추가한다
- animate한다
- 애니메이션 이벤트에 반응한다
- 기타 등등
SkeletonDataAsset
- skeleton data와 texture atlas 제공
- spine editor에서 export한 것들 그대로 넣으면 asset 자동 생성됨
- 씬에 끌어다 놓으면 skeleton GameObject 생성
AnimationState
GetComponent<SkeletonAnimation>().AnimationState : 할당해놓고 애니메이션 현재 상태 확인할 수 있는 인스턴스
- track 개념 : 상위 track은 하위 track을 override
AnimationState.SetAnimation()
- SetAnimation()은 기존 Animation을 내쫓고 재생
- 인자 1 : Track Index, 애니메이션 override 가능
- 인자 2 : Animation, 무슨 애니메이션
- 인자 3 : loop, 루프 할건지
- 애니메이션이 다른 애니메이션으로 바뀔 때 mix duration이 부드럽게 전환 정도 결정
- SkeletonDataAsset에서 Mix Settings로 mix duration 설정 가능
AnimationState.SetAnimation()
- 애니메이션 뒤에 재생할 애니메이션 추가
- 인자 1,2,3 : 동일
- 인자 4 : delay, 얼마나 기다린 후에 재생될건지. 0으로 두면 앞에거 끝난 후에 재생.
- SetAnimation()과 AddAnimation()은 TrackEntry 객체를 반환하는데, 이걸로 애니메이션 추가 조정 가능
- mix duration 등 수많은 속성 조절 가능
skeletonAnimation.AnimationState.Event += HandleAnimationStateEvent : 모든 애니메이션에 이벤트 발생 체크 (editor에서 이벤트 지정)
trackEntry.Event += HandleAnimationStateEvent : 특정 애니메이션에 이벤트 발생 체크
- AttachmentTrheshhold : 파티클같은거 애니메이션에서 attachment로 추가했을 때 애니메이션 전환 시에 갑툭튀 안 하게 조절
skeletonAnimation.state.AddEmptyAnimation() : 포즈 초기화 애니메이션 추가
SkeletonAnimation은 meshrenderer를 사용하기 때문에 lighting 있으면 shadow cast한다
SkeletonUtilityBone 컴포넌트 : 계단 걸을 때 발 높이 맞추기 등
SkeletonGraphic 컴포넌트 : SkeletonAnimation 대신 사용. UI에 spine 객체 렌더링 가능
- BoneFollwerGraphic : UI 요소가 본을 따라가게 함
SkeletonMecanim 컴포넌트 : SkeletonAnimation 대신 사용. animation controller처럼 애니메이션 편집 가능하게 됨 (limitations 있으니 안 쓰는게 맞다)