전체 글 150

게임 수학 - 함수

1. 함수(Function)의 기초함수를 왜 배워야 하는가? 게임의 공간을 구성하고 화면에 보여지는 전 과정은 대부분 공간과 공간의 변환으로 구성됨.이러한 변환은 근본적으로 집합과 집합의 대응 관계에 기반하고 있으며, 이러한 메카니즘을 설명하는 이론이 함수.함수에 대한 개념을 제대로 정립하는 것이 게임 공간과 공간의 변환을 올바르게 이해할 수 있는 기본 지식이 됨. 함수의 정의 첫 번째 집합 X의 요소인 x가 두 번째 집합 요소인 y에 대응될 때, y = f(x) 라고 표기 함수의 성립 조건 : 첫 번째 집합의 모든 요소가 사용되어야 한다. 함수가 아닌 대응 관계첫 번째 집합의 어떤 원소에 대한 대응 관계가 빠져 있을 때첫 번째 집합의 한 원소가 두 번째 집합의 두 가지 이상의 원소에 대응할 때  함수에..

게임 수학 - 수의 구조

1. 수의 시각화왜 수에 대해 알아야 하는가?게임 세계는 벡터로 구성된 시스템. 이 시스템 위에서 콘텐츠가 만들어짐.벡터는 수를 사용해 만들어진 대상이므로, 벡터를 정확히 이해하기 위해서는 결국 수가 만들어내는 시스템에 대한 이해가 필요하다.수(Numbers)의 종류다양한 수의 개념이 존재하며, 각각은 대문자를 사용해 집합으로 구분하여 부른다. 실수 집합(The set of real numbers) R실수 집합 R은 수 사이에 빈틈이 없는 연속된 무한의 요소로 구성된 수의 집합임이러한 실수 집합의 개념과 원소의 개념에서의 수를 바라보는 것을 훈련할 필요가 있음. 수 직선(Number Line)실수 집합 R의 요소를 점으로 나열하면 연속성 있는 직선으로 표현할 수 있음.수의 표현하나의 체계에서 대소를 비교..

쾌락의 질적 차이 - 밀의 공리주의, 에피쿠로스의 정신적 쾌락

벤담은 쾌락에는 질적인 차이가 없고 오로지 더 많은 쾌락을 중시.하지만 쾌락에는 질적 차이가 존재한다.밀은 여러 가지 쾌락을 경험한 사람이 선호하는 쾌락이 보다 바람직한 쾌락이라고 주장.그리고 정상적인 인간은 누구나 질적으로 높고 고상한 쾌락을 추구할 것으로 보았음.단순한 감각적 쾌락이 아닌 지적이고 내적 교양이 뒷바침되는 정신적 쾌락이 더 우월하다. "만족하는 돼지가 되기보다는 불만에 찬 인간이 되는 편이 낫고, 만족하는 바보가 되기보다는 불만에 찬 소크라테스가 되는 편이 낫다. 그런데 만일 돼지나 바보라면 이것과는 다른 견해를 보일 것이다. 왜냐하면 그들은 오직 자신이 속한 한 측면밖에 파악할 수 없기 때문이다. 두 측면을 모두 알아야 이들 둘을 비교할 수 있다." - 밀 "공리주의" 인간의 정신적,..

잡동사니 2025.01.17

언리얼 5 - 게임의 완성

게임의 승패조건 관리게임 모드멀티 플레이를 포함해 게임에서 유일하게 존재하는 게임의 심판 오브젝트최상단에서 게임의 진행을 관리하며, 게임 판정에 관련된 중요한 행동을 주관하는데 적합.다양한 게임 규칙을 적용할 수 있도록 핵심 기능과 분리해 설계하는 것이 바람직함.게임의 상태와 플레이어의 상태를 별도로 저장할 수 있는 프레임워크를 제공함  // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/GameModeBase.h"#include "Interface/ABGameInterface.h"#include "ABGameM..

언리얼5 - 리플렉션을 활용하는 언리얼 에디터 UI와 UI의 확장

언리얼 에디터 UI언리얼 에디터는 런타임 또는 디자인 타임에 클래스, 속성, 메서드 정보를 활용하여 자동으로 에디터의 UI를 생성하거나 확장하는 작업을 지원함.개발자가 직접 특성 클래스를 수정하지 않아도 리플렉션을 통해 자동으로 타입과 속성 정보를 읽고, 이를 바탕으로 UI를 동적으로 생성하거나 관리할 수 있음. 언리얼의 리플렉션 시스템은 UCLASS, UPROPERTY, UFUNCTION 등을 통해 타입과 속성 정보를 메타 데이터로 저장.이를 기반으로 속성 패널(Details Panel), 블루프린트 노드, UI 확장 등을 자동으로 생성할 수 있음. 1. 리플렉션을 활용한 Details Panel 생성UCLASS와 UPROPERTY를 사용해 속성을 정의하면 언리얼 리플렉션 시스템이 이를 읽고 Detai..

언리얼 5 - 게임 플로우 다듬기

게임 구성 요소의 정리게임 구성 요소의 분류세 개의 레이어를 기준으로 게임을 구성하는 다양한 기능의 구현  게임 플로우를 위해 보강할 내용죽었을 때 NPC와 플레이어의 처리이동 속도의 적용포션/스크롤 아이템의 추가 구현과 캐릭터의 적용스탯 기능 및 UI 기능의 보강 캐릭터 관련 보완사항 수정// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "Character/ABCharacterBase.h"#include "Engine/StreamableManager.h"#include "Interface/ABCharacterAIInterface.h"#..

언리얼 C++ - 정적 분기와 동적 로직, 리플렉션의 사용

정적 분기와 동적 로직의 차이 정적 분기(ex. Switch문) :모든 분기에 대해 미리 연결하고 구현해놓아야 함.플레이어가 단축키를 수정한다면? 정적 분기만으로 구현하려면 모든 키에 대해 미리 매핑을 해놔야함. 동적 로직 :런타임 중에 분기가 추가되거나 수정될 수 있음.데이터를 기반으로 값을 설정할 수 있음. JSON 파일을 읽어와 설정할 수 있음.미리 모든 동작을 연결해놓지 않아도 런타임 중에 키 설정이나 게임 진행상황에 따라 분기(행동, 동작)가 추가로 연결될 수 있는 것. 리플렉션(C#) :복잡한 동적 로직을 구현할 수 있게 됨런타임 중에 타입 정보에 접근해 조회하거나, 메서드를 동적으로 호출할 수 있게 됨→ 프로그램이 보다 동적이고 유지보수에 용이해짐 1. 유연성ex. 플러그인 시스템으로 외부 ..

언리얼C++ - Delegate를 배열에 저장해서 사용하기

언리얼에서 델리게이트는 내부적으로 복잡한 형태(함수 포인터, 바운드 객체 등)를 유지해야하기 때문에 일반적인 값 타입처럼 복사하거나 전달하는 작업이 제한적임. void Bar(FOnTakeItemDelegate Delegate);→  불가능하거나 비효율적.위 코드처럼 델리게이트를 값으로 전달하려고 하면 델리게이트를 복사하는 과정에서 문제가 발생함.이 때문에 언리얼 엔진은 주로  참조를 통해 전달하거나 별도의 래퍼를 사용하는 방식을 권장. TArray DelegateArray;DelegateArray.Add(SomeDelegate);→  마찬가지로 TArray는 내부적으로 복사 생성자와 할당 연산자를 사용해 데이터를 관리하기 때문에제대로 동작하지 않음. 결국 Delegate는 복사 가능한 타입이 아니기 때..

언리얼 5 - 헤드업디스플레이의 구현

헤드 업 디스플레이의 생성 프로세스헤드업디스플레이의 생성 과정헤드 업 디스플레이(HUD)는 플레이어 컨트롤러에 의해 제작되고 관리되는 UI 객체HUD의 구현은 위젯을 생성하고 이를 플레이어 뷰포트에 띄우는 과정으로 생성됨.이렇게 만들어진 위젯은 자신을 소유한 플레이어 컨트롤러에 접근할 수 있음. 유저 인터페이스 - 위젯 블루프린트, UserWidget으로 WBP_ABHUD 위젯 생성 간단하게 HUD 위젯 제작 UserWidget을 상속받은 ABHUDWidget 클래스 생성 위젯의 부모 클래스 변경 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#in..

언리얼 5 - 행동트리 모델의 구현

BTTaskNode를 상속받은 BTTask_FindPatrolPos 노드 생성컴파일 에러가 발생하는데, 행동 트리 모듈을 추가하려면 AI에 관련된 모듈을 추가해줘야함."NavigationSystem", "AIModule", "GameplayTasks"  // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "BehaviorTree/BTTaskNode.h"#include "BTTask_FindPatrolPos.generated.h"/** * */UCLASS()class ARENABATTLE_API UBTTask_FindPatrolPos : ..

반응형