【UE4】클래스로부터 UPROPERTY의 값을 취득하는 방법에 대해서
개요
UPROPERTY를 부여한 변수는 UE의 UProperty 클래스로 정보를 저장합니다.
변수명이나 그 값이 포함되어 있습니다.
요 전날 조사한 메모를 정리해 둡니다.
얻는 방법
UE4에 검색하려는 클래스의 멤버 변수 이름을 전달하여,
그 Uproperty를 얻는 방법이 있으므로 그쪽을 사용합니다.
Foo.cpp// 取得したいクラスの StaticClass と、
// そのクラスに宣言したUPROPERTY付きの変数名を引数で渡します.
UProperty* Property = FindField<UProperty>( UMyClass::StaticClass(), TEXT("FieldName"));
이 방법으로 모든 멤버 변수를 얻을 수 있습니다.
또, 취득한 UProperty 클래스는 형태 마다 상속된 클래스가 되고 있습니다.
예를 들면
Sample.h
USTRUCT()
struct FStatus
{
:
UPROPERTY()
int32 HitPoint;
:
};
UCLASS()
class AHuman : AActor
{
public:
:
UPROPERTY()
FStatus* Property;
};
라는 클래스에서 값을 검색한다고 가정합니다.
Human이 가지는 Property 는 struct 의 변수이므로 UStructProperty 클래스가 되어 있습니다.
캐스트하여 해당 유형의 값을 가져올 수 있습니다.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );
// UStructPropertyが持つstruct情報を取得します.
// 構造体が持つメンバー変数 HitPoint が取得できる想定です.
UField* Field = StructProperty->Struct->Children;
클래스가 가지는 UPROPERTY를 모두 취득한다
마지막으로 응용편입니다.
UField 클래스는 멤버 변수 Next에 다음 UField 포인터를 갖습니다.
이를 따라 모든 값을 얻을 수 있습니다.
샘플
// 適当な構造体を表します.
USTRUCT()
struct FMyStruct
{
:
UROPERTY()
int32 Value1;
UPROPERTY()
int32 Value2;
:
};
// 適当なクラスを表します.
UCLASS()
class UMyClass : UObject
{
:
UPROPERTY()
FMyStruct* MyStruct;
:
};
// UMyClass に含まれる変数を取得します.
UProperty* Property = FindField<UProperty>(UMyClass::StaticClass(), TEXT("MyStruct"));
// 構造体UPropertyへキャストします.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );
// その構造体が持つメンバー変数を順番に取得します.
UField Field = StructProperty->Struct->Children;
// Field(MyStruct)が持つメンバー変数を取得します.
while ( Field != nullptr )
{
:
:
// FMyStruct の Value1、Value2 の順にループします.
:
:
// 次の要素を受け取ります.
Field = Field->Next;
}
요약
게임 측의 처리에서는 별로 사용하지 않는다고 생각합니다만,
디버깅 기능으로 사용할 수 있다고 생각합니다 ![:ok_hand:](https://s1.md5.ltd/image/2eb3f952b0f66f95ff043f696ce95911.png)
디버깅 기능과 문서를 만들 때 변수 이름을 추출하는 데 사용했습니다.
Reference
이 문제에 관하여(【UE4】클래스로부터 UPROPERTY의 값을 취득하는 방법에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/810b192b1e91fbb25ce7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
UE4에 검색하려는 클래스의 멤버 변수 이름을 전달하여,
그 Uproperty를 얻는 방법이 있으므로 그쪽을 사용합니다.
Foo.cpp
// 取得したいクラスの StaticClass と、
// そのクラスに宣言したUPROPERTY付きの変数名を引数で渡します.
UProperty* Property = FindField<UProperty>( UMyClass::StaticClass(), TEXT("FieldName"));
이 방법으로 모든 멤버 변수를 얻을 수 있습니다.
또, 취득한 UProperty 클래스는 형태 마다 상속된 클래스가 되고 있습니다.
예를 들면
Sample.h
USTRUCT()
struct FStatus
{
:
UPROPERTY()
int32 HitPoint;
:
};
UCLASS()
class AHuman : AActor
{
public:
:
UPROPERTY()
FStatus* Property;
};
라는 클래스에서 값을 검색한다고 가정합니다.
Human이 가지는 Property 는 struct 의 변수이므로 UStructProperty 클래스가 되어 있습니다.
캐스트하여 해당 유형의 값을 가져올 수 있습니다.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );
// UStructPropertyが持つstruct情報を取得します.
// 構造体が持つメンバー変数 HitPoint が取得できる想定です.
UField* Field = StructProperty->Struct->Children;
클래스가 가지는 UPROPERTY를 모두 취득한다
마지막으로 응용편입니다.
UField 클래스는 멤버 변수 Next에 다음 UField 포인터를 갖습니다.
이를 따라 모든 값을 얻을 수 있습니다.
샘플
// 適当な構造体を表します.
USTRUCT()
struct FMyStruct
{
:
UROPERTY()
int32 Value1;
UPROPERTY()
int32 Value2;
:
};
// 適当なクラスを表します.
UCLASS()
class UMyClass : UObject
{
:
UPROPERTY()
FMyStruct* MyStruct;
:
};
// UMyClass に含まれる変数を取得します.
UProperty* Property = FindField<UProperty>(UMyClass::StaticClass(), TEXT("MyStruct"));
// 構造体UPropertyへキャストします.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );
// その構造体が持つメンバー変数を順番に取得します.
UField Field = StructProperty->Struct->Children;
// Field(MyStruct)が持つメンバー変数を取得します.
while ( Field != nullptr )
{
:
:
// FMyStruct の Value1、Value2 の順にループします.
:
:
// 次の要素を受け取ります.
Field = Field->Next;
}
요약
게임 측의 처리에서는 별로 사용하지 않는다고 생각합니다만,
디버깅 기능으로 사용할 수 있다고 생각합니다 ![:ok_hand:](https://s1.md5.ltd/image/2eb3f952b0f66f95ff043f696ce95911.png)
디버깅 기능과 문서를 만들 때 변수 이름을 추출하는 데 사용했습니다.
Reference
이 문제에 관하여(【UE4】클래스로부터 UPROPERTY의 값을 취득하는 방법에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pino_tabetai/items/810b192b1e91fbb25ce7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 適当な構造体を表します.
USTRUCT()
struct FMyStruct
{
:
UROPERTY()
int32 Value1;
UPROPERTY()
int32 Value2;
:
};
// 適当なクラスを表します.
UCLASS()
class UMyClass : UObject
{
:
UPROPERTY()
FMyStruct* MyStruct;
:
};
// UMyClass に含まれる変数を取得します.
UProperty* Property = FindField<UProperty>(UMyClass::StaticClass(), TEXT("MyStruct"));
// 構造体UPropertyへキャストします.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );
// その構造体が持つメンバー変数を順番に取得します.
UField Field = StructProperty->Struct->Children;
// Field(MyStruct)が持つメンバー変数を取得します.
while ( Field != nullptr )
{
:
:
// FMyStruct の Value1、Value2 の順にループします.
:
:
// 次の要素を受け取ります.
Field = Field->Next;
}
게임 측의 처리에서는 별로 사용하지 않는다고 생각합니다만,
디버깅 기능으로 사용할 수 있다고 생각합니다
![:ok_hand:](https://s1.md5.ltd/image/2eb3f952b0f66f95ff043f696ce95911.png)
디버깅 기능과 문서를 만들 때 변수 이름을 추출하는 데 사용했습니다.
Reference
이 문제에 관하여(【UE4】클래스로부터 UPROPERTY의 값을 취득하는 방법에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pino_tabetai/items/810b192b1e91fbb25ce7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)