개발일지(14)
-
[Charon] #11. 다양한 적(Enemy)의 이동, 공격 구현하기
일반적인 게임에서는 플레이어를 방해하는 적(Enemy)들이 존재합니다. 이들은 플레이어를 공격하거나, 플레이어가 게임 진행을 원활하게 진행하는 것을 방해하는 목적을 가지고 있습니다. 이 게임에서도 적들이 존재하며, 각각 어떻게 구현했는지에 대해 얘기하는 시간을 가져보려고 합니다. 1. AI Navigation 기능을 통한 적의 맵 내 이동 기본적으로 적들은 맵 내에서 이동 가능한 지역만을 돌아다녀야 합니다. 이동 불가능한 지역을 뚫고 간다던가, 목표 지점을 앞에 벽이 있는데도 옆으로 돌아가지 않고 계속 벽을 향해 이동한다면 게임 진행이 안 될 것입니다. 또한, 자기가 이동 중인 방향을 바라보며 이동해야 하며, 방향 전환을 위해 회전을 했는데 어설프게 회전하는 것도 게임에 대한 몰입을 깰 것입니다. 이러한..
2023.04.05 -
[Charon] #10. "카론의 노" 무기 공격 및 스킬 구현하기
플레이어가 공격을 하거나 스킬을 사용하면, 그에 따라 화려하고 멋진 이펙트와 사운드가 나면서 유저가 게임에 더욱 몰입할 수 있게 해줍니다. 이펙트는 아티스트분들이 제작하여 주지만, 저는 아티스트가 없기 때문에 Unity Asset store에서 구매하여 사용하였습니다. 문제는 제가 이펙트를 적용하여 게임을 제작해 본 적이 없다는 것이지요. 공격 및 스킬 이펙트를 모션과 어떻게 싱크를 맞춰 자연스럽게 보이게 할 것이며, 피격 판정 또한 어떻게 하면 자연스럽게 들어갈까가 고민사항이었습니다. 이 부분에 대한 경험이 없다보니, 구글링도 해보고 유튜브도 찾아봤지만 죄다 아티스트를 위한 이펙트 제작 정보만 있었습니다... Unity Asset Store에 샘플 프로젝트라도 있었으면 뜯어봐서 참고해봤을텐데 찾진 못했..
2023.04.04 -
[Charon] #9. 대시(Dash) 선입력(Input Buffer) 기능 추가하기
1. 선입력(Input Buffer)이 필요한 이유 게임에서 로직의 실행 단위는 프레임(Frame)입니다. 게임을 하다보면 FPS(Frames Per Second)란 수치를 볼 수 있는데, 1초에 몇 프레임이 실행되는지를 나타냅니다. 좋은 고사양 장비인 경우에는 200 프레임 이상의 수치를 보여주곤 합니다. 우리 게임에서 대시 애니메이션이 30fps이 조금 넘습니다. 이것은 선입력을 통한 버퍼가 없다면, 플레이어가 저 짧은 시간 내에 타이밍을 맞추어 입력을 해야 한다는 의미가 됩니다. 대시를 하는데 그 정도의 집중력을 쓰게 되면 피로도가 빨리 쌓이게 되겠죠. 철권과 같은 격투 게임은 커맨드(Command)라는 게 존재하는데, 입력 버퍼가 존재하기에 편안하게 콤보를 입력할 수 있습니다. 우리 게임에도 이러..
2022.11.16 -
[Charon] #8. 플레이어와 카메라 사이의 오브젝트 투명화하기
졸업 작품을 마무리하는 시즌이라 바빠서, 개발에만 몰두하다 보니 글을 쓸 시간이 없었네요. 마감이 다가오니, 효율적이고 좋은 소스 코드를 짜는 것과 시간 안에 마무리 하는 것 사이에서 타협을 해야 했습니다. 그러다 보니, 이게 좋은 방법인가를 고민할 겨를이 많이 없어 하드 코딩도 어느 정도 들어간 것 같습니다. 시간이 나면 차차 다시 고민해보며 리팩토링을 해보고 싶네요. 글을 안 쓴 지 오래 되었다 보니, 어디서부터 글을 써야할 지 모르겠더군요,,, 그래서 일단 최근에 한 것 중 글을 독립적으로 쓸 수 있는 부분부터 써보도록 하겠습니다. 1. 쿼터뷰(isometric view) 시점의 문제점 이 게임은 3D 로그라이크 핵 앤 슬래시 게임으로, 쿼터뷰 시점을 가지고 있습니다. 위에서 살짝 대각선 방향인 부..
2022.11.16 -
[Charon] #6. 휴머노이드 애니메이션 수정과 무기 탈장착 시스템 기반 만들기
로그라이크 게임이니, 무기를 사용하여 몬스터들을 때려잡을 수 있어야 할 겁니다. 그만큼 무기라는 것이 우리 게임에서 핵심이 된다는 얘기죠. 우선 우리 게임의 기본 무기인 "카론의 노(Charon's Paddle)"로 기능을 구현해볼 겁니다. 하지만 이번 글에서는 그 기반만 먼저 다져볼까 해요! 솔직히 말해서 무기가 노처럼 생기진 않았습니다. 구매했던 무기 에셋 중에 그나마 노 같이 생긴 걸로 쥐어 주었어요... 그리고 게임 그래픽이 너무 밋밋한 것 같아서 URP(Universal Render Pipeline)으로 프로젝트를 업그레이드 하고 싶었는데, 커스텀 쉐이더(Custom shader)는 URP Shader로 자동 변환이 안 되더라구요. 현재 구입했던 에셋 중에 물과 검기 이펙트 에셋이 커스템 쉐이더..
2022.10.05 -
[Charon] #5. 상태 패턴(State Pattern) 도입하기
모듈화의 필요성을 느끼다 기존 PlayerController 스크립트를 통해 기능을 추가하려면, 기존 소스코드를 수정해야 해서 확장이 어려웠습니다. 저희 게임에는 대시, 대시 공격, 차지 공격, 기본 공격 콤보 3타 등등 한 상태에서 다른 상태로 분기되는 동작들이 많았습니다. 그래서 지금 코드 구조로 계속 확장하다가는 세계 제일의 스파게티를 만들 것 같아서 구조 변경이 필요하다고 생각했습니다. 이전에 디자인 패턴(Degisn Pattern)들을 보던 중, 상태 패턴(State Pattern)을 적용하면 Controller의 기능을 추가하는 게 굉장히 쉬울 것 같았습니다. 제가 어떤 식으로 구조를 바꾸었는지 아래에서 보면서 천천히 설명해 드릴게요. 1. 모든 상태들의 기원이 되는 부모 추상 클래스, Bas..
2022.10.04