개인프로젝트

[Unreal_C++_DarkSoul]#22_HUD HUD(Head Up Display) 디자인 설계 및 구현 Overview 개요 및 설계 코드 영상 #1. 개요 및 설계 1. 개요 [개요] : 사용자 캐릭터의 현재 상태 정보를 HUD로 표현합니다. 캐릭터의 HP, SP, MP, 그리고 스킬 쿨타임을 "게이지" 형식으로 표현하고, 6가지 직업의 무기, 무기 속성, 그리고 스킬 정보를 이미지 형식으로 표현합니다. [목표] : 게임 플레이 과정에서 사용자 캐릭터의 현재 상태에 대한 정보를 알리기 위한 HUD를 설계합니다. 보다 직관적이고, 변경 내용을 실시간으로 업데이트할 수 있도록 설계합니다. 더불어, 기반 정보의 변경이 별도의 코드 수정 없이 이루어지도록 합니다. 2. 설계 [UI] : Unreal E..
[Unreal_C++_DarkSoul]#21_데이터 변환 Data Table에서 필요한 정보들을 추출하는 '데이터 변환'을 구현합니다. Overview 개요 및 설계 코드 정리 #1. 개요 및 설계 1. 개요 [Unreal_C++_DarkSoul]#4_문제 해결, Data Table 로드 함수 [Unreal_C++_DarkSoul]#4_리팩터링, Data Table 로드 함수, static 멤버 함수 Unreal C++ 개발 중 "Static 멤버 함수를 통한 리팩터링"에 대한 내용입니다. 포트폴리오 진행 사항을 기록하기 위한 포스팅입니다. Ove webddevys.tistory.com [Unreal_C++_DarkSoul]#15_문제 해결, Data Table 로드 함수 [Unreal_C++_DarkS..
[Unreal_C++_DarkSoul]#20_Level Sequence Cinematic을 재생하는 Level Sequence를 제작하고, Game Play에 삽입합니다. Overview 개요 및 설계 코드 영상 #1. 개요 및 설계 1. 개요 일반 Stage(일반 근거리 공격 객체와 원거리 공격 객체만 나오는 단계)와 Boss Stage(보스 객체가 나오는 단계)의 구별이 필요하다고 판단했으며, 이를 위해 오직 Boss Stage에 발생하는 특별한 연출을 구현해보고자 했습니다. 재생 가능한 Level Sequence를 제작하고, Game Play 중 Player 캐릭터 객체가 일정 위치에 도달하면 Cinematic을 재생합니다. 이때, Level Sequence의 재생은 Game Play와 자연스럽게 ..
[Unreal_C++_DarkSoul]#19_Portal 서로 다른 Level을 오가는 Portal을 구현합니다. Overview 개요 및 설계 코드 영상 #0. 개요 및 설계 1. 목적 플레이어가 서로 다른 레벨을 오갈 수 있는 Portal을 구현합니다. 2. 설계 Player 객체는 특정 키 입력과 동시에 Portal 객체와의 충돌 여부를 체크하고 델리게이트 함수를 실행합니다. Portal 객체는 Player 객체가 선언한 델리게이트 함수를 Level Change 함수와 동적 바인딩을 수행하고, 미리 설정한 다음 Level을 열어줍니다. #1. 코드 1. PlayerCharacter 클래스 //... void APlayerCharacter::OnChangeLevel() { TArray Overlapp..
[Unreal_C++_DarkSoul]#18_Sound Sound를 구현합니다. Overview 개요 및 설계 코드 영상 #1. 개요 및 설계 1. 개요 [디자인 패턴]#13_이벤트 큐, Event Queue [디자인 패턴] #13_이벤트 큐, Event Queue 게임 디자인 패턴 중 "디커플링 패턴"에 대해 알아보겠습니다. "게임 프로그래밍 패턴"의 15 항목, "이벤트 큐"에 해당하는 내용입니다. 의도 이벤트를 보내 webddevys.tistory.com 게임 플레이에 필요한 사운드 이펙트들을 재생하기 위해 Sound 클래스를 구현합니다. Sound 객체는 월드 어느 곳에서도 배경 음악을 재생합니다. Sound 객체는 캐릭터의 자연스러운 행동 연출을 위한 사운드 이펙트를 재생합니다. Event Qu..
[Unreal_C++_DarkSoul]#17_Grid 클래스 공간 분할 패턴을 활용한 Grid 클래스를 구현합니다. Overview 개요 코드 영상 #0. 개요 1. Grid 클래스? Grid 객체는 월드에 배치되어 Grid 객체가 정의한 지정 구간 내 위치한 Enemy 객체들을 관리합니다. 공간 분할 패턴(Spatial Partition Pattern) : Grid 객체는 공간 분할 패턴을 통해 "주변 객체 탐색" 성능을 최적화합니다. 월드 내 객체가 많아질수록, 이들을 탐색하는 작업은 느려집니다. 따라서, 플레이어의 현재 위치 값을 통해 Grid 객체를 특정하고, Grid 객체가 관리하는 적 객체 목록을 순회하여 탐색 성능의 최적화를 구현합니다. 객체 풀(Object Pooling) : Grid 객체..
[Unreal_C++_DarkSoul]#16_런 타임 AI 실행 여부 런 타임 중 AI의 BT(Behavior Tree) 실행 여부를 관리합니다. Overview 개요 코드 정리 #0. 개요 1. 문제 적 객체는 저마다 Behavior Tree를 실행하는 AI 객체를 Controller로 갖습니다. 하지만, AI 객체는 BT를 지속적으로 실행할 뿐 적 객체가 어떠한 상태인지 고려하지 않습니다. 물론, GetPawn() 함수를 통해 Agent(AI의 통제를 받는 객체)를 가져와 Agent의 상태를 확인하는 방법이 존재하지만, BT의 각 BTTaskNode 실행 함수에서 GetPawn() 함수를 매번 호출해야 하는 비효율적인 코드 중복이 발생합니다. 따라서, 런 타임 중 BT의 실행 여부를 별도로 관리하는 ..
[Unreal_C++_DarkSoul]#15_Data Table 로드 함수 Data Table 정보를 가져오는 Load 함수를 구현합니다. Overview 개요 코드 결론 #1. 개요 1. 문제 CHelpers(Utility 클래스) 클래스에서 Data Table 종류별 Load 함수를 static 멤버 함수로 정의합니다. 각 액터 컴포넌트들은 GameObject 객체로부터 가져온 Data Asset을 통해 Data Table을 전달받고, CHelpers가 제공하는 Load 정적 함수를 통해 전달받은 Data Table로부터 필요한 정보를 Load 할 수 있습니다. 이때, Game Object가 Load한 정보들을 Game Object의 액터 컴포넌트들로 가져오기 위해선 Tick() 함수를 정의해야 합니..
[Unreal_C++_DarkSoul]#14_Actor Compnent 간 소통 객체의 Actor Component간 소통을 구현합니다. Overview 문제 해결 GetOwner() vs FindComponentByClass() #0. 문제 1. 문제 GameObject 객체는 다양한 Actor Component를 가집니다(Mana 컴포넌트, Weapon 컴포넌트 등) Actor Compnent 간의 소통을 위해 각 컴포넌트는 BeginPlay() 정의부에서 GetOwner()를 통해 액터 객체를 가져와 서로의 컴포넌트에 대한 참조를 가져오는 방법을 사용합니다. 하지만, 각 컴포넌트의 초기화 완료 시점이 다르기 때문에, 아직 초기화되지 않은 컴포넌트의 참조를 가져오는 에러가 발생합니다. 이때, Tick..
[Unreal_C++_DarkSoul]#13_Impact Effect Combo 공격 무기들의 충격 이팩트를 구현합니다. Overview 개요 및 설계 코드 결과 영상 개요 1. 목적 Combo 공격을 수행하는 무기들의 Impact Effect를 구현합니다. Combo 공격 무기의 충돌 이벤트에서 적절한 위치에 Impact Effect를 활성화하는 것이 목표입니다. 2. 설계 먼저, Power 컴포넌트는 데이터 멤버로 속해 있는 무기 클래스에 대한 정보를 Data Table을 통해 전달받습니다. 이때, Power 컴포넌트는 Imapct Effect 정보를 "TArray"에 저장하고, Fname과 bool 자료형은 각각 무기의 Sekeltal Mesh에 별도로 추가한 Socket 이름과 활..
Hardii2
'개인프로젝트' 카테고리의 글 목록