본문 바로가기

개발 프로젝트/Unity - WeaponGameProject

(9)
WeaponGameProject - Weapon 클래스 설계 (3) (Bash와 상호작용하는 Weapon의 상태 구현 - 2) 바로 직전의 포스팅을 보았는데 글의 규모가 너무 넓고 집중이 되지 않았습니다. 기술의 핵심만을 작성하는 기술을 연습 해보겠습니다. 고로 오늘은 짧게 작성하겠습니다. 지난 포스팅에서 작성한 Weapon에 1가지 상태를 추가할 것입니다. 예전에 포스팅한 동영상에서 눈치채신 분들도 있겠지만, Weapon의 상태는 1가지 더 존재합니다. 무기가 노랗게 빛나는 상태. Weapon의 BashTrigger가 준비되었습니다. Bash 기술을 사용하여 WeaponDetectCollider가 생성되었을 때 플레이어 주변의 Weapon들은 CanBash 상태가 됩니다. 하지만 많은 무기들 중에 플레이어가 원하는 무기를 선택할 수 있어야겠지요. 원하는 무기를 선택하기 위해선 조준선이 필요했습니다. 조준선은 SphereCast..
WeaponGameProject - Weapon 클래스 설계 (2) (Bash와 상호작용하는 Weapon의 상태 구현) 오늘은 Weapon Class에 상태를 추가하겠습니다. 게임의 핵심이 되는 기술인 Bash와 Weapon이 상호작용하여 Weapon의 상태를 변화하는 것입니다. Bash 기술은 Player 기준으로 일정 범위 안의 Weapon을 스캔하여 Weapon의 Position으로 도약하는 기술입니다. Bash 기술은 다음을 요구합니다. 1. Player에게 부착되어 Weapon을 감지하는 Collider가 필요함. 2. 1의 Colldier의 부피가 Bash Key Input이 홀드된 상태면 부피가 증가해야함 3. Weapon이 1의 Colldier와 상호작용하여 상태 변환이 일어나야함 먼저 1번을 수행할 WeaponDetectCollider 클래스를 설계합니다. using System.Collections; u..
WeaponGameProject - Weapon 클래스 설계 (1) (SphereCast를 활용하는 감지 클래스) 이번에 소개할 클래스는 Bash 기술의 목표가 될 무기(Weapon)와 관련된 클래스입니다. 완성 예시 동영상 Weapon Class는 다음을 요구합니다. 1. Weapon의 상태(던져진 상태 , 획득 가능 상태)를 관리할 클래스가 존재해야함 2. Weapon은 플레이어가 감지하여 무기를 획득할 수 있어야 함. 가장 먼저 Weapon Class를 구현하여 상태를 관리합니다. using Retro.ThirdPersonCharacter; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public class Weapon : MonoBehaviour { [Serial..
WeaponGameProject - Player 클래스 설계 (3) (bool 타입을 통한 플레이어 상태 구현) 이번에 소개할 Combat Class는 플레이어의 상태 Bool타입으로 관리하는 클래스입니다. 그런데 왜 Bool 타입으로 상태 클래스를 설계했는지 질문 하신다면, 정확한 지적입니다. 이 클래스는 잘못 설계되었습니다. 지금까지 RPG 게임을 제작해보지 않았던 저에겐 Bool 타입으로 상태를 관리한다는게 어떤 후폭풍을 낳는지 몰랐습니다. 먼저 Combat 클래스에 대해 설명하겠습니다. 이 클래스는 플레이어의 전투 상태(Combat)를 관리하는 클래스입니다. 왼쪽 마우스를 입력하면 기본 공격 오른쪽 마우스를 입력하면 무기 던지기 왼쪽 쉬프트를 입력하면 Bash를 시전합니다. Combat Class는 3가지 행동을 모두 구현하는 것이 아닌 공격과 Bash를 Trigger하는 클래스입니다. Bash , 기본 공..
WeaponGameProject - Player 클래스 설계 (2) (Spring Arm Camera 구현) 제가 잠깐 Unreal Engine 5를 사용할 때 그 엔진에서 SpringArm Camera Component를 제공하더군요. https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/UsingCameras/SpringArmComponents/ 스프링 암 컴포넌트 사용법 Spring Arm 컴포넌트는 카메라 시야가 막히는 상황을 자동으로 처리하는 데 사용됩니다. docs.unrealengine.com SpringArm Camera는 카메라와 카메라가 비추는 플레이어 사이에 Object가 가려서 플레이어를 비추지 못할 때 카메라가 오브젝트가 없는 Position까지 움직이는 Camera 형태를 말합니다. Spring Arm Camera In Unity5..
WeaponGameProject - Player 클래스 설계 (1) (Key Input을 클래스로 만들자) 예전부터 Unity에서 키 입력을 받을 때는 굉장히 단순하게 처리를 했습니다. 예를 들면 using UnityEngine Class A { bool isBashPressed = false; private void Update () { if (Input.GetKeyDown(KeyCode.LeftShift)) { isBashPressed = true; } if (Input.GetKeyUp(KeyCode.LeftShift)) { isBashPressed = false; } } } 이런 형태를 말합니다. 벌써 위험해 보입니다. 키 입력이 모여 있지 않고 클래스에 분산 되어 있으면 키 입력 Output이 어디 존재하고 어떻게 발동하는지 모르니 굉장히 위험하죠. 그런데 Unity 스크립트를 알려주는 대부분의 홈페이..
WeaponGameProject - 목차 제가 방황을 겪었습니다. 06월 말 야심차게 프로젝트를 하겠다 선언했지만, 프로젝트를 진행만 할 뿐 아무런 글을 작성하지 않았군요 방황을 한 이유야 여러 가지 있지만, 가장 큰 이유는 C#과 객체지향적 프로그래밍을 제대로 공부하지 않고 Unity에 뛰어들었기 때문이라 생각합니다. 07월부터 08월 말까진 그래도 컴퓨터 앞에는 앉아 있었습니다. 그러나 여름 동안 작성한 코드는 목적이 존재하지 않았습니다. 제가 작성한 클래스는 재사용이 힘든 형태로 클래스의 장점을 활용하지 못하고 함수에 의해 한 가지 행동만을 하고 있었습니다. 클래스의 형태는 존재하지만, 클래스를 절차식 프로그래밍으로 사용하고 있다고 해야할까요? 물론 이러한 클래스의 형태 또한 Side Effect를 줄이기 위해 함수형 프로그래밍을 접목시키..
WeaponGameProject - 개발 계획서 3인칭 액션게임 개발 계획서 프로젝트 명 : Weapon Game Project 개 발 환 경 OS Unity 3D Tools Visual Studio 2019 Language C# 일정표 전체 일정 2023.06.26 ~ 2023.07.24 개발 Client Character Monster Weapon 1 주차 메인 화면 제작 , 게임 종료 구현 플레이어 이동 구현 스테이터스 파일 제작 - 2 주차 - 무기 던지기 , Bash 구현 행동패턴 구현 , 인스턴스화 무기 클래스 구현 3 주차 - 공격 구현 , 플레이어 체력 구현 몬스터, 플레이어 간 상호작용 구현 4 주차 게임 클리어 구현 , 게임 최적화 (스테이터스 파일을 이용하여 안전성이 높고 빠르게 로딩하는 방법 연구) , 게임 중지 구현 , 버그 수..