[UE4] C++ 생성자에서 블루프린트 자산을 로드하는 방법

먼저



실수나 더 좋은 방법이 있었을 경우에는 살짝 Twitter( @ 로사무 )나 코멘트, 수정 리퀘스트등으로 알려 받을 수 있으면 매우 고맙습니다.

작업환경



기사 내에서 사용하는 작업 환경은 다음과 같습니다.
  • 언리얼 엔진: 4.23.1
  • Visual Studio: Community 2017 or Community 2017 for Mac or Enterprise 2019

  • BP의 경로를 얻으십시오.



    로드할 BP를 마우스 오른쪽 버튼으로 클릭하여 메뉴를 표시하고 Copy Reference를 누릅니다.



    생성자에서 BP 로드


    ACPP_StartGameMode::ACPP_StartGameMode()
        :Super()
    {
        // ロードを行いたいBPのパスを指定. これは
        // C++からBPのクラスを参照する際には末尾に_cを付け足す.
        FString CharacterPath = "/Game/ThirdPersonBP/Blueprints/ThirdPersonCharacter.ThirdPersonCharacter_c";
    
        // ConstructorHelpersはコンストラクタ内でオブジェクトやオブジェクトのクラスを検索する機能を持つ.
        // アセットが存在しないかエラーでロードできない場合、プロパティにはnullptrが入る。
        static ConstructorHelpers::FObjectFinder<UClass> CharacterBP(*CharacterPath);
        TSubclassOf<AActor> ThirdPersonCharacter = CharacterBP.Object;
    
        if (ThirdPersonCharacter != nullptr)
        {
            DefaultPawnClass = ThirdPersonCharacter;
        }
    }
    

    여기서 패스명이 잘못되어 있는 경우(「'」가 문두, 문말에 대해서 있거나, 「_c」가 들어가 있지 않다) 경우에는, ConstructorHelpersInternalFindOrLoadObject 로 브레이크 되어 버릴 가능성이 있습니다. 조심하자.

    이 경우의 로드 방법이라고 하면, constructor 으로 위와 같은 로드를 실시하고 있는 에셋을 생성했을 때에, 기술하고 있는 에셋도 단번에 로드되기 때문에, 메모리 사용량이 부풀어 올 수 있는 일이 있습니다.

    이런 경우에 런타임에서 타이밍을 보고 로드할지 여부를 결정하는 방법이 있으므로 그쪽 다음 기사에서 확인해 갑니다.

    다음 기사: 나중에 링크 만들기

    좋은 웹페이지 즐겨찾기