Unity

0702 Animator 02

피곤핑 2019. 7. 2. 16:41

1. Attak 상태 만들기

 1) 이름이 OnAttack인 Trigger를 Prameter로 만듦 

 - Trigger는 true,false 할 필요없이 선택만하면 넘어가도록 함

 2) Idle상태를 선택하고 Attack 상태와 서로 연결 (Make Transition) 

 3) Run 상태에서 Attack 상태로 가는 선 서로 연결

 4) Idle > Inspector > Condition > OnAttack Trigger 선택

 - Has Exit Time 체크 해제

 5) Player_Attack 스크립트 만듦

 6) Player_Idle.cs 에 코드추가

  7) Player_Run.cs 에 코드추가

2. 적만들기

 1) create empty > "Enemy"

 2) trasnform Reset 후 Z : 15

 3) Add Component - capsule collider, rigid body 추가

 4) 축이 바뀌지 않도록 Freeze Rotation 세 좌표 모두 체크

 5) Enemy layer 생성 후 설정 

 6) 다운받아놓은 데모 모델을 Enemy의 자식으로 연결

 7) 데모 프리팹의 위치를 리셋한뒤 Scale (1.5 1 1.5) - (스케일을 키우게되면 충돌박스도 키워야함!!)

 8) 부모인 Enemy의 설정도 모델에 맞춰서 키워줌

 

 

3. 적 Animator 만들기

 1) Animator 폴더 > create > animator controller > 이름 : "Enemy" 생성

 2) 만든 Enemy animator controller와 데모모델을 연결 (드래그앤드롭)

 3) Enemy 더블클릭 후 위에서 했던 방법과 같이 Idel state 추가함  

 4) Inspector > motion - DS_onehand_idle_A 설정

 5) "Walk" state 생성 Inspector > motion - DS_onehand_walk

 6) Idle -> Walk 로 Make Trasition

 7) parameter 창에서 Trigger로 "OnWalk" 만들기

 8) 트랜지션 화살표 선택후 condition > + > OnWalk

 - Has Exit Time 체크해제

 9) add behavior > Enemy_Idle 생성

 10) 코드 작성

 11) walk state 누른 후 add behaviour로 "Enemy_Walk" 생성  

 12) 코드 추가

InitMove() 함수
OnMove() 함수

 - 적이 자기 의지대로 움직이면 성공

 

추가 코드

 - 애니메이션 속도가 느려졌는지 확인

 

4.  적 Chase

 1) Chase state 만들고 DS_onehand_walk로 연결

 2) transition 연결과 parameter

 3) condition > IsChase > true, Has Exit Time 체크 해제

 4) walk -> chase Make Transition

 - condition > IsChase > true , Has Exit Time 체크 해제

 5) chase -> Idle Make Transition

 - condition > IsChase > false, Has Exit Time 체크 해제

 6) Enemy_Chase 라는 이름으로 Add Behaviour

 7) 코드 작성

Enemy_Chase.cs
OnTrasition() 함수
OnMove() 함수
Enemy_Idle.cs
Enemy_walk.cs (Idle 내용과 같음)

 

5. 적 Attack

 1) attack state 생성

 2) Make Transition

 - state가 많아지면 FSM 프로그램은 관리하기가 어려워짐

 3) bool형 IsAttack()을 만들고 Attack condition에 추가.

 4) Attack -> Chase 로 Transition 해주고 IsAttack false 추가

 5) Enemy_Attack 스크립트 생성 (add behaviour)

 6) 코드 작성

 

Enemy_Chase의 OnTransition() 추가

 7) DS_onehand_Attak의 Loop Time을 체크해줌 (처음엔 비활성화 되있는데 Edit 클릭)

 

6. Player Animation Event 처리 (애니메이션의 특정시점을 함수랑 연동하기 위함)

 1) "PlayerModelController.cs" 생성 후 RPGHeroPBR 모델과 연동

 2) 코드 작성

  

7. Enemy Animation Event 처리

 1) "EnemyModelController.cs" 만든 후 모델과 연동

 2) 코드 작성

 3) Read-only로 rock을 걸어놓았음 - DS_onehand_attak_A

 4) 그렇기때문에 따로 edit 으로 가서 설정

 5) 코드 작성~~~

 6) 실행해보면~~~~ 됨~!