본문 바로가기

게임 공부/Unreal Engine17

[UE] TArray 컨테이너 클래스 문법을 자세히는 다루지 않습니다. 오타나 틀린 부분이 있으면 알려주세요~ 언리얼 엔진의 TArray는 C++의 std::vector와 비슷한 기능을 하는 동적 배열이다. 원소를 추가할 때 할당된 메모리 공간이 부족하면 자동으로 capacity를 늘려준다. 이 글의 목적은 vector에서 자주 사용하던 기능들을 TArray에선 어떻게 사용해야 하는지 간단하게 알아보는 것이다. [초기화 관련] TArray는 std::vector와 동일하게 템플릿 인자로 저장할 원소의 타입을 전달하여 선언하면, 해당 타입의 원소들을 저장하는 배열을 만들 수 있다. 우선 vector의 경우 생성자 인자로 숫자를 전달해주면 capacity가 정해진 배열을 만드는 등을 할 수 있었는데, TArray는 이러한 생성자가 없는 걸로 보.. 2021. 12. 26.
UE4 참고 레퍼런스 (애셋 로드 관련) 애셋 참조 https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assets/ReferencingAssets/ 애셋 참조 docs.unrealengine.com 포인터 타입 https://unrealcommunity.wiki/pointer-types-m33pysxg Pointer Types | Unreal Engine Community Wiki Overview of UObject and "Smart" pointer types in Unreal unrealcommunity.wiki 비동기 애셋 로딩 https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Prog.. 2021. 12. 13.
Hard Object Pointer 언리얼 엔진엔 관리되는(Managed) 포인터와 관리되지 않는(Unmanaged) 포인터가 있다. 관리되는 포인터는 언리얼의 가비지 컬렉션과 함께 동작하며, UObject 타입과 함께 동작한다. 하드 오브젝트 포인터는 관리되는 포인터 중 하나이다. 따라서 UPROPERTY() 매크로가 붙는다. UPROPERTY() UObject* Pointer = nullptr; 하나의 오브젝트(A)를 가리키는 모든 하드 포인터가 nullptr가 되지 않는 이상 가비지 컬렉션은 해당 오브젝트(A)를 파괴하지 않을 것이다. 또한 해당 오브젝트(A)에 대해 Destory를 직접적으로 호출하지 않는 이상 파괴되지 않는다. 해당 포인터를 안전하게 사용하려면 IsValid() 함수를 사용해야 한다. 이 함수는 nullptr와 P.. 2021. 12. 13.
언리얼 오브젝트와 클래스 기본 객체 언리얼 오브젝트 언리얼 실행 환경에 의해 관리되는 C++ 객체 언리얼 엔진에서 항상 모듈 단위로 관리된다. 다음과 같은 기능들을 포함한다. 오브젝트의 초기값을 자체적으로 관리 => CDO(Class Default Object) 자동 메모리 관리 => 가비지 컬렉션을 통해 런타임에 오브젝트의 타입 확인이 가능 => Reflection 오브젝트 정보를 안전하게 관리 => Serialization 함수를 묶어서 효과적으로 관리 및 호출 => Delegate 서버와 클라의 오브젝트 동기화 => Replication 언리얼 에디터의 인터페이스를 통한 오브젝트 제어 언리얼 오브젝트 클래스가 되기 위한 조건 [Filename].generated.h 헤더 include 이 헤더 아래 다른 헤더가 있으면 안됨 UCLAS.. 2021. 12. 10.
적을 향하도록 회전하는 방법(로직)에 대해 간단하게 알아보자 내 캐릭터와 다른 캐릭터가 있을 때 내 캐릭터가 상대를 향하도록 회전하는 로직에 대해.. 아래와 같은 상황이다. A의 위치는 P1, B의 위치는 P2일 때, A가 B를 향해 회전하는 로직에 대해 생각해보자 우선 A는 Forward 방향을 보고 있다. 그리고 P1, P2의 위치를 가지고 만든 벡터를 P1P2라 하고, Forward와 P1P2가 이루는 각을 Θ라고 한다면, 우리는 Forward 벡터를 특정 방향(양의 각 or 음의 각)으로 Θ만큼 회전하면 된다. 여기서 Θ는 Forward와 P1P2의 내적을 통해 쉽게 구할 수 있다. 내적은 두 벡터의 크기와 cosΘ를 곱한 값이므로 두 벡터는 크기가 1인 단위 벡터여야 한다. P1P2는 P2에서 P1을 뺀 뒤, 정규화를 통해 만들 수 있다. 여기서 구한 c.. 2021. 11. 29.
[UE4] 액터가 게임에 참여할 때 호출되는 함수들 게임이 시작될 때 액터는 준비와 게임 참여, 퇴장의 과정을 거친다. 이러한 단계를 거칠 때마다 자동으로 호출되는 함수들이 있다. 액터는 여러가지의 컴포넌트(component) 조합으로 이루어질 수 있는데, 이러한 컴포넌트들을 모두 초기화 및 설정하는 과정은 준비 단계에서 이루어진다. 컴포넌트를 설정하기 전에 PreInitializeComponents라는 함수가 호출 되고, 이후에 InitializeComponents 함수가 호출되어 컴포넌트들을 초기화한다. 컴포넌트들의 초기화가 완료되면 PostInitializeComponents 라는 함수가 호출된다. 위의 준비 단계가 끝나면 액터는 게임에 참여하게 되고, 이때 최초로 1번 BeginPlay 함수가 호출한다. 이후 매 프레임마다 Tick 함수를 호출한다.. 2021. 7. 29.