본문 바로가기

3D_FPS

08_08 Enemy_Animation (Idle, Move, Attack)

목차

  1. Animation 에 관하여
  2. Enemy 에 Animation 적용하기
  3. Enemy Attack() Asset

 

 


(참고) 오늘의 중요한 Tip

더보기

글 쓰는게 매우 중요함!

프로젝트를 하더라도 팀원과 코딩을 하고있기 때문에 주석 및 글쓰기를 꼭 하자!!

이게 꼭 먼저 되야 함!


Animation 에 관하여..

 

Unity 에서 Animation 은 2가지 형태로 쓰이고 있음!

지금 우리가 쓰고 있는 Animation 외에도 옛날 것도 아직 쓰이고 있는게 있다

 

유니티의 유산(?) 느낌

1. Legacy  Animation .

 => 코드로 씀 Play, Stop 같아

 

요즘 쓰는 것

2. Mecanim

- Avatar System 이 들어가있고

- Visual Script 에 관련된게 들어가 있음.

 

Avatar => 다른 대상의 애니메이션을 움직임

- 성혁이의 에니메이션을 아란이한테 적용시키는 이런

애니메이션 Retargetting 이라는 기법도 쓸 수 있음

 

- 이것들을 제어하기 위한 V.S 으로 제어. FSM 이 기본적으로 탑재되어있음(상태머신)


1번의 애니메이션의 결과의 책임은 프로그래머가 짐...

2번의 애니메이션의 결과의 책임은 Art 가 진다.^^

 

Mecanim 의 가장 큰 변화


Mecanim 에 관해 살펴보자

 - Avatar 

  • 모든 물체에 쓸 수 있는 것 <Generic>
  • 인간형한테만 쓸 수 있는것 Humanoid

그러면 어떤 경우에 갈리는 걸까?

뼈대를 스켈레톤이라고 함.

Skeletion 에 심겨진 걸 Bone 이라고 함

 

이런 연결 방식을 Rig 이라고 함.

Rigging 한다 => 어떤 형태로 bone 을 붙이는걸 한다.

이런 Rig 의 방식에 따라 갈리게 된다.

 

인간형 (Humanoid) => T- pose , Bone 이 15개가 들어감.

이것만 Retargetting 을 할 수 잇다.

 

나머지는 Generic!

 

여기서 Tip!

팔을 굽히고 펴는것만 해도 근육이 움직이는것 까지 구사하게 할 수 있는건,

Skinning 작업 덕분임

 

Skinned Mesh Renderer 에 Skinning 작업을 쓸 수 있음!

Bone 과 Skinning 을 관련해서 설명해주신 모습

 

 

- V.S

 


Enemy 에 Animation 적용하기

 

이제 Unity 에서 살펴보자!

 

Asset Store  에서 다운 받아 보자

 

3D => Animation => Basic Motions Free

 

캐릭터도 다운받자.

Adventure Character

Basic Motions Free Asset , Adventure Character

 

Adventure 캐릭터의 Mesh를 살펴보는 모습

 

FBX 를 최적화해서 사용 할때는 전체를 다 긁어서 가져온다.

이런거는 표준포멧이라서 다른데서도 가져올 수 있다.


Light Map 에 적용이 안되는 애들

 

Light Map UV 작업을 안해서 가져온 애들은 적용이 안됨.

 

그럴때, Generate Lightmap UVs 를 체크하고 Apply 함

 => 유니티 에서 자동적으로 도와줌

 


Rig

 

Unity 에서는 T pose

Unreal 에서는 A pose 를 쓴다고함!

 

 

Rig 를 Legacy 로 해놓고 프리팹 보면

이 Animator 컴포넌트가 붙여져있음.  쓰지도 않는 컴포넌트가 벽같은데 다 있으면 성능이 안좋아짐!

 

Humanoid 라는건 Ritargetting 하겠다는 말과도 거의 같다.

 

여기서  Configuration

아트들에게 가이드를 해주기 위해 우리도 알자,

 

우리가 Reset 을 눌러놓고

reset누른 모습

그다음 ENforce T pose 누르면? 

T- pose

 

Bone 15개

이 15개의 본이 있으면 Humanoid 로 쓸 수 있음

 

Mapping 말고 Muscles & Settings 를 보면

제약을 주는 애들을 컨트롤 할 수 있음

이것들 조절하면 움직이는걸 볼 수 있음

ㅋㅋㅋ

 

Done 하면

Man_MeshAvatar 사용을 Retargetting 으로 사용 가능


Enemy 한테 넣고

캡슐은 이제 지워주자!

 

이제 Animation 을 제어하기 위해서 V.S 를 제어함

 

유니티에서 Mecanim 이 Retargtting 을 위해서 Avatar 를 제공

V.S 에서 FSM 을 제공함

 


내 시스템에 Unity 를 맞춰야지 , 지금 Unity 시스템에 우리가 조작하려고 하니까 막 조금씩 코드도 다르게 해보고 막 이러고 있음. 이건 형편없는 코드임. 내 시스템에 이 시스템을 맞춰놓게 해야함.

 

그것들을 위해 Unity 에서 제공 하는게 Aniamtor 컨트롤러임!

Prefab 을 누르면 난옴

 

Animation 폴더 만듦
Animator Controller 생성

 

 

만든 Animator Controller 를 켜보면

처음으로 실행된 state = Defalt 스테이트임

 

얘는 실행할게 없어서 저렇게 나옴

 

Humanoid 만 Retargetting 이 된다고 했는데, 저렇게 나오면 어떤거 하나가 Generic 이라는 얘기임

거의 90% 이상

 

클릭해보면 옆에서 모션을 확인해볼 수 있음

 

모델 프리팹을 넣으면 그 프리팹의 애니메이션을 확인 할 수 있음

 

Idle 2 다른 버젼

 


Layer 를 쓰면 부위마다 다른 애니메이션을 줄 수 있음
부위마다 다른 모습

 

이전에는 원래 하나씩 다 만들어줬는데, Layer 를 해놨기 때문에 이제는 안그래도 됨

 

아바타 캐릭터가 다양한데, 표정을 다 같이 지을 수 있게 하는것이 이런 느낌으로 하는 것이다.

Humanoid => Retargetting

 


트랜지션

트랜지션이 생기려면 어떠한 값(조건)이 생겨야함, 

Parameters 가 조건생성할 때 씀

 

노란색 블럭 선택하고, Inspector 창에서 Idle 로 바꿈

바뀐 이름

 

 

이것도 넣고 Move 로 이름을 바꾸자!
노란색이 Default 임!
우리의 신호에 맞춰서 가야하는데..

혼자 Move 로 바뀌고 이상한데로 도망감

 

지가 스스로 감,

자동으로 가지않고 우리의 신호에 따라서 움직이게 제어할 거임!

 

결국에 transition 을 제어 할거임 그걸 위해 parameter 를 작성한다

4가지 형식

AI 쓰면 Trigger 를 많이 썼을 거임!

 

AI 만들 때는, 우리가 FSM 만들고 , 이벤트를 전달 해주는거임! 신호만 전달해주는거임!

근데 int 는 생성될 떄가 있음.

Idle 중에도 다양한 Idle  이 있을 때 int 값으로 함. 근데 이건 거의 player 고

AI 할 때는 왠만하면 FSM 우리가 짜놓고 Trigger 만 써서 깔끔하게 하자!

 

이거 선택하고

 

Has Exit Time

이게 체크되어있으면 자동으로 다음 애니메이션이 재생됨

유니티가 자동 블렌딩 시켜줌
이 중간값들을 유니티가 만들어줌... ㄷㄷ

2D 에서는 블렌딩 못함 의미가 없음

본이 있어야만 블렌딩 해줌 Unity 가

 

Has Exit Time
Move 만들고

Conditions 에 추가한다.

Move Condition 추가

이제 코드로 제어해보자!

선언하고 이제 값을 가져올건데 Enemy 가 아니라 그 자식한테 가져올거임! 자식한테 있으니까

 

애니메이터 컴포넌트 가져오기
Idle 에서 Move 가는 Trigger 코드 구현


그리고 플레이해보면 이제 Move 될 때 달리기는 하는데 이상한데로 도망감.. ㅋㅋ

 

이거 보면 애니메이터 자체가 움직임

 

그러니까 우리가 제어할 떄는 그냥 자리에서 움직이는것만 해야함

 

그러면 애니메이션 자체가 움직이는건 언제 사용해? Cinemachine 같은 걸 찍을 때 그 느낌을 그대로 쓰는거임.

 

XZ 체크 안된 모습

이거 체크하고 ,Apply 를 누르면

이제 제자리에서 뛴다!! 

근데 이게 애니메이션이 별로 안좋아서, 좌우로 흔들리면서 뛰네,. ㅎㅎ

 

Mixamo 사용 해보자!

로그인 하고

 

In Place 체크한 상태로
스킨 없이 다운로드!
다운로드 한걸 Animation 폴더에 넣고

Rig 에 Humanoid 로 바꿈!

 

Animation 에 다 체크

Rig 가 잘못되서.. ㅋㅋ

다른 애로 가져오자...

 

위에서 한것 처럼

Zombie Run 을 가져와서, Rig 에서 Humanoid 로 만들고,

다 체크함!


Enemy Attack() Asset

noMove 로 발차기 하는 모습

 

양방향으로 Transition 설정해준 모습

도망가면 다시 움직여야 하니까!

 

 

 

Parameter 등록.

ai 라면 trigger로 만들자!

 

Attack 신호
Move 신호

 

 

근데 이렇게 해주면, 와서 바로 공격하지 않는다.!

currentTime 의 모습

그럼 여기서 currentTime 의 값을 attackDelayTime 보다 크게 해주면 되지않을까?

 

이게 공격을 하고싶은데, 우리는 공격 DelayTIme 도 필요함. 

그러기 위해서는, 애니메이션을 루프로 해도 안된다. 시간이 필요하니까.

Sub State Machine 을 만들자!

 

대기 -> 이동 -> 공격 이렇게 하고

 

공격 의 SSm 따로

 

 

 

 

공격하다가 멈추고 AttackDelay 를 갈때는 공격을 다 끝내고 해야되니까 

여기에다가 다 집어넣자! 

SubStateMachine 을 만들어준 모습

근데 여기서 어떤 문제가 있지만 내일 할 예정!

 

 

(참고) 우리가 프로젝트를 할 때 마음가짐 및 팁

더보기

우리가 생각을 할 수 있게 만들어놓는게 가장 중요함

이렇게 하고싶다. 이런것. 코루틴 문법 남발하는게 아니라, 내가 하고싶은걸 한글로 쓸 수 있느냐가 중요함

 

그다음에 업데이트상에서 코드를 이거다음에 이거지, 이거다음에 이거지. 이런식으로

작성할 때 꼭 시간의 순서로 써보는 연습을 해야 함!

 

여기서 팁!! 애매하다 싶으면 함수로 다 쪼개자!