목록Categories (1099)
KoreanFoodie's Study
언리얼 INI 파일 설정 만약 캐릭터의 HP 를 편집하고 싶은데, HP 값을 변경하기 위해 매번 캐릭터를 에디터에서 수정해야 한다면 매우 비효율적일 것이다. 이를 위해, 언리얼은 INI 파일을 이용해 블루프린트나 별도의 에디터 작업이 없이도 속성값을 바꿀 수 있는 기능을 제공하고 있다. (원래 INI 파일은 윈도우에서 시스템 구성 요소의 설정을 위해 만들어진 파일 형식이다) INI 파일의 형식은 속성과 값, 그리고 이 두 가지를 포괄하는 섹션으로 구성되어 있다. 섹션 : 현재 프로젝트에서 사용하는 C++ 클래스 식별자 속성 : C++ 클래스에서 INI 를 사용하도록 지정한 UPROPERTY 멤버 변수 값 : 속성에 지정할 값 C++ 클래스 식별자는 고유한 식별자로 구분되며 다음과 같은 형식을 가진다. {..
..은 힘들다. 이유는 여러가지 있겠지만, 역시 시간이 부족하다는게 가장 큰 문제다. 재택을 한다면 또 모르겠지만, 지금같은 상황에서는.. 평일에는 실제 개발에 1-2 시간이나 투입할수 있나 싶다. 주말을 잘 활용한다고 한들 절대적으로 시간이 부족하다. 기획은 계속 바뀐다. 개발에 무슨 진척이 있는것도 아닌데 망상만 늘어가는 느낌이다. 선택의 시간이 점점 다가오는 것 같다. 두렵기도 하고 떨리기도 하지만, 두렵지 않다면 그건 도전이 아니라는 것을 알고 있다. 그리고 도전은 언제나 내 예상을 뛰어넘는 가치가 있었다는 것도 잘 알고 있다. 바야흐로 폭풍전야.
언리얼 액터 생성 예시 참고로 액터 생성시에는 ConstructorHelpers 를 많이 사용한다. AWeapon::AWeapon() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; Weapon = CreateDefaultSubobject(TEXT("WeaponHashValue")); RootComponent = Weapon; static ConstructorHelpers::FObjectFinder SK_BlackKnight(TEXT("SkeletalMesh'/Game/Infinit..
언리얼 오브젝트 생성 언리얼 오브젝트를 생성할 때는 기본적으로 NewObject( ) 를 사용한다. 이번에는 ABGameInstance 에서 WebConnection 이라는 DefaultSubobject 를 생성했다고 가정해 보자. ABGameInstance 에서는 GetDefaultSubobject 를 호출해 WebConnection 을 조회하고, WebConnection 에서는 GetOuter 를 호출해 ABGameInstance 를 조회할 수 있다. NewObject vs CreateDefaultSubobject 그렇다면 어떤 것을 써야 할까? 두 가지 모두 언리얼 오브젝트를 생성한다는 것은 같으나, 생성 방식에서 차이가 존재한다. 다음의 코드를 보자. ... #include "ABGameInsta..
리플렉션 : 런타임에 자기 자신을 조사하게 만들자 언리얼은 UHT(Unreal Header Tool) 을 이용해 클래스 계층 구조, 멤버 변수/함수 등의 정보를 UClass 에 저장한다. 이를 리플렉션이라고도 하고, 프로퍼티 시스템이라고도 부른다. 리플리케이션 시스템은 부가 기능으로, 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아두면 UHT 가 컴파일시 해당 정보를 수집하게 된다. 프로퍼티 시스템 계층 구조는 아래와 같다. (UField 아래에 UStruct, UEnum, UProperty 가 있음) 실제 예시 코드를 보자. #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject ..
CDO 는 무엇이고, 또 왜 사용할까 언리얼에서는 런타임에 빠른 타입 체킹과 클래스 검색을 위해, 컴파일 타임에서 클래스와 타입 등의 메타 정보를 생성한다. 이러한 메타 정보는 UClass 라는 언리얼 클래스에 보관된다. UClass 에는 클래스의 계층 구조나 멤버 변수/함수에 대한 정보가 들어있다. 이러한 UClass 를 이용하면, 단순히 타입을 검색하는 것을 넘어 런타임에서 인스턴스의 멤버 변수 값을 변경하거나 멤버 함수를 호출할 수도 있다. (Java, C# 에서는 이런 기능을 리플렉션[Reflection] 이라고 부른다) 런타임 과정에서는 언리얼 오브젝트를 초기화해야 하는데, 이때 생성되는 인스턴스가 CDO(Class Default Object), 클래스 기본 객체이다. 언리얼은 CDO 를 미리 ..
언리얼 오브젝트 언리얼 오브젝트는 언리얼 엔진의 관리를 받는 객체이다. 언리얼이 객체를 관리하게 되는 이점은 여러가지가 있는데, 먼저 클래스의 타입체킹을 빠르고 간편하게 할 수 있다는 것, 그리고 가비지 컬렉션을 자동으로 해 주는 것 등이 있겠다. 언리얼 오브젝트는 U 로 시작하고, 일반 C++ 오브젝트는 F 로 시작하는 것을 권장하고 있다. 언리얼 오브젝트의 전체 특징은 다음과 같다 : CDO(Class Default Object) : 객체의 초기 값을 자체적으로 관리 Reflection : 객체 정보를 런타임에서 실시간 조회가 가능 GC(Garbage Collection) : 참조되지 않는 객체를 메모리에서 자동 해제할 수 있음 Serialization : 객체와 속성 정보를 통으로 안전하게 보관하고..
언리얼 빌드 시스템 그렇다면 UClass 타입의 정보는 무엇이고 실제 객체의 정보는 무엇일까? 이를 이해하기 위해서는, 언리얼 빌드 시스템에 대해 공부할 필요가 있다. (디테일한 내용은 이득우님 블로그를 참조함) 먼저, 언리얼은 크로스 플랫폼으로 동작해야 하기 때문에, 프로젝트의 폴더 구조와 소스파일을 기반으로 언리얼 빌드 툴이 OS 에 맞는 솔루션을 생성하게 된다. 비주얼 스튜디오에서 빌드시, Editor 로 끝나는 설정을 클릭하면 에디터용 dll 을 생성하는 구성이며, Editor 가 붙어 있지 않을 경우 실행용 exe 파일을 생성한다. 즉, Development Editor 설정을 누르면 디버깅할 수 있는 개발 버전으로, 에디터용 dll 을 만들도록 컴파일된다. 컴파일된 dll 파일들은 interm..
GetClass vs StaticClass 코드를 짜다보면, 특정 객체의 클래스 정보를 알기 위해 GetClass 혹은 StaticClass 를 쓰는 것을 볼 수 있다. 그런데 이 둘의 차이는 무엇일까? 한 줄 요악 : StaticClass 는 컴파일 타임에서 생성된 UClass 타입의 정보를 얻어오는 것이며, GetClass 는 런타임에서 실제 객체의 클래스를 조회할때 사용된다. AMyActor* ActorPtr = NewObject(...); UObject* ObjPtr = Actor; UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor UClass* ObjectClass = UObject::StaticClass(); // UObject UCla..
Level Design 컨셉 : 무한맵. 4 개중의 하나의 방향으로 이동함. 목표 지점이 정해져 있음. 목표지점에 도달하여, 성화를 봉송하면 게임이 클리어. 전투 : 새 공간에 도착하면, 문이 닫히면서 적이 랜덤으로 스폰된 적과 싸우게 됨. 목표 지점에 가까이 갈수록 적이 강력해짐. 목표 지점 방에서는 보스와 전투를 하게 만들 수도 있음. 전투 완료 : 적을 전부 무찌르면, 2개의 아이템 박스가 나옴. 이때 선택을 해야 함. 선택지는 다음과 같음. 무기변경 무기강화 무기 내구도 수리 캐릭터 HP 증가 캐릭터 이동속도 증가 캐릭터 공격속도 증가 다만 2 가지 전부 효과 카테고리는 같은데, 하나는 "100% 확률로 10% 성능 향상" 이며, 나머지 하나는 "10% 확률로 성능 50% 상승, 40%확률로 성능..