리모트 컨트롤 프로토콜(Remote Control Protocol)을 사용하면 프로토콜 입력 데이터를 노출된 프로퍼티에 바인딩하여 외부 디바이스를 통해 제어할 수 있습니다. 이 페이지에서는 DMX, MIDI, OSC 플러그인에 리모트 컨트롤 플러그인을 사용하는 방법과 나만의 프로토콜 플러그인을 만드는 방법을 설명합니다.
전제조건
-
리모트 컨트롤 API(Remote Control API) 플러그인을 활성화합니다.
-
사용하고 있는 프로토콜에 맞는 리모트 컨트롤 플러그인을 활성화합니다.
-
DMX의 경우, 리모트 컨트롤 프로토콜 DMX(Remote Control Protocol OSC) 플러그인을 활성화합니다.
-
MIDI의 경우, 리모트 컨트롤 프로토콜 MIDI(Remote Control Protocol OSC) 플러그인을 활성화합니다.
-
OSC의 경우, 리모트 컨트롤 프로토콜 OSC(Remote Control Protocol OSC) 플러그인을 활성화합니다.
-
-
에디터를 다시 시작합니다.
플러그인을 활성화했다면 리모트 컨트롤 프리셋 에셋(Remote Control Preset Asset) 을 만들고 프로퍼티를 프리셋에 노출합니다. 자세한 정보는 리모트 컨트롤 프리셋 시작하기를 참조하세요.
리모트 컨트롤에서 프로토콜 매핑하기
외부 디바이스에서 프로퍼티를 다음 단계를 따르세요.
-
리모트 컨트롤 패널(Remote Control Panel)에서 프로토콜에 매핑하고 싶은 프로퍼티를 선택합니다.
-
드롭다운 목록에서 프로토콜을 선택하고, 옆에 있는 더하기 버튼을 눌러 새로운 매핑을 추가합니다.
-
매핑 섹션에서 외부 디바이스에 연결할 세팅을 수정합니다. 필드에 관한 자세한 내용은 리모트 컨트롤 패널 레퍼런스를 참조하세요.
매핑 패널의 우측 상단에 있는 자동 바인딩 버튼을 사용하면 빠르게 입력을 자동으로 바인딩할 수 있습니다. 자세한 정보는 리모트 컨트롤 패널 레퍼런스를 참조하세요.
-
범위(Ranges) 섹션에서 우측의 더하기 버튼을 눌러 범위 단계를 추가합니다. 범위 포인트에 서로 다른 값을 입력하면 외부 디바이스로 제어할 때 프로퍼티가 입력한 값 사이에서 보간됩니다.
범위 값 옆에 있는 왼쪽 방향 화살표를 눌러서 월드의 현재 값을 캡처합니다.
-
오브젝트의 디테일(Details) 패널이나 뷰포트로 변경 내용을 직접 보면서 외부 디바이스를 통해 매핑과 입력이 올바르게 구성되었는지 확인합니다.
새 프로토콜 추가하기
리모트 컨트롤에 나만의 프로토콜 지원을 추가하려면 IRemoteControlProtocol과 FRemoteControlProtocolEntity을 구현해야 합니다.
리모트 컨트롤 프로토콜을 위한 나만의 구현을 추가하려면 다음 단계를 따르세요.
-
새 기본 플러그인을 생성합니다. 새 플러그인 생성에서 지침을 확인하세요.
플러그인 이름은 RemoteControlProtocol{이름} 을 사용합니다. {이름} 에는 프로토콜 이름을 입력하는 명명 규칙을 권장합니다. 예를 들어, MIDI 구현의 이름은
RemoteControlProtocolMIDI로 입력합니다. -
생성한 *.uplugin 파일 내에서 RemoteControl 플러그인에 대한 종속성을 추가합니다.
"Plugins": [ { "Name": "RemoteControl", "Enabled": true } ] -
프로젝트에 해당하는 Visual Studio의 Solution Explorer에서
.Build.cs파일에 정의된 모듈을 찾습니다.PrivateDependencyModuleNames범위에RemoteControl와RemoteControlProtocol을 추가합니다. -
IRemoteControlProtocol을 구현하는 새 클래스를 만들거나, 베이스 구현FRemoteControlProtocol에서 상속하고 다음을 오버라이드합니다.-
GetProtocolScriptStruct() : Protocol Entity 구현의 클래스를 제공합니다. MIDI를 사용한 예시에서는
FRemoteControlProtocolMIDIEntity::StaticStruct()입니다. -
Bind(Entity) : 입력을 받았을 때 반복작업할 로컬 컬렉션에 엔티티를 등록하는 데 주로 사용됩니다. 제공된 엔티티는 아래에서 설명하는 구현에 따라 달라집니다.
-
Unbind(Entity): Bind와 마찬가지로 주로 컬렉션에서 제공된 엔티티를 제거하는 데 사용됩니다.
-
UnbindAll(): 컬렉션에서 모든 엔티티를 제거합니다.
-
-
FRemoteControlProtocolEntity 구조체에서 상속하여 주어진 엔티티(노출된 프로퍼티)에 대한 프로토콜 바인딩을 나타내는 새 구조체를 만들고, 다음을 오버라이드합니다.
-
GetRangePropertyName(): 예를 들어 디바이스의 입력이 float면
FFloatProperty입니다. -
RangeInputTemplate라는 편집할 수 없고 눈에 보이지 않는 일시적 UPROPERTY(): 최솟값, 최댓값 등 추가 컨스트레인트를 지정할 수 있습니다. 적절한 에디터 위젯을 만들 때 사용됩니다. 프로퍼티를 다른 곳에 저장하고
IRemoteControlProtocol::GetRangeTemplateType()를 오버라이드해 지정할 수도 있습니다.
-
-
아래에 본인의
IRemoteControlProtocol구현을 등록합니다.IRemoteControlProtocolModule::Get().AddProtocol({이름}, MakeShared<{구현}>());
프로젝트 세팅 생성 및 등록 방법 등 더 많은 예시는 UE 소스 코드의 DMX, MIDI, OSC 리모트 컨트롤 프로토콜 플러그인 구현을 참조하세요.