이 페이지는 리모트 컨트롤 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 |
상호작용하려는 |
functionName |
지정된 |
parameters |
함수에 전달하려는 파라미터를 정의하는 오브젝트입니다.
이 오브젝트의 프로퍼티를 함수에서 수락한 모든 파라미터에 포함할 필요는 없습니다. 생략하는 파라미터가 있을 경우, 웹 리모트 컨트롤 시스템에서 적절한 타입의 기본 오브젝트를 생성할 것입니다. |
generateTransaction |
에디터에서 프로젝트의 트랜잭션 히스토리에 해당 함수 호출을 기록할지 여부를 결정합니다. 해당 프로퍼티를
|
호출하면 호출한 함수의 반환값을 포함한 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()
함수를 처음 정의할 때 대상을 출력 파라미터, 즉 함수 호출에 의해 생성된 데이터 값에 대한 const 이외 레퍼런스로 정의하기 때문입니다.
PUT remote/object/property
이 엔드포인트를 사용하면 현재 에디터의 메모리에 저장된 특정 UObject(주로 액터 또는 에셋)에 의해 노출된 프로퍼티 값에 액세스합니다.
액세스 중인 UObject가 C++ 클래스의 인스턴스인 경우, C++에서 블루프린트에 액세스 가능한 수 있는 프로퍼티의 형태로 정의되는 클래스 멤버를 포함하며, 아래와 같은 제약이 있습니다.
액세스 중인 UObject가 블루프린트 클래스의 인스턴스인 경우, 해당 클래스에서 소유한 블루프린트 변수를 포함하며, 아래와 같은 제약이 있습니다.
이 엔드포인트는 특정 기준을 만족하는 프로퍼티에만 액세스할 수 있습니다.
- 프로퍼티는
public
으로 정의해야 합니다.private
또는protected
로 설정할 수 없습니다. - 정의된
BlueprintGetter
또는BlueprintSetter
함수가 있어서는 안 됩니다. 해당 함수를 정의할 경우,remote/object/property
엔드포인트를 직접 사용하는 값을 읽고 쓰는 게 아니라 위에서 설명한remote/object/call
엔드포인트가 포함된 함수를 사용해야 합니다. - 에디터에서 오브젝트에 액세스할 경우, 프로퍼티를
EditAnywhere
로 설정해야 합니다. 값을 수정하려면 프로퍼티를EditConst
로 설정해서는 안 됩니다. -game
모드나 에디터에서 플레이(PIE) 모드에서 오브젝트에 액세스할 경우, 프로퍼티를BlueprintVisible
로 설정해야 합니다. 값을 수정하려면 프로퍼티를BlueprintReadOnly
로 설정해서는 안 됩니다.
요청 메시지를 작성하는 방식에 따라 다음을 수행할 수 있습니다.
- 오브젝트에 의해 노출된 모든 사용 가능한 프로퍼티를 현재 값과 함께 요청하기
- 최소한 읽기 액세스를 제공하는 모든 프로퍼티의 값을 요청하기
- 쓰기 액세스를 제공하는 모든 프로퍼티의 값을 설정하기
이 엔드포인트를 호출할 때는 다음과 같은 프로퍼티를 포함한 JSON 페이로드를 전달해야 합니다.
프로퍼티 | 설명 |
---|---|
objectPath |
상호작용하려는 |
propertyName |
읽거나 수정하려는 프로퍼티 이름입니다. |
access |
프로퍼티에 대해 만들고 있는 액세스 요청의 유형을 정의합니다. 다음 중 어떤 값이든 될 수 있습니다.
|
propertyValue |
여러분이 이 오브젝트는 각 필드의 이름과 지정된 |
호출하면 요청한 정보를 포함하는 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",
"propertyName" : "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을 응답 본문의 섬네일 이미지와 함께 반환합니다.
PUT remote/search/assets
이 엔드포인트를 사용하면 에셋 레지스트리에서 에셋을 검색합니다.
이 엔드포인트를 호출할 때는 다음과 같은 프로퍼티를 포함한 JSON 페이로드를 전달해야 합니다.
프로퍼티 | 설명 |
---|---|
쿼리(Query) | 여러분이 에셋 이름에 일치시키고자 하는 텍스트입니다. 이 영역을 빈 스트링으로 남겨 두면 모든 결과가 반환됩니다. |
필터(Filter) | 다음 선택적 프로퍼티를 포함해서 요청한 에셋에 필터를 적용할 방법을 지정하는 JSON 오브젝트입니다.
|
호출하면 요청한 정보를 포함하는 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를 수정할 때 실행 취소 히스토리 패널에서 경로를 볼 수 있습니다.
-
패널 우측 하단의 필터 아이콘을 클릭하고, 트랜잭션 디테일을 표시합니다.(Show transactions details.) 를 활성화합니다.
-
액세스하려는 에셋 또는 액터를 약간 변경하세요(예: 액터를 새로운 위치로 이동). 그러면 실행 취소 히스토리 에 새 트랜잭션이 기록됩니다.
-
트랜잭션 디테일(Transaction Details) 패널에서 수정된 오브젝트 또는 프로퍼티(Modified objects and properties) 열의 항목에 커서를 올립니다. 하이라이트된 오브젝트로의 경로가 툴팁에 포함되어 나타납니다.
에디터 스크립팅 유틸리티 내 경로
원격으로 수행하려는 작업 타입에 따라, 웹 애플리케이션에 현재 레벨에서 사용 가능한 액터나 콘텐츠 브라우저에 존재하는 에셋의 경로를 알려 주면 도움이 될 수 있습니다. 에디터 스크립팅 유틸리티(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"
]
}
에디터 스크립팅 유틸리티 플러그인 설치에 대한 자세한 정보는 에디터 스크립팅 및 자동화를 참조하세요.
에디터에서 플레이(PIE) 모드에서는 맵의 이름에 접두사로 UEDPIE_X_ 가 추가됩니다. 여기서 X 는 PIE 인스턴스 ID입니다. 위에서 첫 번째 반환값을 예시로 사용할 때, PIE 중 오브젝트 경로는 다음과 같아야 합니다.
"objectPath" : "/Game/ThirdPersonBP/Maps/UEDPIE_0_ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.LightmassImportanceVolume_0"
블루프린트 함수 라이브러리 경로
스태틱 메서드로 커스텀 블루프린트 함수 라이브러리를 원격 호출하려면, 오브젝트 경로를 UCLASS에서 유지하는 오브젝트인 클래스 디폴트 오브젝트(CDO)로 지정해야 합니다. 다음 섹션에서는 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()
데코레이터를 포함한 클래스의 이름입니다.