목차
(참고) 오늘의 중요한 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
그러면 어떤 경우에 갈리는 걸까?
뼈대를 스켈레톤이라고 함.
이런 연결 방식을 Rig 이라고 함.
Rigging 한다 => 어떤 형태로 bone 을 붙이는걸 한다.
이런 Rig 의 방식에 따라 갈리게 된다.
인간형 (Humanoid) => T- pose , Bone 이 15개가 들어감.
이것만 Retargetting 을 할 수 잇다.
나머지는 Generic!
여기서 Tip!
팔을 굽히고 펴는것만 해도 근육이 움직이는것 까지 구사하게 할 수 있는건,
Skinning 작업 덕분임
Skinned Mesh Renderer 에 Skinning 작업을 쓸 수 있음!
- V.S
Enemy 에 Animation 적용하기
이제 Unity 에서 살펴보자!
Asset Store 에서 다운 받아 보자
3D => Animation => Basic Motions Free
캐릭터도 다운받자.
Adventure Character
FBX 를 최적화해서 사용 할때는 전체를 다 긁어서 가져온다.
이런거는 표준포멧이라서 다른데서도 가져올 수 있다.
Light Map 에 적용이 안되는 애들
Light Map UV 작업을 안해서 가져온 애들은 적용이 안됨.
그럴때, Generate Lightmap UVs 를 체크하고 Apply 함
=> 유니티 에서 자동적으로 도와줌
Rig
Unity 에서는 T pose
Unreal 에서는 A pose 를 쓴다고함!
Rig 를 Legacy 로 해놓고 프리팹 보면
이 Animator 컴포넌트가 붙여져있음. 쓰지도 않는 컴포넌트가 벽같은데 다 있으면 성능이 안좋아짐!
Humanoid 라는건 Ritargetting 하겠다는 말과도 거의 같다.
여기서 Configuration
아트들에게 가이드를 해주기 위해 우리도 알자,
우리가 Reset 을 눌러놓고
그다음 ENforce T pose 누르면?
이 15개의 본이 있으면 Humanoid 로 쓸 수 있음
Mapping 말고 Muscles & Settings 를 보면
제약을 주는 애들을 컨트롤 할 수 있음
이것들 조절하면 움직이는걸 볼 수 있음
Done 하면
Enemy 한테 넣고
캡슐은 이제 지워주자!
이제 Animation 을 제어하기 위해서 V.S 를 제어함
유니티에서 Mecanim 이 Retargtting 을 위해서 Avatar 를 제공
V.S 에서 FSM 을 제공함
내 시스템에 Unity 를 맞춰야지 , 지금 Unity 시스템에 우리가 조작하려고 하니까 막 조금씩 코드도 다르게 해보고 막 이러고 있음. 이건 형편없는 코드임. 내 시스템에 이 시스템을 맞춰놓게 해야함.
그것들을 위해 Unity 에서 제공 하는게 Aniamtor 컨트롤러임!
만든 Animator Controller 를 켜보면
처음으로 실행된 state = Defalt 스테이트임
얘는 실행할게 없어서 저렇게 나옴
Humanoid 만 Retargetting 이 된다고 했는데, 저렇게 나오면 어떤거 하나가 Generic 이라는 얘기임
거의 90% 이상
이전에는 원래 하나씩 다 만들어줬는데, Layer 를 해놨기 때문에 이제는 안그래도 됨
아바타 캐릭터가 다양한데, 표정을 다 같이 지을 수 있게 하는것이 이런 느낌으로 하는 것이다.
Humanoid => Retargetting
트랜지션이 생기려면 어떠한 값(조건)이 생겨야함,
Parameters 가 조건생성할 때 씀
노란색 블럭 선택하고, Inspector 창에서 Idle 로 바꿈
혼자 Move 로 바뀌고 이상한데로 도망감
지가 스스로 감,
자동으로 가지않고 우리의 신호에 따라서 움직이게 제어할 거임!
결국에 transition 을 제어 할거임 그걸 위해 parameter 를 작성한다
AI 쓰면 Trigger 를 많이 썼을 거임!
AI 만들 때는, 우리가 FSM 만들고 , 이벤트를 전달 해주는거임! 신호만 전달해주는거임!
근데 int 는 생성될 떄가 있음.
Idle 중에도 다양한 Idle 이 있을 때 int 값으로 함. 근데 이건 거의 player 고
AI 할 때는 왠만하면 FSM 우리가 짜놓고 Trigger 만 써서 깔끔하게 하자!
이게 체크되어있으면 자동으로 다음 애니메이션이 재생됨
2D 에서는 블렌딩 못함 의미가 없음
본이 있어야만 블렌딩 해줌 Unity 가
Conditions 에 추가한다.
이제 코드로 제어해보자!
선언하고 이제 값을 가져올건데 Enemy 가 아니라 그 자식한테 가져올거임! 자식한테 있으니까
그리고 플레이해보면 이제 Move 될 때 달리기는 하는데 이상한데로 도망감.. ㅋㅋ
그러니까 우리가 제어할 떄는 그냥 자리에서 움직이는것만 해야함
그러면 애니메이션 자체가 움직이는건 언제 사용해? Cinemachine 같은 걸 찍을 때 그 느낌을 그대로 쓰는거임.
이거 체크하고 ,Apply 를 누르면
이제 제자리에서 뛴다!!
근데 이게 애니메이션이 별로 안좋아서, 좌우로 흔들리면서 뛰네,. ㅎㅎ
Mixamo 사용 해보자!
로그인 하고
Rig 에 Humanoid 로 바꿈!
Animation 에 다 체크
다른 애로 가져오자...
위에서 한것 처럼
Zombie Run 을 가져와서, Rig 에서 Humanoid 로 만들고,
다 체크함!
Enemy Attack() Asset
도망가면 다시 움직여야 하니까!
Parameter 등록.
근데 이렇게 해주면, 와서 바로 공격하지 않는다.!
그럼 여기서 currentTime 의 값을 attackDelayTime 보다 크게 해주면 되지않을까?
이게 공격을 하고싶은데, 우리는 공격 DelayTIme 도 필요함.
그러기 위해서는, 애니메이션을 루프로 해도 안된다. 시간이 필요하니까.
Sub State Machine 을 만들자!
대기 -> 이동 -> 공격 이렇게 하고
공격 의 SSm 따로
공격하다가 멈추고 AttackDelay 를 갈때는 공격을 다 끝내고 해야되니까
여기에다가 다 집어넣자!
근데 여기서 어떤 문제가 있지만 내일 할 예정!
(참고) 우리가 프로젝트를 할 때 마음가짐 및 팁
우리가 생각을 할 수 있게 만들어놓는게 가장 중요함
이렇게 하고싶다. 이런것. 코루틴 문법 남발하는게 아니라, 내가 하고싶은걸 한글로 쓸 수 있느냐가 중요함
그다음에 업데이트상에서 코드를 이거다음에 이거지, 이거다음에 이거지. 이런식으로
작성할 때 꼭 시간의 순서로 써보는 연습을 해야 함!
여기서 팁!! 애매하다 싶으면 함수로 다 쪼개자!
'3D_FPS' 카테고리의 다른 글
08_11 (코루틴의 전반적인 설명, Damage() 코루틴으로 구현) (0) | 2022.08.12 |
---|---|
08_09 (주석처리 설정, 공격 이벤트,피격,Die 애니메이션 구현 ) (0) | 2022.08.09 |
08_05 Enemy_(Move,Attack,Die) (0) | 2022.08.05 |
08_04 (Enemy 생성, FSM 구현, Idle 구현) (0) | 2022.08.04 |
(08_03) (0) | 2022.08.03 |