본문 바로가기
학원

14일차-2024-08-19

by 하타라시 2024. 8. 19.

MonoBehaviour를 상속받은 클래스는 GameObject의 컴포넌트에 들어가는 식으로 활용됩니다. 

유니티 C#) MonoBehavior(모노비헤이비어) 정리 :: 나도 개발 블로그 해볼래 (tistory.com)

 

추가로 직렬화와 역직렬화에 대한 개념입니다.

직렬화는 데이터를 전송가능한 형태로 바궈줍니다.

역직렬화는 전송가능한 형태로 바뀐 데이터를 다시 정상적인 데이터로 바꿉니다.

즉 인스펙터 창에서 접근하는 데이터들은 직렬화가 되어있는 것입니다.

 

[SerializeField]가 붙은 멤버들은 직렬화가 가능합니다.

그러나 다차원 배열같이 특별한 것은 방법이 필요합니다.

SerializeField의 개념 [Unity] (tistory.com)

 

우선 믹사모에서 캐릭터를 다운 받습니다.

Mixamo

 

다운로드를 누르면 해당 창이 나오는데 저희는 Unity에 쓰기 때문에 FBX For Unity로 다운받습니다.

 

Rig -> Humanoid > Apply하면은 아바타가 생깁니다!

 

Extract Textures, Extract  Materials 을 순서대로 클릭하고 폴더 선택해주면 알아서  매핑되는 모습입니다.

 

Mesh 정보입니다.

Vertices값을 보면 구성요소가 Position , Normal , Tangent , Color , UV0 총 5개로 이루어져있는데,

모든 요소를 합치면 용량이 장난아니기 때문에,,,, 로우폴리라는 것이 있다고 생각합니다.

 

비교를 위한 예시는 밑에 있습니다.

메시 에셋 - Unity 매뉴얼 (unity3d.com)

Head 한 부분인데도, Vertices가 27261이 나와버리니.. 확실히 차이가 있습니다.

 

 

이 친구의 구조를 보면 Warrok W Kumiawan 밑에 Hips라는 영역이 있습니다.

이는 보통 몸의 중간지점이라고 이해하였습니다. 그래서 Hips영역을 중심으로 위 혹은 아래로 뻗어가는 형태가 되어있습니다.

결국 Warrok W Kumiawan의 위치를 기준으로 하위 자식들은 상대적인 위치를 지닌다는 점입니다!!!

Character Rigging in 60 Seconds #short (youtube.com)

해당 영상을 통해서도 Bones을 확인할 수 있습니다.

 

 

아까처럼 선택하고 다운로드해서 Format은 동일하게하며,

모델과 애니메이션을 분리할 것이기 때문에, Without Skin을 해줍니다.

 

Sword And Shield Attack이라는 친구도 동일한 과정을 다운로드 해보겠습니다.

 

다운받은 애니메이션의 정보가 이런식으로 들어가있습니다.

 

애니메이션의 Rig정보를 해당 방식으로 해줘야합니다.

Source에 해당 정보를 넣는게 캐릭터의 정보를 넣는 과정입니다.

 

다음으로 Animation으로 이동해서 Root Transform을 넣어줍니다. 2 애니메이션 모두 동일합니다.

 

그리고 Idle의 경우 무한반복해야하므로 Loop Time도 체크해줍니다.

 

 

이제 애니메이터를 만들어서 캐릭터에 Idle을 넣어보겠습니다.

 

그리고 애니메이터를 해당 모델에게 등록해주고나서 이제 메카님 설정 차례입니다.

아까 다운로드 했던 애니메이션 2개를 넣고, Make Triansition을 통해서 Idle <->Attack이 상호작용 가능하도록 하였습니다.

 

Trigger을 추가하여 해당 공격이 눌릴 경우 실행되도록 할 것입니다.

이 때 Float는 실수값,  Int는 정수값 , Bool은 True / False만 가능합니다. Trigger는 누르는 행위입니다.

 

Entry는 시작하는 위치이고,

Exit는 종료입니다. 끝나고나면 Entry로 이동됩니다.

Transition은 화살표입니다. 흐름 같은 느낌입니다.

 

파란색이 누른 것입니다. 보면은 Has Exit Time이 체크되어있는데, 해당 기능이 선택되어 있다면, 행동이 끝난 이후에 다음 애니메이션으로 이동됩니다. 

Condition은 조건 부분입니다.

 

그래서 Has Exit Time을 풀고, IsAttack이라는 조건을 넣었습니다.

 

Attack에서 Idle로 돌아오는 과정에는 Has Exit Time이 체크되어야 하므로 해당 형태로 하였습니다.

 

공격 이후 Idle로 돌아오는 모습입니다.

 

해당 스크립트를 캐릭터에 넣어보겠습니다.

 

as "타입"을 통해 형 변환해주지 않으면 사용불가능합니다.

그러나 string으로 하는건 비효율적이므로 처음꺼 혹은 다음거가 낫다고 말씀주셨습니다.

 

이제 Awake에서 animator에 컴포넌트를 가져왔기때문에 사용가능합니다.

SetTrigger를 통해 IsAttack이라는 트리거를 누른 상태로 만듭니다.

이제 스페이스를 누르면 값이 변동될 것입니다.

 

실제로 변동된 모습입니다.

 

마지막으로 이펙트를 프리팹으로 만들었다고 가정할때를 해보겠습니다.

 

 

파티클을 만들 수 있습니다.

+를 누르면 확장됩니다.

 

추가로 Stop Action >> Destory를 하게되면은 실행이 끝나고 나서 알아서 파괴됩니다.

 

Looping을 키면은 무한반복이 되므로, 체크를 끄고, 색깔을 각각 빨강과 초록을 넣었습니다.

그리고 Start Lifetime을 통해 지속시간이 1초로 세팅됩니다.

초록쪽은 Start Delay를 통해 1초후 실행이 되기때문에 빨강이 1초 , 초록이1초 나오게 될것입니다.

 

프로젝트 폴더에 드래그해서 프리팹화 시켰다고 가정하겠습니다.

이것을 해제 가능합니다.

 

 

프리팹을 만드는 방법입니다.

먼저 GameObject , Transform순으로 넣는 방법입니다.

그러면 생성된 이펙트의 부모는 해당 스크립트를 실행중인 친구에 들어갈 것입니다.

 

다음으로는 GameObject , Vector3 , Quaternion을 넣는 것입니다.

즉 생성할 것 , 위치 , 각도입니다. 그러나 회전의 경우는 좀 많이 특별합니다.

짐벌락 현상때문입니다.

[Unity] 트랜스폼(Transform) 회전(Rotation) (tistory.com)

그러므로 Qunaterinon을 활용한다고 이해하고 있습니다.

 

결국 두번째 경우는 초기 위치에만 생성이 되므로, 캐릭터를 따라다니지 않고,

처음 꺼는 캐릭터를 따라 다닐 것입니다.

 

 

 

 

 

Attack애니메이션으로 가서 Events탭을 열고, 마킹추가 같이 보이는걸 누르면 이벤트 사용이 가능한데,

 

Function자리에 아까 추가한 MakeCube를 넣습니다. Object에 원본프리팹을 넣어줍니다.

원본 프리팹을 넣는 이유는 아직 잘 이해하지 못했습니다,,

 

그러면 원하는 시점에서 이펙트가 나오게됩니다.

 

 

 

감사합니다.

 

 

'학원' 카테고리의 다른 글

16일차-2024-08-21  (0) 2024.08.21
15일차 - 2024-08-20  (0) 2024.08.20
13일차 - 2024-08-18  (0) 2024.08.16
12일차 - 2024-08-17  (0) 2024.08.16
11일차 - 2024-08-16  (0) 2024.08.16