ゲームプレイ要素をブループリントに公開する

ゲームプレイ要素をブループリントに公開するテクニカル ガイド (ゲームプレイ プログラマー向け)

ブループリントで作業を行うとコードに高い柔軟性もたせることができるため、プログラマーにとって多くのメリットがあります。例えば、 ゲームプレイ デザイナーが、ゲームに新しい種類の武器を実装する場合を考えてみましょう。プログラマーは 武器のコーディングを今まで通りに行いますが、 発射レートと Fire() 関数などの重要な機能は公開することになります。プレイのテスティングの結果、 銃の発射レーをカーブで機能させるように変更する必要があるとデザイナーが判断した場合、銃の発射レートを再コーディングしてゲームを再コンパイルするのではなく、デザイナーは単にブループリントで直接発射レートを変更することができます。 その結果、デザイナーもプログラマーも 作業時間を短縮することができます。

プロジェクト内で C++/Blueprint を最適に配分する方法、またはブループリントへ公開する API の作成で気をつけておくヒントについては、 ブループリント向けの C++ プログラミングのガイドライン をご覧ください。

クラスをブループリントで利用可能にする

クラスから拡張するブループリントを作成するためには、クラスを Blueprintable (ブループリントで利用可能) として定義しなければなりません。 これを行うには、クラス定義の前に、UCLASS() マクロ内にこのキーワードを追加します。このキーワードによって ブループリント システムはそのクラスを認識して、[New Blueprint] ダイアログのクラス リストに表示し、 作成中のブループリントの親として選択可能にします。

ブループリントで利用可能なクラス宣言の最も単純な形式は、以下のようなものになります。

    UCLASS(Blueprintable)
    class AMyBlueprintableClass :AActor
    {
        GENERATED_BODY()
    }

キーワード

説明

Blueprintable

ブループリントの作成に使用できる基本クラスとして公開されるクラスです。これを継承していない場合、初期設定は NotBlueprintable となります。これはサブクラスで継承されます。

BlueprintType

ブループリントの変数に使用できる型としてクラスを公開します。

NotBlueprintable

ブループリントの作成に使用できない基本クラスに指定します。ブループリントで利用可能なキーワードが指定された親クラスの効果を打ち消します。

読み取り / 書き込み可能なプロパティ

C++ クラスで定義した変数を、当該クラスから拡張するブループリントに公開するためには、その変数は、 以下の一覧のキーワードのいずれかひとつを使用して、関数定義の前の UPROPERTY() マクロ内で定義しなければなりません。 こうしたキーワードは、ブループリント システムに変数を認識させ、[My Blueprint] パネルに表示されるようにし、 その値を設定したり、その値にアクセスできるようにします。

    //キャラクターのヘルス
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Character")
    float health;

キーワード

説明

BlueprintReadOnly

このプロパティはブループリントで読み取り可能ですが、修正はできません。

BlueprintReadWrite

このプロパティはブループリントでの読み取りと書き込みが可能です。

マルチキャスト デリゲートのキーワード

BlueprintAssignable

ブループリントでの割り当てのために公開するプロパティです。

BlueprintCallable

ブループリントのグラフでの呼び出しのために公開するプロパティです。

実行可能な関数およびオーバーライド可能な関数

ブループリントからネイティブ関数を呼び出すためには、その関数が以下の一覧のキーワードのいずれかひとつを使用して 関数定義の前の UFUNCTION() マクロ内で定義されていなければなりません。このキーワードによってブループリント システムは コンテキスト メニューまたはパレットで表示されるように関数を認識し、グラフへの追加や、実行を可能にします。 イベントの場合は、オーバーライドおよび実行を可能にします。

ブループリントで呼び出し可能な関数の宣言の最も単純な形式は、以下のようなものになります。

    //武器を発砲する
    UFUNCTION(BlueprintCallable, Category="Weapon")
    void Fire();

関数シグネチャを作成する場合、リファレンスでパラメータ パスを作成すると、それがブループリント ノード上の出力ピンになることに注目してください。リファレンスでパラメータ パスを作成するには、 UPARAM() マクロを使います。

UParam.png

    UFUNCTION(BlueprintCallable, Category = "Example Nodes")
    static void HandleTargets(UPARAM(ref) TArray<FVector>& InputLocations, TArray<FVector>& OutputLocations);

UPARAM() を使ってもピンの表示名を変更することができます。例えば、KismetMathLibrary の MakeRotator 関数は UPARAM()DisplayName をキーワードとして使って ロール (進行軸回転)、ピッチ (上下動)、ヨー (左右回転) パラメータのブループリントでの表示を変更します。

UParam2.png

    /** 度単位で与えられた回転値からローテーター{Roll, Pitch, Yaw}を作成します。 */
    UFUNCTION(BlueprintPure, Category="Math|Rotator", meta=(Keywords="construct build rotation rotate rotator makerotator", NativeMakeFunc))
    static FRotator MakeRotator(
    UPARAM(DisplayName="X (Roll)") float Roll,
    UPARAM(DisplayName="Y (Pitch)") float Pitch,
    UPARAM(DisplayName="Z (Yaw)") float Yaw);

キーワード

説明

ブループリントからネイティブへのコミュニケーション

BlueprintCallable

ブループリントから呼び出し可能なネイティブ関数です。呼び出し先のオブジェクト、あるいは他のグローバル ステートを変更するネイティブ コードを実行します。つまり、この関数は「スケジューリング」しなければなりません。または、他のノードに対して実行する相対的な順序を明示的に示されなければなりません。これは、白色の実行ラインで行います。すべてのブループリントで呼び出し可能な関数は、白色の実行ラインに沿って表示される順序で呼び出されます。

BlueprintPure

ブループリントから呼び出し可能なネイティブ関数です。呼び出し先のオブジェクト、あるいは他のグローバル ステートを何も変更しないネイティブ コードを実行します。つまりこのノードを呼び出しでは何も変更されず、単に入力を受け入れ、出力を示します。これらは、数学のノード (+、 - 、 * など) のようなものです。または変数の getter または永久不変の変数のようなものです。こうしたものをスケジューリングする必要はありません。また、白色の実行ラインと接続しません。こうしたノードで作成されたデータをどの BlueprintCallable ノードが必要としているかに基づいて、コンパイラはこれらを自動的に認識します。

ネイティブからブループリントへのコミュニケーション

BlueprintImplementableEvent

ネイティブ関数をブループリントに呼び出す代表的な方法です。仮想関数をブループリントに実装しているようなものです。実装されていない場合、この関数呼び出しは無視されます。BlueprintImplementableEvent が戻り値または出力パラメータを持たない場合、イベントとして表示され、右クリック してブループリントのイベント グラフで選択して利用できるということを覚えておいてください。戻り値または出力パラメータがあれば、[My Blueprints] タブにリスト表示され、右クリック して [implement] 関数を選択することでオーバーライドが可能になります。BlueprintImplementableEvents は関数のネイティブ実装を持たないことにご注意ください。

BlueprintNativeEvent

上記と同じです。ただし、この関数にはネイティブのデフォルト実装があり、ブループリントがその関数をオーバーライドしなければ呼び出されます。ブループリントが実装していないデフォルトのビヘイビアの機能を、ブループリントが必要に応じてオーバーライドできるようにしたい場合に便利です。これは負荷が大きいので、必要な場合に限り使用します。BlueprintNativeEvent をオーバーライドしても、必要に応じてネイティブ実装を呼び出すことができます。イベントまたは関数エントリを 右クリック し、[Add call to parent (親に呼び出しを追加)] を選択して行います。

タグ
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル