Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

Visual Studio

Unreal C++ 관련 팁 모음 (UE5 기준) 본문

Game Engine

Unreal C++ 관련 팁 모음 (UE5 기준)

emacser 2024. 1. 16. 22:53

Unreal

  • Unreal Object System
    • UObject는 nullptr과 비교하지 않고 IsValid를 사용하여 검사한다.
    • UObject를 상속받은 멤버 변수에 raw pointer 대신 TObjectPtr을 사용한다.
    • TWeakObjectPtr는 UObject보다 더 정확한 IsValid 체크를 할 수 있도록 도와준다. 해당 객체가 댕글링되면 nullptr로 세팅된다.
  • Math 관련
    • FVector, FMatrix, FBox, FBoxSphereBounds 등의 수학 클래스들은 기본 생성자에서 명시적으로 멤버 변수를 초기화해주지 않는다. 따라서 생성자 인자로 EForceInit::ForceInit을 넣거나 직접 값을 초기화 해주는 것을 권장한다.
  • Package 관련
    • Package Path: 해당 패키지가 '속한' 경로
      • ex) 애셋 경로가 '/Game/SBXVS01/ExampleAsset.ExampleAsset' 이면 '/Game/SBXVS01'이 Package Path
    • Package Name: 해당 패키지의 경로
      • ex) 애셋 경로가 '/Game/SBXVS01/ExampleAsset.ExampleAsset' 이면 '/Game/SBXVS01/ExampleAsset'이 Package Name
    • Package 경로 관련 자주 사용하는 함수들
      • UObjectBaseUtility::GetPathName() (member function)
      • FPackageName::ObjectPathToPackageName() (static function)
      • FPackageName::LongPackageNameToFilename() (static function)
      • FPackageName::FilenameToLongPackageName() (static function)
      • FPackageName::GetLongPackagePath() (static function)
      • FPackageName::GetLongPackageAssetName() (static function)
    • 언리얼 시스템과 관련된 파일 확장자를 사용할 때는 'TEXT(".uasset")' 처럼 하드코딩하지 말고 아래 함수들을 적극 사용하자.
      • FPackageName::GetAssetPackageExtension()
      • FPackageName::GetMapPackageExtension()
      • FPackageName::GetTextAssetPackageExtension()
      • FPackageName::GetTextMapPackageExtension()

      • FPackageName::IsPackageExtension()
      • FPackageName::IsAssetPackageExtension()
      • FPackageName::IsMapPackageExtension()
      • FPackageName::IsTextPackageExtension()
      • FPackageName::IsTextAssetPackageExtension()
      • FPackageName::IsTextMapPackageExtension()

Slate

  • 위젯 클래스만 정의되어 있거나 위젯 클래스가 핵심인 파일명에는 접두사 S를 붙인다.
  • Construct에서 생성한 위젯을 직접 참조하는 변수를 검사할때는 check 구문을 사용하자. (invalid한 경우는 100% 프로그래머가 실수한 것이기 때문)
    • 이외에도 프로그래머가 실수한 것이 아니면 invalid되는 것이 불가능한 경우는 check 구문을 사용한다. (버그를 빠르게 발견하기 위함.)
  • 구조상 상위의 객체를 참조할 때는 TSharedPtr 대신 TWeakPtr을 사용하자.
    • Delegate 패턴을 사용하는 것이 더 적절한 경우도 있다. (명백히 구조상으로 상위에 있을때만 사용 권장)
  • VAlign, HAlign으로 원하는 위치에 위젯을 배치하는 것이 불가능한 경우 SSpacer를 활용하자.
  • SBorder는 기본 Padding 값이 2.0 이므로 항상 명시적으로 Padding 값을 설정하는 것이 좋다.