목록전체 글 (112)
메피카타츠의 블로그

오늘 구현한 내용은 목표로 했던 PlayerCharacter의 움직임과 카메라를 구현했다. 처음에는 너무 적나? 내일 할 것도 미리 해야지~ 하는 생각을 하고 있었는데, 예상치 못한 문제들을 만나서 생각보다 시간이 굉장히 오래 소요되었다. 첫 번째 문제는 애니메이션과 Character Controller와 관련된 문제였다. 춤을 추는 애니메이션은 Mixamo에 있는 애니메이션을 가져왔는데 애니메이션의 종료 시점에서 Idle 모션으로 돌아올 때, Rotation이 변경되지 않기 때문에 애니메이션 종류에 따라 다르지만 약간씩 캐릭터가 회전하는 이슈가 있었다. 이를 맞춰주기 위해 해당 애니메이션을 시작할 때 캐릭터의 Rotation을 저장하고, 끝나면 원래대로 되돌리는 작업을 추가로 해주었다. 이외에도 비슷한..
오늘부터는 여태까지 배운 내용을 토대로 실제 3D RPG를 개발해보려고 한다. 우선은 RPG에서 사용되는 기본적인 기능들을 직접 구현해보면서 배운 내용들을 복습하며 3D 개발을 몸에 익히는 것이 목표이다. 루나 모바일이라는 게임의 기능들을 분석해서 일부 기능들을 구현해보기로 했다. 아래는 구현할 기능들을 정리한 내용이다. ========================================== [필요한 에셋] 공격모션 3+ 이상, 대기 모션 2개 정도는 있는 플레이어 캐릭터 에셋. 플레이어 캐릭터, 방어구는 바꿀 수 있으면 좋고, 무기나 방패 정도는 바뀌었으면 좋겠지만 불가능해도 괜찮을 듯. 아이템, 포션 등 각종 아이콘은 이미지만 있으면 되니 따로 구해오면 될듯 대기 모션 + 이동 + 공격 모션 +..

오늘은 친구와 약속이 있어서 합정 애니플러스와 홍대 애니메이트 등을 방문했다. 애니플러스 합정점의 블루 아카이브 스토어 입장 예약이 토요일, 일요일이라 일요일로 예약을 해서 다녀왔다. 다른 친구의 부탁을 받아서 장패드를 하나 샀고, 이즈나 아크릴 스탠드와 이즈나 멀티 클리너를 구매했다. 봉투에 담긴 랜덤 클리어 파일과 은박에 싸인 랜덤 캔뱃지도 구입했는데, 원하던 캐릭터가 나오지는 않았다. 이외에도 아루나 게임개발부 학생들 등 마음에 든 다른 굿즈들도 많았지만, 샬레스토어도 오픈했고 다음 달에 온리전도 있기 때문에 금액이 약간 부담이 되어서 가장 좋아하는 캐릭터 중 하나인 이즈나 굿즈만 두 개 구입했다. 오른쪽 아래에 있는 것은 2만원 당 1장씩 랜덤으로 증정되는 미니 브로마이드라고 하는데, 말이 브로마..
오늘은 인게임 UI 설정과 다이얼로그, 퀘스트 등의 대화 시스템, 문 함정 등의 레벨 디자인에 대해 배웠다. 그리 새롭거나 어려운 내용은 아니었다. 다이얼로그는 직접 만들어보기도 했었고, UI에서 작동하는 것이다보니 구현이 비슷비슷했다. 다만, 다이얼로그를 저장하고 불러오는 방식에 약간 차이가 있었다. 퀘스트는 아이템과 비슷하게 구현이 되었는데, 이전에 구현했던 기능을 활용해서 구현했기 때문에 그렇게 어렵지는 않은 내용이었다. 문과 함정도 상대적으로 간단하게 구현이 가능했고, 전부 이전에 다뤘던 내용들을 활용한 것이라 오늘 내용들은 전체적으로 어렵지 않은 내용이었다. 때문에 오늘은 작성한 스크립트들을 간단하게 정리하는 시간이 될 것 같다. AttributeType: 능력치들의 타입을 저장한 enum이다...
어제와 오늘은 인벤토리와 아이템과 관련된 기능을 구현했다. 이전에 간단하게 RPG를 만들어 본 경험이 있어서 어렵지 않게 구현할 수 있을 것이라고 생각했는데, 인벤토리와 아이템도 제대로 된 구조를 짜기 위해서는 꽤나 많은 노력이 필요했다. 거기다 3D게임이다보니, 모든 게임이 그런 것은 아니지만 아이템을 장착할 때마다 캐릭터의 모델링을 바꿔주는 등의 작업이 필요했기 때문에 예상했던 것보다 굉장히 어려웠다. 모델링 관련 지식이 부족하기 때문인지 저번에 구현했던 전투 시스템을 구현하는 것보다 어려웠던 것 같다. 오늘은 어쩌다보니 시간도 꽤나 늦어져서... 이번에는 그림 없이 글로만 정리해야할 것 같다. 먼저 작성한 스크립트 17개에 대한 정리부터 시작하겠다. ItemObjectDatabase: ItemObj..

어제와 오늘은 전투를 할 때 데미지를 주고 받는 기능이나, 근접 공격, 원거리 공격, UI 구성 등 전투 시스템을 구현했다. 강의가 기존에 구현했던 기능이 있는 프로젝트에서 코드를 새로 작성하고, 실제 기능은 기존 코드를 통해서 보여주기 때문에 스크립트들의 의존 관계나 작동 방식을 확실하게 파악하기 어려워 오늘 강의까지 총 8개의 강의를 전부 듣고 요약하기로 하였다. 추가로 작성하거나 수정한 스크립트가 약 20개에 달하기 때문에 상당히 복잡했다. 정리하는 데에도 아마 시간이 꽤나 걸릴 것 같다. 먼저 저번에 작성했던 부분까지의 그림을 살펴보겠다. MoveToWaypoint라는 새로운 State가 추가되었는데, 그림에는 그려져있지 않지만, FieldOfView라는 스크립트에서 시야 내에 있는 적을 발견하는..

오늘은 적 캐릭터의 시야와 패트롤 관련 구현을 했다. 어제까지 구현한 부분은 방향에 상관없이 감지 거리 내에 플레이어가 접근하면 적이 발견하고 다가와서 공격을 했는데, 적의 정면에 플레이어가 있는 경우에만 플레이어를 감지하는 기능을 구현했다. 이 뿐만 아니라, 플레이어가 적의 정면에 있어도 벽 등의 장애물로 인해 가려지면 플레이어를 인식하지 못하도록 하는 기능 또한 구현했다. 이후에는 적이 일정한 위치를 반복해서 움직이는 패트롤 기능도 구현했다. 약간 잡임형 게임에 적합한 시스템인 것 같다. void FindVisibleTargets() { _distanceToTarget = 0.0f; _nearestTarget = null; _visibleTargets.Clear(); Collider[] targets..