블로그 이미지
한국IT전문학교 게임프로그래밍 2018년 졸업생 / 배우고 익히고 정리하는 곳 무명의 공룡

카테고리

분류 전체보기 (133)
Unity (5)
AR / VR (8)
홀로렌즈2 (2)
Unity 3D 액션 게임 제작 (2)
정리 (9)
소소한 배움 (6)
그외 (7)
비공개 (56)
--이전 프로젝트들-- (0)
Tree-sha (팀 3D) (9)
Icicle Game (2D) (19)
MMD RPG (3D) (9)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

드디어 하나 정리가 끝났습니다.


필요없는건 다 지우고 인스펙터 창에 보이는 것도 깔끔하게 바꾸고 주석도 꽉꽉 채웠습니다.


여기서 설명하는 것은 일단 Tree-Sha 게임에 썼던 코드를 정리만 한 것이라 기본적으로 CharactorController 컴포넌트에만 반응하며 거기서도 'Player' 라는 오브젝트명을 가진 오브젝트에만 작용합니다. 하지만 이 부분은 필요하다면 사용자가 직접 코드를 수정하여 찾는 오브젝트명을 바꾸든 public 으로 오브젝트를 받든 하여 다른 것도 인식하게 만들 수 있습니다.


또한 같은 이유로 Rigidbody 컴포넌트가 올라타도 인식하지 않습니다. Rigidbody가 인식하려면 상호 Rigidbody여야 하며 velocity나 Addforce같이 물리엔진을 통한 움직임에만 탑승한 Rigidbody 오브젝트도 반응합니다. 여기서는 MoveTowards를 사용하여 오브젝트 좌표변경 방식으로 움직이기에 Rigidbody 전용으로 만들기 위해선 변경해야 할 부분이 다소 있으므로 여기선 다루지 않겠습니다.



그리고 그냥 움직이는 기능 자체만을 원한다면 이 자체로 사용하셔도 됩니다. 게임에서 활용하기 편한 기능들이 다소 포함되어 있습니다.




먼저 인스펙터 창부터 보여드리고 설명 들어가겠습니다.



위 이미지처럼 Awake Start의 값에 따라 표시되는 변수가 다릅니다.


커스텀 에디터를 활용했는데 이것에 대한 설명은 여기서 하지 않겠습니다.


Awake Start는 게임시작과 동시에 자동으로 움직이게 할 것인지를 묻는 것입니다.


자동으로 움직이는 것은 언제 플레이어가 그쪽에 도달 할 지 알 수 없는데 목적지에 도달했다고 사라지면 안되기 때문에 기본적으로 왕복 기능을 수행하며 그렇기에 삭제 대기 시간과 재생성 대기 시간은 필요 없기에 보여줄 필요가 없습니다.


반대로 자동이 아니라면 플레이어가 올라 타야만 출발하게 됩니다. 이 경우 보통 타자마자 출발해야 하기에 시작 대기 시간은 필요가 없다고 판단하여 보이지 않게 했습니다.


이렇게 현재 사용하고자 하는 부분만을 보여주어 레벨디자인의 편의성을 추구하였습니다.



Debug Line의 경우 true일 시 아래 경유 지점을 토대로 경로를 보여줍니다.


이런식으로 보다 직관적으로 움직이는 경로를 알 수 있습니다.



Relative Move Point의 경우 이름 그대로 상대적입니다. 원래는 절대좌표였는데 활용하기 너무 어려워 완전 상대좌표로 만들었습니다.



인스펙터 창에 적힌대로 경로를 구성하면 위 이미지와 같은 형태를 띄게 됩니다. 이전좌표를 기준으로 계속 상대적으로 목적지가 찍히게 됩니다.


또한 오브젝트로부터도 상대적이라 오브젝트의 방향에도 영향을 받습니다.


이러한 기능 덕분에 3D 환경에서도 보다 쉽게 활용이 가능합니다.




그외 Speed는 이동속도, Wait Time은 경유지마다의 대기시간을 뜻합니다.



jump Inertia는 현재 오브젝트의 이동속도를 플레이어에 반영하는 것입니다.


단, y값만 적용되며 옆으로 이동하는 것에 대해선 관성이 붙지 않습니다.


이해를 돕기 위한 gif입니다.



jump Inertia를 적용하지 않은 상태입니다.


Tree-Sha 게임에선 적용하지 않았기 때문에 이와 같습니다.


처음에서 볼 수 있듯 실제 점프력은 거의 자신의 몸의 3배까지 뛰지만 올라가고 있는 발판에서는 점프력이 줄어든 것 마냥 낮게 점프하는 것처럼 보입니다.


실제 점프력은 동일하지만 땅이 올라와서 그렇게 보이는 것인데요.




jump Inertia를 적용한 상태입니다.


위와 다르게 땅이 올라가고 있다면 그만큼 점프력을 더해줘 플레이어 입장에서는 항상 동일한 점프력을 가지는 듯한 느낌을 주게 합니다.


아래로 내려가는 땅에 대해서도 똑같이 적용됩니다.


단, 이 기능은 Player 스크립트에 직접 가감해주는 것이기에 이 게임에서 사용하고 있는 Player 스크립트가 아니라면 아무나 당장은 활용할 수 없습니다. 물론 방식은 간단하므로 사용자의 역량에 따라선 활용 가능합니다.




인스펙터 창으로 알 수 있는 대략적인 기능들은 이와 같으며 GIF를 첨부하지 않은 기능들은 글만으로도 충분히 이해가 가는 부분이라고 생각했습니다.



다음은 코드를 보여드리겠습니다.


꽤 길어서 접어놓았습니다.



가능한 모든 부분에 주석을 상세히 달아놓았습니다.


아래는 커스텀 에디터 코드입니다.



커스텀 에디터에 관한 자세한 설명은 다른 글에 적도록 하겠습니다.


단, 하나 알아두셔야 하는게 커스텀 에디터는 사용하려면 적용시킬 스크립트와 동일 폴더에 Editor라는 폴더를 만들고 그 안에 넣어놔야 적용된다고 합니다.




코드들이 어떤 기능을 하는지는 주석만으로도 충분히 알 수 있으리라 생각되어 여기에 추가로 다루진 않겠습니다.




이 코드는 추후에 쓸 플레이어 캐릭터, 커스텀 에디터에 관한 정리 글을 같이 읽으면 더 좋습니다. 

Posted by 무명의 공룡
, |