블로그 이미지
한국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.9
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

공지사항

Tree-Sha 게임의 캐릭터가 지니고 있는 스크립트에 대해



이 게임은 빙글빙글 돌고 3D 환경이긴 하지만 어쨌든 기본 이동은 2D 횡스크롤 방식을 사용하고 있습니다.


실질적으로 유저가 느끼는 것은 좌우 이동과 점프와 낙하 밖에 없는데요.


여기서는 이 캐릭터가 어떤 코드를 지니고 있어서 어떻게 움직이는지에 대해 적겠습니다.


Rigidbody 컴포넌트를 사용하고 있지 않기에 직접 점프, 중력, 관성 등 필요한건 수제작 해야하기에 다소 복잡할 수 있습니다.



설명에 앞서 이 코드는 실제로 Tree-Sha 게임 캐릭터가 쓰는 코드랑은 다릅니다.


이전 글들과 마찬가지로 최대한 정리하고 주석을 달아놓은 것도 있지만 다른 기믹과의 상호작용 요소들을 대부분 뺐습니다.


슬라이드. 이 게임에선 마법이라는 설정의 요소 또한 뺐습니다. 


가능하면 이 캐릭터 자체만을 설명하고 싶었기 때문이기도 하고 다른 기믹들을 모두 올리지는 못 할 것이라 생각했기 때문입니다.


또한 스크립트명도 'Player'에서 'PlayerRepair'로 바꿨기 때문에 아래글의 움직이는 땅 코드와 연결하려면 스크립트명을 바꿀 필요가 있습니다. 둘 중 아무거나 상관 없습니다.


그리고 이 캐릭터가 지닌 사운드(발소리 등), 애니매이션, 모델링 등은 제가 만든 것이 아니기 때문에 여기에 올릴 수 없는 점 양해 바랍니다.


결론적으로 이 코드만으론 실제로 적용하면 수많은 에러를 내뿜을 것입니다. 모델링도, 애니매이션도, 소리도 없으니까요. 


아마 아래에 올릴 Heirarchy 형태를 맞추고 없는 부분은 전부 삭제하면 움직임 관련은 문제 없이 될 수도 있습니다만



꽤 오랫동안 CharacterController에 대해 공부해봤지만 대부분을 직접 구현해야 하기에 애초에 호환성을 염두하고 코드를 짜지 않으면 다용도 활용은 어려울 거 같습니다.


하지만 실제로 이 코드를 그대로 쓰실 분은 없다고 생각합니다.


만약 이 코드를 사용할 일이 있다면 그대로 복사하지 마시고 필요한 부분이 어떻게 생겨서 작동하는지만 봐주시면 감사하겠습니다. 






   


캐릭터입니다.


GroundTriggerCheck는 왼쪽에 보면 발 부분에 있는 구형 콜라이더입니다.


움직이는 땅이나 미끄러운 이끼 등에 올라 탔는지를 확인하는 용도입니다.


PlayerModel은 캐릭터의 모델링과 애니매이터 컴포넌트가 담겨있습니다.


CameraPivot은 기존에 쓰던 카메라는 다른 인원이 만든 것이기에 임시로 사용하기 위해 만든 것입니다.


이 피봇은 보스전 때 카메라를 반대로 돌리려고 놔둔 것입니다. 


카메라 내부엔 버튼들이 있는데 저 버튼들은 Canvas를 통한 것이 아닌 카메라에 직접 붙어있는 스티커 같은 녀석입니다.


UGUI 버튼은 눌렀다 때야 인식이 이루어져서 사용하기 어려워 저렇게 카메라에 붙인 다음 콜라이더를 붙이고 레이를 쏘는 방식을 적용하였습니다.

UGUI로도 이와 같은 기능을 구현 할 수 있습니다. 이 당시에는 몰라서 이렇게 했는데 이럴 필요가 없었습니다..


이런식으로 버튼들이 카메라에 붙어 공중에 떠있습니다.



다음은 인스펙터 창입니다.



최대한 직관적으로 이름들을 지었습니다.


중력의 경우 기본은 9.81입니다만 실제로 게임에 적용하니 다들 붕 뜨는 느낌이라더군요.


아마 게임이란게 전반적으로 템포가 빠른 편인데 중력만 현실 고증 반영하니 느리게 느껴지는 모양입니다.


그래서 중력을 다소 높이고 그에 맞춰 점프력도 늘려줍니다.



Cirlce Move의 경우 키면 위의 센터를 기준으로 반지름 거리만큼을 돕니다.


그래서 특정 구간에만 임시로 센터의 위치를 바꾸고 반지름을 줄이면


이런 연출을 만들 수 있습니다.



isBoss의 경우 원래는 보스씬 전용이라 저런 이름으로 해뒀는데 true가 되면 카메라와 이동 방향이 반전 됩니다.


맵은 임시로 만든겁니다. 불은.. 신경 안 쓰셔도 됩니다.


소리는 원하는 소리를 넣으면 됩니다.


현재 들어있는 소리는 발 간격에 맞춰 소리가 나도록 사운드가 설정되어있습니다.


참고로 일반 뛰는 소리, 박스 밀 때 소리, 점프 소리 전부 사실 동일합니다.


원래 뛰는 소리만 줬는데 박스 밀 때 어색해서 제가 임의로 그 때만 0.75배로 재생되게 했더니 딱 좋아서 쓰기로 했고 점프 또한 1.5배로 재생시켰더니 딱 좋아서 쓰기로 했습니다. 다만 점프의 경우 즉시 한 번만 소리나야 하기에 사운드를 잘라서 따로 만들었습니다.




일단 인스펙터 창으로 알 수 있는 부분은 이정도이니 다음은 코드로 설명하겠습니다.



여태까지 코드들 보면 제가 public을 이용해서 다른 스크립트가 영향력을 행사 할 수 있도록 하는 경우가 많은데 사양면에서 저게 제일 이득이라는 소리를 어디선가 들어서 그렇습니다.


아무튼 이 코드를 통해 알 수 있는 것은 크게 다음과 같습니다.


1. 키보드, 마우스, 모바일 터치 동시 인식 가능(모바일 이외는 사실상 테스트용. 매번 빌드하기엔 너무 오래 걸리므로)


2. 해당 기능에 대응하는 버튼 입력시 UI이미지 변경


3. 게임적 허용 수준의 관성 구현


4. Rigidbody 박스를 밀 수 있다.


정도겠네요.


근데 die라는 bool값이 있는데 저건 지금 각종 상호작용 요소를 다 삭제했더니 HP도 필요가 없어져서 사실상 죽을 일이 없어 die가 true가 될 일이 없습니다.


그냥 저런식으로 죽으면 모든게 정지한다 정도만 아시면 될거 같습니다.




최대한 코드를 간결하게 만들고, 삭제하고, 주석달고 했는데 그래도 여전히 깔끔하다는 느낌은 들지 않네요.


이전 글들은 그래도 꽤 만족하게 나왔는데...


역시 코드는 처음부터 잘 짜야하는데.... 더 공부해야겠습니다.

Posted by 무명의 공룡
, |