unity3D(10)
-
[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] #7. 무기 기본 3타 콤보 공격 구현하기 (긴 글 주의)
저번 글에서 확장성을 고려하여 무기 시스템의 기반을 만들었었습니다. 이제는 진짜 무기의 공격 구현을 해볼 차례네요. 공격 키를 입력 받아야 하니 새로운 입력 키 바인딩이 필요할 것이고, 단순히 눌렀을 때냐 아니면 누르고 유지하고 있을 때냐 등등의 상호작용도 추가해줘야 할 겁니다. 우선 입력 처리부터 먼저 해보도록 하겠습니다. 1. 공격 키 바인딩 및 입력 분기 처리하기 New Input System의 "상호 작용(Interaction)" 공격은 마우스 좌 클릭으로 입력을 받습니다. Player Input Actions에 들어가서 해당 키 바인딩을 해주도록 하죠. 왼쪽 마우스 버튼을 바인딩 해주었습니다. 그런데 Interactions에 Hold와 Press가 추가한 걸 볼 수 있는데요. 상호작용(Inter..
2022.10.06 -
[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 -
[Charon] #4. RigidBody를 이용한 3D 캐릭터 N단 대시(Dash) 구현하기
오랜만에 다시 카론(Charon) 게임 프로젝트 글을 올리는 것 같네요. 그동안 이것저것 또 열심히 했습니다. 비록 컴퓨터공학과 4학년이지만 학과 MT를 가보기도 하고, 추석 할인 세일을 하길래 인프런에서 강의 2개를 사서 조금씩 보기도 했습니다. 이제 슬슬 졸업 작품 발표 기한도 다가오는 지라, 개발 계획 및 범위를 다시 재조정할 필요가 있다고 느껴 저번 주에 회의를 진행했었습니다. 이제 한동안은 카론(Charon) 프로젝트와 코딩테스트 게시글이 주를 이루겠네요. 이번 주에 제가 맡은 개발은 캐릭터의 대시(Dash) 기능입니다. 사실 저번에 이미 구현했던 기능이지만, 문제점들이 많았던 관계로 수정을 해 나갔지요. 추가) 2023-11-24 본 글과 같이 만든 대시는 부자연스럽기 때문에, 리팩토링을 진행..
2022.09.21