리모트 컨트롤 API HTTP 레퍼런스

리모트 컨트롤 API에서 제공하는 HTTP 엔드포인트를 자세히 다룹니다.

Windows
MacOS
Linux

이 페이지는 리모트 컨트롤 API가 제공하는 HTTP 엔드포인트를 설명하고, 엔드포인트를 호출할 때 포함시켜야 하는 메시지 본문의 형식을 자세히 다룹니다.

GET remote/info

이 엔드포인트를 사용하면 리모트 컨트롤 API에서 사용할 수 있는 모든 HTTP 경로를 표시합니다. 호출하면 사용 가능한 모든 HTTP 경로와 설명을 포함한 JSON 페이로드를 반환힙니다.

예시

본문을 비운 채 요청을 보내세요. 요청 성공 시 200 상태를 다음 응답 본문과 함께 반환합니다.

{
    "HttpRoutes": [
        {
            "Path": "/remote/info",
            "Verb": "Get",
            "Description": "Get information about different routes available on this API."
        },
        {
            "Path": "/remote",
            "Verb": "Options",
            "Description": "Allows cross-origin http requests to the API."
        },
        {
            "Path": "/remote/batch",
            "Verb": "Put",
            "Description": "Allows batching multiple calls into one request."
        }
        ...
    ]
}

PUT remote/object/call

이 엔드포인트를 사용하면 에디터의 메모리에 현재 명시되어 있는 `UObject`에 표시된 함수를 호출합니다. 대개는 현재 사용 중인 레벨의 액터나 프로젝트 내 에셋이 해당됩니다.

블루프린트에서 호출 가능한 모든 함수를 호출할 수 있습니다. 해당 목록에는 C++에서 BlueprintCallable 명시를 통해 정의된 함수, 또는 블루프린트에서만 정의 및 구현된 함수가 포함됩니다.

이 엔드포인트를 호출할 때는 다음과 같은 프로퍼티를 포함한 JSON 페이로드를 전달해야 합니다.

프로퍼티

설명

objectPath

상호작용하려는 `UObject`를 고유 식별하는 경로입니다. 이 경로의 탐색과 관련된 추가 정보는 아래 UObject 경로에 관해를 참조하세요.

functionName

명시된 `UObject`에서 호출하려는 함수의 이름입니다. C++에서 함수를 정의할 경우, 원래 이름이 블루프린트에 보이는 이름과 일치하지 않을 수 있습니다. 이때는 C++에서 정의한 함수명을 사용하세요.

parameters

함수에 전달하려는 파라미터를 정의하는 오브젝트입니다.

  • 해당 오브젝트의 모든 프로퍼티 이름은 호출할 함수에서 수락한 파라미터 이름이어야 합니다.

    C++에서 함수를 정의할 경우, 원래 파라미터 이름이 블루프린트 에디터에 보이는 값과 일치하지 않을 수 있습니다. 이때는 C++에서 정의한 파라미터 이름을 사용하세요. 예를 들어 아래 코드에서는 두 번째 파라미터를 동일한 블루프린트 노드에서 스윕(Sweep) 으로 표시되더라도, 파라미터의 C++ 정의에 맞게 `bSweep`로 명시해야 합니다.

  • 프로퍼티의 값은 숫자나 Boolean 값처럼 단순한 값이 될 수도 있습니다. 또는 함수가 오브젝트 전달을 요구할 경우, 오브젝트의 프로퍼티를 압축한 JSON 오브젝트를 제공할 수도 있습니다. 리모트 컨트롤 시스템은 여러분이 제공한 값을 사용해 필요한 유형의 신규 오브젝트 생성을 시도합니다. 예를 들어 아래의 코드에서는 `NewLocation`을 자동으로 사용해 새 벡터를 생성합니다.

이 오브젝트의 프로퍼티를 함수에서 수락한 모든 파라미터에 포함할 필요는 없습니다. 생략하는 파라미터가 있을 경우, 웹 리모트 컨트롤 시스템에서 적절한 유형의 기본 오브젝트를 생성할 것입니다.

generateTransaction

에디터에서 프로젝트의 트랜잭션 내역에 해당 함수 호출을 기록할지 여부를 결정합니다. 해당 프로퍼티를 `true`로 설정하면 다음과 같은 효과가 나타납니다.

  • 함수로 인해 변경된 모든 사항은 취소할 수 있습니다. 에디터는 프로젝트의 실행 취소 내역(Undo History) 패널에서 이 함수 호출에 관해 입력된 내용을 기록합니다. 언리얼 에디터에서 작업하는 사용자는 변경사항으로 인한 효과를 되돌릴 수 있습니다. 이 항목은 호출하는 함수와 상관없이 반드시 리모트 콜 트랜잭션 랩(Remote Call Transaction Wrap) 이라는 이름으로 입력됩니다.
    실행 취소 내역에 추가된 원격 트랜잭션

  • 멀티 유저 편집 세션에 있을 경우, 변경사항이 연결된 다른 사용자에게도 복제됩니다.

호출하면 호출한 함수의 반환값을 포함한 JSON 페이로드를 반환합니다. 반환값에는 함수를 정의할 때 명시한 다른 출력 파라미터가 포함됩니다.

예시

요청 본문:

{
    "objectPath" : "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5",
    "functionName" : "SetActorLocation",
    "parameters" : {
        "NewLocation" : {"X" : 100, "Y" : 0, "Z" : 30},   // 이러한 값은 신규 벡터 생성에 사용됨
        "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
}

이때는 SweepHitResult`가 반환값에 포함됩니다. 그 이유는 Engine/Source/Runtime/Engine/Classes/GameFramework/Actor.h 파일의 SetActorLocation()` 함수를 처음 정의할 때 대상을 출력 파라미터로서 정의하기 때문입니다. 즉, 비상수 레퍼런스를 함수 호출에 의해 만들어진 데이터 값에 지정하는 셈입니다.

PUT remote/object/property

이 엔드포인트를 사용하면 에디터의 메모리에 현재 명시되어 있는 UObject에 의해 표시된 프로퍼티 값을 이용합니다. 보통 액터나 에셋이 해당됩니다.

여러분이 이용하는 UObject가 C++ 클래스의 인스턴스인 경우, C++에서 '블루프린트에 이용할 수 있는 프로퍼티'의 형태로 정의되는 클래스 멤버를 포함하며, 아래와 같은 제약이 있습니다.

여러분이 이용하는 UObject가 블루프린트 클래스의 인스턴스인 경우, 해당 클래스에서 보유한 블루프린트 변수를 포함하며, 아래와 같은 제약이 있습니다.

이 엔드포인트는 특정 요건을 만족하는 프로퍼티만 이용할 수 있습니다.

  • 프로퍼티는 공개`로 정의해야 합니다. 비공개`나 `보호`로 설정할 수 없습니다.

  • 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_ACCESS`는 한 개 이상의 프로퍼티에 대한 신규 값 설정을 명시합니다. 값의 정의는 propertyValue` 오브젝트에서 이루어집니다.

  • WRITE_TRANSACTION_ACCESS`는 WRITE_ACCESS`와 동일하지만, 프로젝트의 트랜잭션 내역에서 프로퍼티의 값 변경사항을 기록합니다. remote/object/call 엔드포인트의 generateTransaction 프로퍼티와 비슷합니다. 다음과 같은 효과가 있습니다.

    • 언리얼 에디터의 디테일(Details) 패널에서 하던 것처럼 에디터에서 프로퍼티를 변경할 수 있습니다. 에디터에서 추가 코드를 호출함으로써 프로퍼티에 연결된 변경 전 이벤트와 변경 후 이벤트를 처리할 수도 있습니다.

    • 멀티 유저 편집 세션에 있을 경우, 변경사항이 연결된 다른 사용자에게도 복제됩니다.

    • 이 옵션으로 변경사항을 취소할 수 있습니다. 이 프로퍼티의 값이 `true`일 경우, 에디터는 이 프로퍼티의 변경사항을 프로젝트의 **실행 취소 내역** 패널에 기록합니다. 언리얼 에디터에서 작업하는 사용자는 변경사항의 효과를 되돌릴 수 있습니다. 이 항목은 항상 **Remote Set Object Property** 라는 이름으로 입력됩니다.
      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' 상태를 다음 응답 본문과 함께 부여합니다.

PUT remote/object/thumbnail

이 엔드포인트를 사용하면 콘텐츠 브라우저(Content Browser) 내 에셋의 섬네일 이미지를 복구합니다. 호출하면 섬네일을 포함한 JSON 페이로드를 반환합니다.

예시

요청 본문:

{
    "objectPath" : "/Game/Mannequin/Animations/ThirdPersonJump_Start.ThirdPersonJump_Start"
}

요청 성공 시 200 상태를 응답 본문의 섬네일 이미지와 함께 반환합니다.

image alt text

PUT remote/search/assets

이 엔드포인트를 사용하면 에셋 레지스트리에서 에셋을 검색합니다.

해당 엔드포인트를 호출할 때는 다음 프로퍼티를 포함한 JSON 페이로드를 전달해야 합니다.

프로퍼티

설명

Query

여러분이 에셋 이름에 일치시키고자 하는 텍스트입니다. 이 영역을 비워두면 스트링이 모든 결과를 반환합니다.

Filter

다음 부가 프로퍼티를 포함해서 요청한 에셋에 필터를 적용할 방법을 명시하는 JSON 오브젝트입니다.

  • PackageNames: 검색 결과를 특정 패키지와 정확히 일치하도록 제한합니다. 값은 문자열의 형태로 저장됩니다(예: ["/Game/MyFolder/MyAsset"]).

  • ClassNames: 검색 결과를 특정 클래스 이름과 정확히 일치하도록 제한합니다. 값은 문자열의 형태로 저장됩니다.

  • PackagePaths: 검색 결과를 명시된 경로를 포함하는 패키지로 제한합니다. 예를 들어 ["/Game/MyFolder"]로 검색하면 "/Game/MyFolder" 에셋 경로에 있는 에셋만 반환합니다. 값은 문자열의 형태로 저장됩니다.

  • RecursiveClassesExclusionSet: 일치하는 재귀 클래스를 검색할 경우, 결과에서 제외하려는 클래스를 명시할 수 있습니다. 값은 문자열의 형태로 저장됩니다.

  • RecursivePaths: PackagePaths에 명시된 경로의 하위 폴더 검색 여부를 명시하는 boolean입니다.

  • RecursiveClasses: ClassNames에 명시된 클래스의 하위 클래스 탐색 여부를 명시하는 boolean입니다.

호출하면 여러분이 요청한 정보를 포함한 JSON 페이로드를 반환합니다.

예시

요청 본문:

{
    "Query": "Cube",
    "Filter": {
        "PackageNames": [],
        "ClassNames": [],
        "PackagePaths": [],
        "RecursiveClassesExclusionSet": [],
        "RecursivePaths": false,
        "RecursiveClasses": false
    }
}

요청 성공 시 200 상태를 다음 응답 본문과 함께 반환합니다.

{
    "Assets": [
        {
            "Name": "CubeMaterial",
            "Class": "Material",
            "Path": "/Game/Geometry/Meshes/CubeMaterial.CubeMaterial"
        },
        {
            "Name": "1M_Cube",
            "Class": "StaticMesh",
            "Path": "/Game/Geometry/Meshes/1M_Cube.1M_Cube"
        },
        {
            "Name": "1M_Cube_Chamfer",
            "Class": "StaticMesh",
            "Path": "/Game/Geometry/Meshes/1M_Cube_Chamfer.1M_Cube_Chamfer"
        }
    ]
}

PUT remote/object/describe

이 엔드포인트를 사용하면 액터나 에셋처럼 에디터의 메모리에 저장된 UObject에 대한 프로퍼티, 함수, 기타 메타데이터를 전부 표시합니다. 호출하면 여러분이 요청한 정보를 포함한 JSON 페이로드를 반환합니다.

예시

요청 본문:

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

요청 성공 시 200 상태를 다음 응답 본문과 함께 반환합니다.

{
    "Name": "CubeMesh_5",
    "Class": "/Script/Engine.StaticMeshActor",
    "Properties": [
        {
            "Name": "StaticMeshComponent",
            "Description": "",
            "Type": "UStaticMeshComponent*",
            "ContainerType": "",
            "KeyType": "",
            "Metadata": {}
        },
        {
            "Name": "PrimaryActorTick",
            "Description": "Primary Actor tick function, which calls TickActor().\nTick functions can be configured to control whether ticking is enabled, at what time during a frame the update occurs, and to set up tick dependencies.\n@see https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/FTickFunction/\n@see AddTickPrerequisiteActor(), AddTickPrerequisiteComponent()",
            "Type": "FActorTickFunction",
            "ContainerType": "",
            "KeyType": "",
            "Metadata": {
                "ToolTip": "Primary Actor tick function, which calls TickActor().\nTick functions can be configured to control whether ticking is enabled, at what time during a frame the update occurs, and to set up tick dependencies.\n@see https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/FTickFunction/\n@see AddTickPrerequisiteActor(), AddTickPrerequisiteComponent()"
            }
        },
        {
            "Name": "bOnlyRelevantToOwner",
            "Description": "If true, this actor is only relevant to its owner. If this flag is changed during play, all non-owner channels would need to be explicitly closed.",
            "Type": "uint8",
            "ContainerType": "",
            "KeyType": "",
            "Metadata": {
                "ToolTip": "If true, this actor is only relevant to its owner. If this flag is changed during play, all non-owner channels would need to be explicitly closed."
            }
        },
        ...
    ]
}

PUT remote/batch

이 엔드포인트를 사용하면 다수의 HTTP 요청을 단일 원격 호출로 구성합니다. 실행 순서는 요청(Requests) 배열의 엘리먼트 순서에 따라 결정됩니다.

요청 배열에 속하는 모든 엘리먼트 요청은 다음 프로퍼티를 지닌 JSON 오브젝트 형태여야 합니다.

요청 프로퍼티

설명

RequestId

요청을 해당되는 응답과 일치시킬 수 있는 고유 ID입니다.

URL

/remote/object/describe 같은 형태의 타깃을 요청합니다.

Verb

PUT, POST, GET, DELETE 같은 HTTP 메서드에 대한 옵션입니다.

Body

서버로 전송되는 데이터입니다. 본문이 포함되지 않는 요청도 존재합니다.

호출하면 다수의 요청이 담긴 반응 배열을 포함한 JSON 페이로드를 반환합니다. 배열에 속한 모든 엘리먼트에는 다음 프로퍼티가 포함됩니다.

응답 프로퍼티

설명

RequestId

응답을 해당되는 요청과 일치시킬 수 있는 고유 ID입니다.

ResponseCode

응답에 대한 상태입니다. 응답 성공 시 200 상태를 반환합니다.

ResponseBody

요청한 데이터를 전부 포함한 페이로드입니다. 응답 본문이 없는 응답도 있습니다.

예시

요청 본문:

{
    "Requests" : [
        {
            "RequestId" : 1,
            "URL": "/remote/object/property",
            "Verb" : "PUT",
            "Body": {
                "objectPath" : "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
                "propertyName": "StreamingDistanceMultiplier",
                "access" : "READ_ACCESS"
            }
        },
        {
            "RequestId" : 2,
            "URL": "/remote/object/property",
            "Verb" : "PUT",
            "Body": {
                "objectPath" : "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
                "propertyName": "StreamingDistanceMultiplier",
                "propertyValue": {
                    "StreamingDistanceMultiplier" : 2
                },
                "access" : "WRITE_ACCESS"
            }
        },
        {
            "RequestId" : 3,
            "URL": "/remote/object/property",
            "Verb" : "PUT",
            "Body": {
                "objectPath" : "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
                "propertyName": "StreamingDistanceMultiplier",
                "access" : "READ_ACCESS"
            }
        }
    ]
}

요청 성공 시 다음과 같은 응답 본문을 각 요청에 해당하는 응답 배열과 함께 반환합니다.

{
    "Responses": [
        {
            "RequestId": 1,
            "ResponseCode": 200,
            "ResponseBody": {
                "StreamingDistanceMultiplier": 1
            }
        },
        {
            "RequestId": 2,
            "ResponseCode": 200,
            "ResponseBody": null
        },
        {
            "RequestId": 3,
            "ResponseCode": 200,
            "ResponseBody": {
                "StreamingDistanceMultiplier": 2
            }
        }
    ]
}

PUT remote/object/event

실험단계 루트입니다. 프로젝트의 DefaultEngine.ini 파일에 다음 콘솔 변수를 추가해 활성화할 수 있습니다.

[콘솔 변수]
WebControl.EnableExperimentalRoutes = 1

이 엔드포인트를 사용하면 오브젝트의 다음 이벤트를 받습니다(예를 들어 오브젝트의 프로퍼티가 변경될 때 업데이트 받기). 이 루트는 이벤트가 발생할 때까지 반환하지 않습니다.

현재 지원하는 이벤트는 다음과 같습니다.

  • ObjectPropertyChanged

  • PreObjectPropertyChanged

예시

요청 본문:

{
    "EventType": "ObjectPropertyChanged",
    "ObjectPath": "/Game/ThirdPersonBP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.CubeMesh_5.StaticMeshComponent0",
    "PropertyName": "StaticMesh"
}

요청에 성공해도 이벤트가 발생하기 전까지는 반환되지 않습니다. StaticMesh 프로퍼티가 변경될 경우, 200 상태를 포함한 응답이 다음 본문과 함께 반환됩니다.

{
  "StaticMesh": "/Engine/EditorMeshes/ArcadeEditorSphere.ArcadeEditorSphere"
}

UObject 경로에 관해

언리얼 에디터가 메모리에 불러온 모든 에셋 및 액터에는 식별용 고유 경로가 있습니다. 이 경로는 주로 에디터 내부에서 사용되므로, 웬만한 방법으로는 직접 발견하기가 쉽지 않습니다. 그리고 인터넷 규칙에 따라 프로그래밍 방식으로 결정되므로 항상 예측하기 쉬운 것도 아닙니다.

오브젝트 경로는 보통 다음 형식을 따릅니다.

/path/PackageName.ObjectName:SubObjectName.SubObject

C++ 엔진으로 작업하는 프로그래머라면 FindObject(), StaticFindObject() 같은 함수로 해당 형식을 인식한다는 사실을 눈치챘을 수도 있습니다.

예를 들어, 위의 요청문 예시에 나온 액터 경로는 다음과 같이 나눌 수 있습니다.

/Game/ThirdPersonBP/Maps/

콘텐츠 브라우저 내 에셋 경로입니다.

ThirdPersonExampleMap.ThirdPersonExampleMap:

경로에 포함된 패키지 및 오브젝트의 이름입니다(대부분의 에셋은 두 개가 동일합니다).

PersistentLevel.CubeMesh_5.StaticMeshComponent0

여러분이 영향을 미치려는 오브젝트에 대한 하위 오브젝트의 계층구조 경로입니다.

화면에 쉽게 표시할 수 있는 경로는 아니지만, 다음 항목에서 몇 가지 방법을 알 수 있습니다.

실행 취소 내역 내 경로

UObject를 수정할 때 실행 취소 내역 패널에서 경로를 볼 수 있습니다.

  1. 화면 우하단의 필터 아이콘을 클릭하고, 트랜잭션 디테일을 표시합니다. 를 활성화하세요.

    트랜잭션 디테일 표시

  2. 이용하려는 에셋 또는 액터를 약간 변경하세요(예: 액터를 새로운 위치로 이동). 그러면 실행 취소 내역 에 새 트랜잭션이 기록됩니다.

  3. 트랜잭션 디테일(Transaction Details) 패널에서 수정된 오브젝트 또는 프로퍼티 열의 항목에 커서를 대세요. 툴팁은 강조된 오브젝트로의 경로를 포함합니다.

    툴팁에 등장한 오브젝트 경로

에디터 스크립팅 유틸리티 내 경로

여러분이 원격으로 수행하려는 작업의 유형에 따라, 웹 애플리케이션에 현재 레벨에서 사용 가능한 액터나 콘텐츠 브라우저에 존재하는 에셋의 경로를 알려주면 도움이 될 수 있습니다. 에디터 스크립팅 유틸리티(Editor Scripting Utilities) 플러그인은 작업에 필요한 에셋 및 레벨과 상호작용하는 데 유용한 함수를 표시합니다.

예를 들어 현재 레벨에 존재하는 모든 액터의 경로 목록이 필요할 경우, EditorScriptingUtilities 모듈의 EditorLevelLibrary 클래스에 의해 표시되는 GetAllLevelActors 함수를 원격으로 호출하면 됩니다. remote/object/call 엔드포인트에 다음과 같은 요청 본문을 보내세요.

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

The ReturnValue field in the response body gives you an array of paths for all Actors in the Level. For example:

{
    "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"
    ]
}

에디터 스크립팅 유틸리티 플러그인에 대한 세부 정보는 에디터 자동화 및 스크립트 작성을 참조하세요.

블루프린트 함수 라이브러리 경로

스태틱 메서드로 커스텀 블루프린트 함수 라이브러리를 원격 호출하려면, 오브젝트 경로를 클래스 디폴트 오브젝트(CDO)에 지정해야 합니다. 이 오브젝트는 UCLASS에서 관리하는 오브젝트입니다. 다음 항목에서는 C++ 및 Python 오브젝트에 해당하는 오브젝트 경로를 빌드하는 법을 설명합니다.

C++

C++ 내 CDO로의 오브젝트 경로는 다음 형식을 따릅니다.

/Script/ModuleName.Default__ClassName

다음 표는 블루프린트 함수 라이브러리에서 ModuleName 및 ClassName의 값을 찾는 법을 설명합니다.

ModuleName

ModuleName은 여러분이 찾고 있는 클래스 이름을 포함한 DLL 파일의 이름입니다. Visual Studio 프로젝트일 경우, 모듈과 이름이 같은 .build.cs 파일이 있을 것입니다. 이 파일은 모듈의 의존성 뿐만 아니라 모듈의 빌드 방식 또한 명시합니다.

ClassName

ClassName은 UCLASS 매크로를 보유한 클래스의 이름입니다.

Python

Python 내 CDO로의 오브젝트 경로는 다음 형식을 따릅니다.

/Engine/PythonTypes.Default__ClassName

ClassName은 @unreal.uclass() 데코레이터를 포함한 클래스의 이름입니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기