Blueprintから自作したc++関数を呼ぶ方法

Blueprint上で自作した関数を呼ぶ方法を解説します。
例として、PaperCharacterクラスを親に持つBlueprintクラスを作成しており、
そのクラスに自作の関数を作ってBlueprint上で呼びだしたい
とします。

PaperCharacterを親にもつc++ファイルを作成する

上部メニューからファイル → 新規c++ファイルを作成などからc++ファイルを作成し、
親クラス入力欄に自作関数を追加したいBlueprintの親クラスを入力してください。
今回の例ですと、PaperCharacterになります。
そして、ファイル名をAMyPaperCharacterとしました。

すると、cpp・headerファイルが作られます。
ヘッダーファイルのの初期コードは以下のようになっています。


// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "PaperCharacter.h"
#include "MyPaperCharacter.generated.h"

/**
 *
 */
UCLASS()
class DOCAN_API AMyPaperCharacter : public APaperCharacter
{
	GENERATED_BODY()



};
      

ここに、自作関数isOutStageを追加します。
まず、ヘッダーファイルに関数の定義をします。


// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "PaperCharacter.h"
#include "MyPaperCharacter.generated.h"

/**
 *
 */
UCLASS()
class DOCAN_API AMyPaperCharacter : public APaperCharacter
{
	GENERATED_BODY()

  UFUNCTION(BlueprintCallable, Category="AMyPaperCharacter")
  bool isOutStage(float outUpY,float outDownY,float outLeftX,float outRightX);

};
      

自作関数をBlurprintで呼び出したい場合は、UFUNTIONマクロを使い、BlueprintCallableを引数として渡します。
BlueprintCallableは文字通りBlueprintで呼び出し可能であることを示します。
また、CategoryにAMyPaperCharacterと引数に渡しましたが、この設定をすることにより下図のように、Blueprintノードを検索した時にカテゴリーとして表示されるようになります。

続いて、関数の中身をcppファイルに関数の中身を実装します。
中身の実装を終えたら、buildしてください。
私はXcodeを使っており、unrealEditorと結びつけているので、buildをすると、
HotReload機能により、unrealEditorにコンパイル状態が反映されます。


// Fill out your copyright notice in the Description page of Project Settings.

#include "MyPaperCharacter.h"

/**
    画面外とされる位置に出ているかどうかを返す
    trueならば一機失う処理を実行する
*/
bool AMyPaperCharacter::isOutStage(float outUpY,float outDownY,float outLeftX,float outRightX)
{
    FVector vector = GetActorLocation();
    // X方向の飛び出しチェック
    if(vector.X < 0){
        if(vector.X <= outLeftX){
            return true;
        }
    }
    else{
        if(vector.X >= outRightX){
            return true;
        }
    }
    // Y軸方向の飛び出しチェック(YはZに変換される)
    if(vector.Y < 0){
        if(vector.Y <= outDownY){
            return true;
        }
    }
    else{
        if(vector.Y >= outUpY){
            return true;
        }
    }
    return false;
}
      

Blueprint編集画面で親クラスを変更する

すでに作成済みのPaperCharacterを親にもつBlueprintクラスの親を変更することによって、
自作関数を呼び出せるようにします。
まず、対象のBlueprintクラスの編集画面に入ります。

編集画面から上部メニューよりクラスの設定 → タブメニューから詳細
を選択し、クラスオプション → 親クラス欄
にMyPaperCharacterを設定してください。

親クラスを変更すれば、先ほど定義したisOutStageをBlueprintで呼び出すことができます。
例として、イベントTickからドラッグアンドドロップし、isOutStageを呼び出してみました。

UnrealEngine4.19で確認しています。

このエントリーをはてなブックマークに追加