Unity 5.02로 '유니티 2D 디펜스 게임은 이렇게 만든다' 4장 더는 혼자가 아니다-단 걸 좋아하는 판다의 습격 따라하기.

18/9/2 일

책의 예제 그림 대신 이전 로봇액션 게임 때 만들어 둔 적 인간형 로봇의 스프라이트 애니메이션들을 불러들여 사용.
Hierarchy에 빈 게임오브젝트 생성, 'Enemy'라 명명, Idle 스프라이트 2개를 드래그하여 넣어 애니메이션 파일 1개와 애니메이터 컨트롤러 파일 생성. 'Enemy01.controller', 'Enemy01Hit.anim'으로 이름 바꾸기. 애니메이션 창에서 Create New Clip 선택하여 Enemy01Walk, Enemy01Die, Enemy01Eat 애니메이션 파일 만들기. Animator 창에서 Enemy01Walk를 Default로 변경하고 트랜지션 연결.

* 애니메이션 전환 테스트용 씬:
트랜지션들 연결한 뒤 새로 'TestAni'란 씬을 만들고 Button 3개를 추가한 뒤 각각 'ButtonHit', 'ButtonDie', 'ButtonEat'이라 명명. On Click()에서 +를 눌러 새 이벤트를 생성하고 Animator 컨트롤러가 적용된 EnemyAnis 선택, Animator-SetTrigger(String) 선택, HitTrigger, DieTrigger, EatTrigger를 설정해 두면 플레이시 버튼 클릭하면 해당 이벤트가 발생, 애니메이션이 제대로 적용되었는지 확인할 수 있어 유용하다.

'EnemyCtrl.cs' 새로 생성, 적 이동과 총알 피탄시, 내 본부 파괴시 처리 코드 작성.
적과 총알 프리팹에 Rigidbldy2D 추가하고 'EnemyCtrl.cs', 'Projectile.cs'의 코드 변경.

* Animator창에서 Transition 선택시 Has Exit Time 아래 Settings-Fixed Duration 체크 여부는 체크시 초로 계산, 비체크시 100%를 1로 계산하는 기능을 한다.

* Animator 컨트롤러 중
- Update Mode: 업데이트 시기, 사용할 타임 스케일 지정.
Normal, Animate Physics, Unscaled Time의 모드가 있다.
Normal: Update() 호출과 동기화된 컨트롤러를 업데이트, 애니메이터 속도는 현재 타임스케일과 일치.
Animate Physics: 물리엔진에서 사용하 FixedUpdate() 호출과 동기화 되어 애니메이터를 대신 업데이트. 캐릭터가 리지드바디를 밀거나 할 경우 유용
Unscaled Time: 호출과 동기화된 컨트롤러를 업데이트, 애니메이터 속도는 현 타임스케일이 무시되고 항상 자체 속도의 100%로 재생. 게임 일시 중지시 일부 UI, 일시 중지 메뉴 자체는 계속 애니메이션되게 하고 싶을 경우 유용.

- Curling Mode: 오브젝트가 애니메이션 되어야 하는 시점 지정.
Always Animate, Cull Update Transform, Cull Completely 모드가 있다.
Always Animate: 연산비용 가장 높음. 언제나 애니메이션 실행.
Cull Update Transform: 연산비용 중간. 리타깃팅, IK 같은 일부만 disable
Cull Completely: 연산비용 가장 낮음. 오브젝트가 오프 스크린일 경우 애니메이션 실행 중지.