Web Remote Control エンドポイント リファレンス

Web Remote Control システムが提供するエンドポイントについて詳しく説明します。

Windows
MacOS
Linux

このページでは、Web Remote Control システムが提供するエンドポイントについて説明します。また、各エンドポイントを呼び出す際に含める必要がある、メッセージ ボディの形式について詳しく解説します。

PUT remote/object/call

現在エディタのメモリにある、指定された UObject によって公開される関数を呼び出すには、このエンドポイントを使用します。通常、このオブジェクトは、プロジェクトの現在のレベルまたはアセットのアクタになります。

ブループリントから呼び出せる関数であれば、どの関数でも呼び出すことができます。これには、BlueprintCallable 指定子を使用して C++ で定義されている関数や、完全にブループリントで定義および実装されている関数が含まれます。

このエンドポイントを呼び出す場合は、次のプロパティを設定した JSON ペイロードを渡す必要があります。

プロパティ

説明

objectPath

操作する UObject を一意に識別するパス。このパスを確認する方法の詳細については、 「UObject のパスについて」 を参照してください。

functionName

指定した UObject から呼び出す関数の名前。関数が C++ で定義されている場合、ブループリントに表示される表示名と元の名前が一致していない可能性があります。その場合は、C++ で定義されている関数名を使用します。

parameters

関数に渡すパラメータを定義するオブジェクト。

  • このオブジェクトの各プロパティの名前は、呼び出す関数が受け取るパラメータの名前である必要があります。

    関数が C++ で定義されている場合、ブループリント エディタに表示される値と元のパラメータ名が一致していない可能性があります。その場合は、C++ で定義されているパラメータ名を使用します。たとえば、以下のコードの 2 番目のパラメータには C++ の定義に合わせて「bSweep」を指定する必要がありますが、対応するブループリント ノードは Sweep という名前になっています。

  • プロパティの値は数値やブール値など、シンプルな値になることもあれば、オブジェクトを渡す必要がある関数の場合は、そのオブジェクトのプロパティをカプセル化している JSON オブジェクトを指定することもできます。Remote Control システムは、渡された値を使用して、必要な種類の新しいオブジェクトの作成を試みます。たとえば、以下のコードでは、自動的に NewLocation が使用されて、新しいベクターが作成されます。

関数が受け取るすべてのパラメータに、このオブジェクトのプロパティを含める必要はありません。省略したパラメータについては、Web Remote Control システムによって、適切なタイプのデフォルトのオブジェクトが作成されます。

generateTransaction

プロジェクトのトランザクション履歴にこの関数呼び出しを記録するかどうかを定義します。このプロパティを true に設定すると、以下の結果になります。

  • この関数による変更は、元に戻すことが可能になります。このプロジェクトの [Undo History (元に戻す操作の履歴)] パネルに、この関数呼び出しのエントリが記録されます。履歴に記録されると、Unreal Editor で作業しているユーザーは、この変更の影響をロールバックできます。このエントリは、どの関数を呼び出しても、常に、 「Remote Call Transaction Wrap (トランザクション ラップのリモート呼び出し)」 という名前で記録されます。 Remote transactions listed in the Undo History

  • マルチ ユーザー編集 セッションで作業している場合、接続しているその他のユーザーにも変更がレプリケートされます。

この呼び出しでは、呼び出した関数の戻り値と、関数の定義で指定されているその他の出力パラメータを含む JSON ペイロードが返されます。

リクエスト ボディ:

{
    "objectPath" :"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5",
    "functionName" :"SetActorLocation",
    "parameters" :{
        "NewLocation" :{"X" :100, "Y" :0, "Z" :30},   // These values are used to create a new Vector
        "bSweep" :true
    },
    "generateTransaction" :true
}

リクエストが成功すると、200 ステータスと次のレスポンス ボディが返されます。

{
    "SweepHitResult":{
        "bBlockingHit":true,
        "bStartPenetrating":false,
        "FaceIndex":-1,
        "Time":0.338644,
        "Distance":170.822,
        "Location":{ "X":100, "Y":0, "Z":429.178 },
        "ImpactPoint":{ "X":169, "Y":30, "Z":354 },
        "Normal":{ "X":-1.51964e-11, "Y":4.01851e-8, "Z":1 },
        "ImpactNormal":{ "X":-1.51964e-11, "Y":4.01851e-8, "Z":1 },
        "TraceStart":{ "X":100, "Y":0, "Z":600 },
        "TraceEnd":{ "X":100, "Y":0, "Z":100 },
        "PenetrationDepth":0,
        "Item":-1,
        "PhysMaterial":"",
        "Actor":"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Bump_StaticMesh",
        "Component":"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Bump_StaticMesh.StaticMeshComponent0",
        "BoneName":"None",
        "MyBoneName":"None"
    },
    "ReturnValue":true
}

ここでは、Engine/Source/Runtime/Engine/Classes/GameFramework/Actor.h ファイルの SetActorLocation() 関数の元の定義で SweepHitResult が出力パラメータとして定義されているため、この値が戻り値に含まれています。つまり、関数呼び出しによって生成されるデータ値への非 const 参照です。

PUT remote/object/property

現在エディタのメモリにある、指定された UObject によって公開されるプロパティの値にアクセスするには、このエンドポイントを使用します。通常、このオブジェクトは、アクタまたはアセットになります。

アクセスしている UObject が C++ クラスのインスタンスの場合、以下の制約に従って、C++ で定義されたすべてのクラスメンバをブループリとへアクセス可能なプロパティとして含みます。

アクセスしている UObject が Blueprint クラスのインスタンスの場合、以下の制約に従って、そのクラスによって所有されたすべてのブループリント変数を含みます。

このエンドポイントは、以下の特定の条件を満たすプロパティにしかアクセスできません。

  • プロパティが private または protected として定義されていない。

  • BlueprintGetter 関数または BlueprintSetter 関数が定義されていない。定義されている場合は、remote/object/property エンドポイントを使用して直接値を読み取る、または、書き込むのではなく、前述の remote/object/call エンドポイントとこれらの関数を使用する必要があります。

  • エディタ内のオブジェクトにアクセスする場合は、プロパティが EditAnywhere に設定されている必要がある。値を変更するには、プロパティが EditConst に設定されていてはなりません。

  • -game モードまたはプレイ イン エディタ (PIE) モードでオブジェクトにアクセスする場合は、オブジェクトが BlueprintVisible に設定されている必要がある。値を変更するには、プロパティが BlueprintReadOnly に設定されていてはなりません。

リクエスト メッセージの作成の仕方に応じて、次のことが可能です。

  • オブジェクトが公開するすべてのプロパティと、その現在の値をリクエストする。

  • 少なくとも読み取りアクセスを提供するプロパティの値をリクエストする。

  • 書き込みアクセスを提供するプロパティの値を設定する。

このエンドポイントを呼び出す場合は、次のプロパティを設定した JSON ペイロードを渡す必要があります。

プロパティ

説明

objectPath

操作する UObject を一意に識別するパス。このパスを確認する方法の詳細については、 「UObject のパスについて」 を参照してください。

property

読み取るまたは変更するプロパティの名前。READ_ACCESS を設定した呼び出しでこのプロパティを省略した場合、レスポンスでは指定された UObject の読み取り可能プロパティがすべて列挙されます。

access

プロパティへのアクセス リクエストの種類を定義します。これは次のいずれかの値になります。

  • READ_ACCESS。任意のプロパティの現在の値、または、指定した UObject のすべてのプロパティの現在の値をリクエストすることを示します。

  • WRITE_ACCESSpropertyValue オブジェクトで定義している 1 つ以上のプロパティに新しい値を設定することを示します。

  • WRITE_TRANSACTION_ACCESSWRITE_ACCESS と同じですが、プロパティの値の変更をプロジェクトのトランザクション履歴に記録します。これは、remote/object/call エンドポイントの generateTransaction プロパティに似ています。以下のような結果になります。

    • Unreal Editor の [Details (詳細)] パネルで実行された場合とまったく同じように、プロパティの変更が処理されます。その後さらに、このプロパティにリンクされている変更前および変更後イベントを処理するコードが、エディタ内で呼び出される場合があります。

    • マルチ ユーザー編集 セッションで作業している場合、接続しているその他のユーザーにも変更がレプリケートされます。

    • このオプションは、変更を元に戻せるようにします。このプロパティを true に設定すると、このプロジェクトの [Undo History (元に戻す操作の履歴)] パネルに、このプロパティの変更についてエントリが記録されます。履歴に記録されると、Unreal Editor で作業しているユーザーは、この変更の影響をロールバックできます。このエントリは、必ず、 「Remote Set Object Property (オブジェクト プロパティのリモート設定)」 という名前で記録されます。 オブジェクト プロパティのリモート設定

propertyValue

WRITE_ACCESS または WRITE_TRANSACTION_ACCESS を設定したリクエストを送る場合は、このオブジェクトを使用して、変更するプロパティと各プロパティに設定する新しい値を指定します。

これは、各フィールドの名前が UObject に指定した書き込み可能プロパティの名前と一致し、各フィールドの値がそのプロパティに設定する新しい値である JSON オブジェクトである必要があります。

呼び出しは、リクエストした情報または書き込みリクエストの結果を含む JSON ペイロードを返します。

すべてのプロジェクトの読み取り

リクエスト ボディ:

{
    "objectPath" :"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5",
    "access" :"READ_ACCESS"
}

リクエストが成功すると、200 ステータスと次のレスポンス ボディが返されます。

{
    "bStaticMeshReplicateMovement":false,
    "NavigationGeometryGatheringMode":"Default",
    "PrimaryActorTick":{
        "TickGroup":"TG_PrePhysics",
        "EndTickGroup":"TG_PrePhysics",
        "bTickEvenWhenPaused":false,
        "bCanEverTick":false,
        "bStartWithTickEnabled":true,
        "bAllowTickOnDedicatedServer":true,
        "TickInterval":0
    },
    "bHidden":false,
    "bOnlyRelevantToOwner":false,
    "bAlwaysRelevant":false,
    "bReplicateMovement":false,
    "bNetLoadOnClient":true,
    "bNetUseOwnerRelevancy":false,
    "bRelevantForLevelBounds":true,
    "bReplayRewindable":false,
    "bAllowTickBeforeBeginPlay":false,
    "bBlockInput":false,
    "bCanBeDamaged":false,
    "bFindCameraComponentWhenViewTarget":true,
    "bGenerateOverlapEventsDuringLevelStreaming":false,
    "bIgnoresOriginShifting":false,
    "bEnableAutoLODGeneration":true,
    "bIsEditorOnlyActor":false,
    "ReplicatedMovement":{
        "LinearVelocity":{ "X":0, "Y":0, "Z":0 },
        "AngularVelocity":{ "X":0, "Y":0, "Z":0 },
        "Location":{ "X":0, "Y":0, "Z":0 },
        "Rotation":{ "Pitch":0, "Yaw":0, "Roll":0 },
        "bSimulatedPhysicSleep":false,
        "bRepPhysics":false,
        "LocationQuantizationLevel":"RoundWholeNumber",
        "VelocityQuantizationLevel":"RoundWholeNumber",
        "RotationQuantizationLevel":"ByteComponents"
    },
    "InitialLifeSpan":0,
    "NetDormancy":"DORM_Awake",
    "SpawnCollisionHandlingMethod":"AlwaysSpawn",
    "AutoReceiveInput":"Disabled",
    "InputPriority":0,
    "NetCullDistanceSquared":2.25e+08,
    "NetUpdateFrequency":100,
    "MinNetUpdateFrequency":2,
    "NetPriority":1,
    "SpriteScale":1,
    "Tags":[]
}

単一のプロパティの読み取り

リクエスト ボディ:

{
    "objectPath" :"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
    "property" :"StreamingDistanceMultiplier",
    "access" :"READ_ACCESS",
}

リクエストが成功すると、200 ステータスと次のレスポンス ボディが返されます。

{
    "StreamingDistanceMultiplier":1
}

プロパティの書き込み

リクエスト ボディ:

{
    "objectPath" :"/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
    "access" :"WRITE_ACCESS",
    "propertyName" :"StreamingDistanceMultiplier",
    "propertyValue" :{
        "StreamingDistanceMultiplier" :2
    }
}

リクエストが成功すると、200 ステータスと空のレスポンス ボディが返されます。

UObject のパスについて

Unreal Editor がメモリにロードしているアセットとアクタには、それぞれを一意に識別するパスがあります。これらのパスはほとんどがエディタ内部での使用を目的としたものであるため、簡単にアクセスできる方法で直接確認することはできません。また、内部のルールに従ってプログラムによって特定されるため、必ずしも簡単に推測できるものではありません。

通常、これらのオブジェクトのパスは、次の形式になります。

/path/PackageName.ObjectName:SubObjectName.SubObject

C++ で Unreal Engine を使用している場合は、これは FindObject()StaticFindObject() などの関数が受け取る形式と同じであることがわかるでしょう。

たとえば、前出のリクエストの例にあるアクターのパスを分解する場合、次のようになります。

/Game/ThirdPersonBP/Maps/

コンテンツ ブラウザのアセットへのパス。

ThirdPersonExampleMap.ThirdPersonExampleMap:

パッケージとパッケージに含まれるオブジェクトの名前 (多くのアセットでは、この 2 つは同じ名前です)。

PersistentLevel.CubeMesh_5.StaticMeshComponent0

操作対象のオブジェクトまでのサブオブジェクト階層のパス。

これらのパスは簡単には参照できませんが、この後のセクションでこれらのパスを確認する方法をいくつか紹介します。

[Undo History (元に戻す操作の履歴)] に表示されるパス

UObject オブジェクトを変更すると、 [Undo History (元に戻す操作の履歴)] パネルでこのオブジェクトのパスを確認できます。

  1. パネルの右下にあるフィルター アイコンをクリックし、 [Show transactions details. (トランザクションの詳細を表示する)] チェック ボックスをオンにします。

    Show transactions details

  2. アクセスするアセットまたはアクタに何かしら軽微な変更を加えます。たとえば、アクタの場所を移動すると、[Undo History (元に戻す操作の履歴)] に新しいトランザクションが記録されます。

  3. [Transaction Details (トランザクションの詳細)] パネルで、 [Modified objects and properties (編集されたオブジェクトとプロパティ) 列のエントリにマウス カーソルを重ねます。ハイライトされたオブジェクトへのパスが、ツールヒントに表示されます。

    Object path shown in the Tooltip

Editor Scripting Utilities に表示されるパス

リモートで実行するタスクの種類によっては、Web アプリケーションが、現在のレベルで利用できるアクタのパスや、コンテンツ ブラウザー内にあるアセットのパスを認識できると便利な場合があります。Editor Scripting Utilities プラグインは、アセットやレベルを操作して、そのようなパスの取得を実現できる便利な関数を公開します。

たとえば、現在のレベルのすべてのアクタのパスの一覧を取得するには、 EditorScriptingUtilities モジュールの EditorLevelLibrary クラスが公開する GetAllLevelActors 関数をリモートで呼び出します。以下のリクエスト ボディを remote/object/call に送信します。

{
    "objectPath" :"/Script/EditorScriptingUtilities.Default__EditorLevelLibrary",
    "functionName":"GetAllLevelActors"
}

レスポンス ボディの ReturnValue フィールドに、レベル内のすべてのアクタのパスの配列が保持されています。例:

{
    "ReturnValue":[
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.LightmassImportanceVolume_0",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.AtmosphericFog_1",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.SkySphereBlueprint",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.SphereReflectionCapture",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.NetworkPlayerStart",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.DocumentationActor1",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Linear_Stair_StaticMesh",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Bump_StaticMesh",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.LeftArm_StaticMesh",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.RightArm_StaticMesh",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Ramp_StaticMesh",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.LightSource_0",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.PostProcessVolume_0",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.SkyLight_0",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Floor_1",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Wall7_4",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Wall9",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Wall10",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.Wall11",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.TextRenderActor_1",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.MyBlueprint_5",
        "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.ThirdPersonCharacter_167"
    ]
}

Editor Scripting Utilities プラグインの詳細については、 「エディタのスクリプティングと自動化」 を参照してください。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback