오늘도 즐거운 유니티 공부 시간이다 젠장
뭔가 하는건 더럽게 많은데 하는게 없는것 같은 이 느낌
일단 계속 하다보면 끝날거라 생각한다
대충 이 코드를 씹고뜯고 맛봐야 한다
대충 시작의 float 변수들은 이동, 회전 속도를 결정한다
start()에서는 자신 오브젝트의 charactercontroller 컴포넌트를 가져온다
그뒤 update()에서 나오는 코드가 이동의 핵심이 된다
이 코드에서 핵심은 GetAxis부분인데 키가 입력될시 x, z값이 변화하며 실시간으로 Vector3값이 변화하며 방향이 direction값이 변화하게 된다
참고로 Horizontal이 좌우, Vertical이 상하이다.
그후, if문을 만나는데 처음보는 부분이 있다
이건 뭘까? 진짜 모름
우리의 cgpt선생님의 대답이다. 벡터값의 제곱값을 return해주는 것 같다.
이말인 즉슨, if문의 안쪽의 의미는
플레이어가 이동하려 하는가?(키를 누르면 무조건 벡터의 제곱값은 0을 넘음)
를 의미하는 것 같다
그뒤, Slerp를 사용하여 자연스러운 방향 전환을 구현한다
즉, Slerp는 선형 보간을 통해 부드러운 회전을 만들어낸다
마지막에 characterController의 move를 사용하여 플레이어 오브젝트를 이동시킨다
이제 여기에 모션을 넣어보자
애니메이션 폴더를 만들고 컨트롤러를 만든다
이 애니메이터를 플레이어의 모델에 넣어준다
이제 애니메이션을 넣어보자
빈 애니메이터 창이다. 우선 idle 상태부터 만들어 주려 한다
필요한 애니메이션을 찾아서 넣어준다
이제 Tshape가 아니라 idle 모션을 취하고 있음을 확인할 수 있다
이제 여기에 달리기 모션을 넣어보자
애니메이터에 애니메이션을 넣더라도, 단순히 넣는것 만으로는 적용되지 않는다. 이는 3D든 2D이든 같은 영역이기 때문에, 스크립트를 통해서 애니메이션을 수정해 주어야 한다
그렇기에 애니메이터에 파라미터를 넣어서 애니메이션을 변경하여 준다
여기에서 추가된 코드는
이다
setfloat를 이용하여 캐릭터가 이동하고 있는지 확인하는 것 이다.
근데 magnitude키워드는 처음 보는 것 같다
벡터의 길이를 나타내는 속성이라고 한다. charactercontroller.velocity는 vector값이기에 크기를 표현하는 magnitude키워드를 사용할 수 있는 것 같다
즉, 플레이어가 이동 상태이면 Speed 파라미터는 무조건 0이 아니게 되는 것 이다.
이에 맞추어 애니메이터의 파라미터를 넣어서 애니메이션을 넣어준다
....근데 책에서 뭔가 이상하게 알려줬는게 있다
내가 해석을 잘못한건가?
구조가 이렇게 되어 있으면 animator가 player에도 붙어있고 자식 프리팹에도 붙어있는 대참사가 나타나는데, 어쩌라는걸까
일단 내가 아는 지식으로는 player에 모델과 애니메이터를 넣는 방식으로 구성하는게 맞아서 이렇게 하는데, 책에는 유니티짱에 넣으라는것 같다...
근데 이렇게 하면 굳이 프리팹을 왜???
뭐지??
일단 잘 되니까 그러려니 하고 넘어가자
원래 코딩은 이런것....
'공부 > 유니티' 카테고리의 다른 글
유니티 문제들(움직임, 카메라, 맵핑) - 캐릭터 움직임, 카메라 무빙, 대각선 이동 보정 (1) | 2024.09.27 |
---|---|
유니티3D 공부(Part 1 - 5, Part 1 END) 씬 전환하기, 타이틀 화면, 승리, 패배 씬 추가 (0) | 2024.09.26 |
유니티3D 공부(Part 1-4) 적 만들기, 네이게이션 메쉬(NavMesh), 플레이어 추적 (1) | 2024.09.25 |
유니티3D 공부(Part 1-3) 동전 만들기(팩맨 만들기) (0) | 2024.09.25 |
유니티3D 공부(Part 1-1) 플레이어 움직이기 (0) | 2024.09.24 |