[UE5] TIL - 9 <meta>

ChangJin·2024년 3월 20일
0

Unreal Engine5

목록 보기
36/102
post-thumbnail

2024-03-20

깃허브!
https://github.com/ChangJin-Lee/ARproject
https://github.com/ChangJin-Lee/ToonTank

느낀점
private에서도 블루프린트 이벤트 그래프에 노출 시킬 수 있는 방법이 있다. PROPERTY에서 meta 지정자를 추가해주면 되는데 생각보다 다양한 일들이 가능한 것 같다. 특정 메시의 위치를 가져오거나 위치를 설정하거나 혹은 캡슐콜라이더를 가져와서 재밌는 일들이 가능하다.

TIL

  • PROPERTY meta

PROPERTY meta

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/metadata-specifiers-in-unreal-engine

  • 클래스, 인터페이스, 구조체, 열거형, 열거형 값, 함수 또는 프로퍼티를 선언할 때 메타데이터 지정자 를 추가하여 엔진 및 에디터의 다양한 측면과 상호작용하는 방식을 제어할 수 있습니다. 각 데이터 구조 또는 멤버 타입에는 자체적인 메타데이터 지정자 목록이 있습니다. 라고 한다.

  • 공식 문서에서 엄청 다양한 프로퍼티 메타데이터 지정자가 있는데 그 중에서 AllowPrivateAccess를 사용해보았다.


  • 이전 강의에서 내운 배용에 Private Access 방법, Category 추가 방법을 배웠다. Category는 인스턴스 창에 있는 그 카테고리다.

  • private에서 블루프린트 이벤트 그래프로 값을 노출시키려면 어떻게 해야 할까? 다음처럼 하면 에러가 발생한다.


 	private:
	UPROPERTY()
	class UCapsuleComponent* CapsuleComp;
	UPROPERTY()
	UStaticMeshComponent* BaseMesh;
	UPROPERTY()
	UStaticMeshComponent* TurretMesh;
	UPROPERTY()
	// UStaticMeshComponent* ProjectileSpawnPoint;
	USceneComponent* ProjectileSpawnPoint;
	
	UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
	int32 VisibleAnywhereInt2 = 32;

D:\Github\ToonTank\ToonTanks\Source\ToonTanks\BasePawn.h(62): Error: BlueprintReadWrite should not be used on private members

  • 잘 읽어보면 BlueprintReadWrite는 private 멤버에서는 사용될 수 없다는 경고문이 등장한다. 그럼 어쩌라는걸까? 이렇게 하면 된다

	UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))
	int32 VisibleAnywhereInt2 = 32;

  • UPROPERTY 매크로를 통해 메타데이터를 사용할 수 있으며 메타데이터는 다른 데이터에 대한 정보를 주는 데이터이다. 즉 meta에서 AllowPrivateAccess를 true로 바꾸면 private이라고 해도 노출이 가능하다.

  • 다만 private 액세스를 메타로 만드는게 좋은 생각이 아니라고 생각할경우 C++ 측에서 캡슐화를 사용하면 블루프린트에서 이를 사용하고 변경할 수 있다. 실제로 블루프린트에서는 별개의 월드로 취급된다. 일반적으로 유저가 값을 변경할지도 모르는 정보는 블루프린트로 노출시키지 않는다.


	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	class UCapsuleComponent* CapsuleComp;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	UStaticMeshComponent* BaseMesh;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	UStaticMeshComponent* TurretMesh;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	// UStaticMeshComponent* ProjectileSpawnPoint;
	USceneComponent* ProjectileSpawnPoint;

  • 이렇게 카테고리를 추가할 수도 있다.
  • 이거. 이미 Super Duper Variables가 추가되어 있는걸 알 수 있는데 내가 따로 만들어낸 Category이다.
  • 이렇게하고 폰 블루프린트에서 각 메시를 설정해주면 플레이어 블루프린트를 만들 준비가 끝났다. 하위 C++ 클래스 생성하는 법 배울예정이다!
profile
Unreal Engine 클라이언트 개발자

0개의 댓글