アクタのスポーン

ゲームプレイコードでアクタの新インスタンスを作成する方法

SpawnActor メソッド

アクタ の新インスタンスを作成するプロセスは スポーン として知られています。アクタのスポーンは UWorld::SpawnActor() 関数で実行します。この関数は指定されたクラスの新インスタンスを作成し、 新規に作成されたアクタへポインターを返します。UWorld::SpawnActor() 関数は、 階層にある Actor クラスから継承されるクラスのインスタンスの作成時のみに使用されます。

    AActor* UWorld::SpawnActor
    (
        UClass*         Class,
        FName           InName,
        FVector const*  Location,
        FRotator const* Rotation,
        AActor*         Template,
        bool            bNoCollisionFail,
        bool            bRemoteOwned,
        AActor*         Owner,
        APawn*          Instigator,
        bool            bNoFail,
        ULevel*         OverrideLevel,
        bool            bDeferConstruction
    )

パラメータ

説明

Class

スポーンされるアクタのクラスを指定する UClass 。

InName

(任意)スポーンされるアクタの Name として割り当てる FName。値が指定されない場合、スポーンされたアクタの名前は [Class]_[Number] の形式で自動生成されます。

Location

(任意)アクタをスポーンする初期位置を設定する FVector です。

Rotation

(任意)アクタと一緒にスポーンする初期回転を設定する FRotator です。

Template

(任意)新規アクタのスポーン時にテンプレートとして使用する AActor です。スポーンされたアクタを、テンプレート アクタのプロパティ値を使用して初期化します。テンプレート アクタが指定されない場合、スポーンされたアクタの初期化にはクラス デフォルト オブジェクト (CDO) を使用します。

bNoCollisionFail

(任意)アクタのスポーン時にコリジョンテストを実行するかどうかを決定する bool です。True の場合、ルート コンポーネントまたはテンプレート アクタのコリジョン設定に関係なく、アクタのスポーン時にコリジョンテストは実行されません。

bRemoteOwned

(任意) bool です。

Owner

(任意)スポーンされたアクタを所有する AActor です。

Instigator

(任意)スポーンされたアクタによって与えられたダメージの原因となる APawn です。

bNoFail

(任意)特定の条件に満たなかった場合にスポーンを成功させるか否かを決定する booltrue の場合、スポーンされているクラスが bStatic=true であるため、もしくはテンプレート アクタのクラスはスポーンされているアクタのクラスとは異なるため、スポーンは失敗しません。

OverrideLevel

(任意)例えばアクタの Outer など、アクタをスポーンする ULevel です。レベルが指定されない場合、OwnerOuter を使用。Owner が指定されない場合、永続的なレベルを使用します。

bDeferConstruction

(任意)コンストラクション スクリプトの実行を決定する booltrue の場合、スポーンされたアクタ上でコンストラクション スクリプトは実行されません。アクタが ブループリント からスポーンされた時のみ適用します。

戻り値

AActor ポインター形式のスポーンされたアクターです。戻り値は Class パラメータによって指定された派生タイプへ変換するため、キャストしなくてはいけません。

使用方法

    AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location);

Spawn 関数のテンプレート

スポーンされたアクタをより扱いやすくするために、最も一般的に使用されている関数のテンプレートをいくつか用意しました。これらのテンプレートは、パラメータのテンプレートのサブセットを最小限にとどめることにより容易にアクタを作成し、 返されるアクタのタイプの指定が可能となります。

Spawn T Instance, Return T Pointer

この関数テンプレートは、同位置に、同回転で、アクタのルートコンポーネントがスポーン操作を実行時に、テンプレートクラス T のインスタンスをスポーンします。 そしてテンプレートクラスとして同タイプのインスタンスへポインターを返します。例えば T* です。 所有するアクタ、駆動するポーン、またスポーンされたアクタが侵害されるかワールドに存在する別のアクタと衝突する場合スポーン操作を失敗させるかの指定をすることができます。

    /** ルートコンポーネントのデフォルトの回転と平行移動を優先します。 */
    template< class T >
    T* SpawnActor
    (
        AActor* Owner=NULL,
        APawn* Instigator=NULL,
        bool bNoCollisionFail=false
    )
    {
        return (T*)(GetWorld()->SpawnActor(T::StaticClass(), NAME_None, NULL, NULL, NULL, bNoCollisionFail, false, Owner, Instigator));
    }

使用方法

    MyHUD = SpawnActor<AHUD>(this, Instigator);

Spawn T Instance with Transform、 Return T Pointer

この関数テンプレートは、指定された Location に指定された Rotation でテンプレートクラス T のインスタンスをスポーンします。そしてテンプレートクラスとして同タイプのインスタンスへポインターを返します。 例えば T* です。位置と回転に加え、所有するアクタ、ポーンの扇動、またスポーンされたアクタが侵害された場合、スポーン操作を失敗させるかまたは衝突させるかの決定、 ワールドに存在する別のアクタの指定をすることができます。

    /** クラスTをスポーンして返し、強制的にワールドポジションを設定します。 */
    template< class T >
    T* SpawnActor
    (
        FVector const& Location,
        FRotator const& Rotation,
        AActor* Owner=NULL,
        APawn* Instigator=NULL,
        bool bNoCollisionFail=false
    )
    {
        return (T*)(GetWorld()->SpawnActor(T::StaticClass(), NAME_None, &Location, &Rotation, NULL, bNoCollisionFail, false, Owner, Instigator));
    }

使用方法

    Controller = SpawnActor<AController>(GetLocation(), GetRotation(), NULL, Instigator, true);

Spawn Class Instance, Return T Pointer

この関数テンプレートは、同位置に、同回転で、アクタのルートコンポーネントがスポーン操作を実行時に、指定されたクラスのインスタンスをスポーンします。 そしてテンプレートクラスとして同タイプのインスタンスへポインターを返します。例えば T* です。指定した Class は、テンプレートクラス T の子でなくていはいけません。クラスに加え、 所有するアクタ、ポーンの扇動、またスポーンされたアクタが侵害された場合、スポーン操作を失敗させるかまたは ワールドに存在する別アクタと衝突させるかを指定することができます。

    /** 指定されたクラスをスポーンし、クラス T のポインタを返します。 */
    template< class T >
    T* SpawnActor
    (
        UClass* Class,
        AActor* Owner=NULL,
        APawn* Instigator=NULL,
        bool bNoCollisionFail=false
    )
    {
        return (Class != NULL) ?Cast<T>(GetWorld()->SpawnActor(Class, NAME_None, NULL, NULL, NULL, bNoCollisionFail, false, Owner, Instigator)) :NULL;
    }

使用方法

    MyHUD = SpawnActor<AHUD>(NewHUDClass, this, Instigator);

Spawn Class Instance with Transform, Return T Pointer

この関数テンプレートは、指定された Location に指定された Rotation で、指定された Class のインスタンスをスポーンします。そしてテンプレートクラスとして同タイプのインスタンスへポインターを返します。 例えば T* です。指定した Class は、テンプレートクラス T の子でなくていはいけません。クラス、位置、回転に加え、 所有するアクタ、ポーンの扇動、またスポーンされたアクタが侵害された場合、スポーン操作を失敗させるかまたはワールドに存在する別アクタと衝突させるかを指定することができます。

    /** 指定されたクラスをスポーンし、クラス T のポインタを返します。 */
    template< class T >
    T* SpawnActor
    (
        UClass* Class,
        FVector const& Location,
        FRotator const& Rotation,
        AActor* Owner=NULL,
        APawn* Instigator=NULL,
        bool bNoCollisionFail=false
    )
    {
        return (Class != NULL) ?Cast<T>(GetWorld()->SpawnActor(Class, NAME_None, &Location, &Rotation, NULL, bNoCollisionFail, false, Owner, Instigator)) :NULL;
    }

使用方法

APawn* ResultPawn = SpawnActor<APawn>(DefaultPawnClass, StartLocation, StartRotation, NULL, Instigator);
タグ
このページは Unreal Engine の前のバージョン用です。現在リリースされている Unreal Engine 5.3 に対して更新は行われていません。
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル