자주사용하는 URPOPERTY안에 들어가는 Attribute들... GC에 의해 관리가 되도록 UPROPERTY를 붙이고 BlueprintReadOnly, Category정도만 생각없이 쓰다가 최근에 Lyra클론 코딩하면서 다양한 속성값들을 쓰게 되었고 아무 생각없이 쓰다 답답하여 글을 한번 정리하게 되었습니다.
공식문서를 봐도 아키타입? 어쩌구 저쩌구 하던데 머선 말인지 잘 모르겠어서 여러 글을 참고하다 이해하게 되어 따로 정리 하게 되었습니다.
일단 아키타입과 인스턴스가 뭔지 결론 부터 보면은
아래 MyTestActor라는 cpp클래스를 상속받은 블루프린트 클래스가 BP_MyTestActor(아키타입)이고 Level에 배치한 BP_MyTestActor는 BP_TestActor의 인스턴스입니다.
UCLASS()
class TESTSTUDY_API AMyTestActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyTestActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
private:
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category=Custom, meta=(AllowPrivateAccess=true))
class UStaticMeshComponent* SMComp;
UPROPERTY(VisibleInstanceOnly, Category = Custom, meta = (AllowPrivateAccess = true))
int32 MyValue1;
UPROPERTY(VisibleDefaultsOnly, Category = Custom, meta = (AllowPrivateAccess = true))
int32 MyValue2;
UPROPERTY(EditAnywhere, Category = Custom, meta = (AllowPrivateAccess = true))
int32 MyValue3;
UPROPERTY(EditInstanceOnly, Category = Custom, meta = (AllowPrivateAccess = true))
int32 MyValue4;
UPROPERTY(EditDefaultsOnly, Category = Custom, meta = (AllowPrivateAccess = true))
int32 MyValue5;
};
MyValue1, 2, 3, 4, 5이렇게 정의를 해두었는데요
BP_MyTestActor 아키타입을 눌러서 Details에 들어가보면 MyVlaue2, 3, 5가 보이고 1, 4는 보이지 않습니다.
반면 레벨에 배치해놓은 BP_MyTestActor인스턴스를 보면
위처럼 MyValue1, 3, 4가 보이네요
이는 UPROPERY메크로에 들어간 프로퍼티 지정자 때문입니다.
- EditAnywhere : 에디터 내의 속성 창, 아키타입 및 인스턴스를 통해 이 속성을 편집할 수 있음을 나타냅니다.
- EditInstanceOnly : 속성 창에서 이 속성을 편집할 수 있지만 아키타입이 아닌 인스턴스에서만 편집할 수 있음을 나타냅니다.
- EditDefaultsOnly : 속성 창에서 이 속성을 편집할 수 있지만 아키타입이에서만 편집할 수 있음을 나타냅니다. 이 연산자는 Visible* 지정자와 호환되지 않습니다.
- VisibleAnywhere : 이 속성이 모든 속성 창에 표시되지만 편집할 수 없음을 나타냅니다.
- VisibleInstanceOnly : 이 속성은 아키타입이 아닌 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
- VisibleDefaultsOnly: 이 속성은 아키타입의 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
출처: https://coding-hell.tistory.com/81 [코딩지옥:티스토리]
좀더 자세한 지정자들은 아래 공식 문서를통해 확인이 가능합니다. https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Properties/Specifiers/
정리하면
MyValue1은 프로퍼티 지정자가 VisibleInstanceOnly이기 때문에 Instance에서만 Visible(보인다)라는 말이고
MyValue2는 VisibleDefaultsOnly이기 때문에 아키타입에서만 보이고(수정불가능) 레벨에 배치된 인스턴스는 보이지 않습니다.
MyValue3는 EditAnywhere이기 때문에 아키타입, 인스턴스 둘다 보이고 편집이 가능합니다.
MyValue4는 EditInstanceOnly이기 때문에 아키타입에서는 수정 불가능 보이지도 않고 인스턴스만 수정이 가능.
MyValue5는 EditDefaultsOnly이기 때문에 아키타입에서 수정가능 레벨에 배치된 인스턴스는 수정 불가능입니다.
'UE5' 카테고리의 다른 글
[UE] UE_INLINE_GENERATED_CPP_BY_NAME + LNK2005 (1) | 2024.01.03 |
---|---|
[UE] FObjectInitializer (1) | 2024.01.02 |
[UE] GetOuter() (0) | 2023.12.24 |
[UE] StaticClass (0) | 2023.11.29 |
[UE] Unreal5 Live Coding쓰면 지양??해야 하는 이유 (+빌드) (0) | 2023.05.02 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!