リモートアプリにパラメータを公開する
実験的な機能が多く、破壊的な仕様変更が入ることがあります。
VirgoMotionStudioTemplate のスタジオアプリ側スクリプトに属性を付けるだけで、リモートアプリから値を編集したり関数を呼び出すことができます。
最小例
1. スクリプトを書く
MonoBehaviour に [ExposedClass] と [ExposedField] を付けます。
using UnityEngine;
using Lilium.RemoteControl;
[ExposedClass]
public class MyEffect : MonoBehaviour
{
[ExposedField]
public int hoge;
}
2. GameObject を追加してスクリプトをアタッチする
VirgoMotionStudioTemplate の Studio シーン(または独自に作ったシーン)に空の GameObject を作り、上のスクリプトをアタッチします。

3. RemoteControlProvider に登録する
シーンに配置済みの Remote Control GameObject の LiveStudioRemoteControl コンポーネントを開き、Objects リストに項目を追加します。
Objectsの+ボタンを押し、型ドロップダウンからExposedGameObjectを選択する- その項目の
Referenceに手順 2 で作った GameObject をドラッグして割り当てる

ここで登録しない限り、[ExposedClass] を付けただけではリモートアプリには現れません。LiveStudioRemoteControl の Objects がリモートアプリに公開する対象の入り口になっています。
4. 動作確認
Unity Editor で Play するか、ビルドしたアプリを起動してリモートアプリを接続します。リモートアプリの「シーン」ページに MyEffect が並び、hoge フィールドが整数入力として表示されます。値を変更するとその場で反映され、*.live.json にも保存されます。

追加した [ExposedField] 等がリモートアプリ側で正常に認識されないことがあります。その場合は
Play停止した後、 Window > Lilium Remote Control > UI Desiner の Reset ボタンを押して、Playを再実行してください。

属性の使い分け
| 属性 | 付ける対象 | 用途 |
|---|---|---|
[ExposedClass] | class / struct | この型をリモートアプリに公開対象として登録する |
[ExposedField] | field | フィールドを公開し、編集可能にする |
[ExposedProperty] | property | プロパティを公開し、編集可能にする (setter で副作用を起こしたい場合) |
[ExposedFunction] | method | 引数なしメソッドをボタンとして公開する |
[ExposedEnum] | enum | enum 値をドロップダウンとして表示するために必要 |
[ExposedHelp("...")] | 上記いずれか | リモートアプリ上にヘルプテキストを表示する |
[Hide] | field / property | 公開済みのメンバーをリモートアプリの UI から隠す |
[ExposedField] で十分なケースが大半です。値の変更時に処理を走らせたい場合のみ [ExposedProperty] + setter を使い、内部状態は別の [ExposedField, Hide] で持たせる、というパターンが一般的です。
表示コントロールを変える
数値スライダー、ラベル、表示順などは属性で制御できます。
using UnityEngine;
using Lilium.RemoteControl;
[ExposedClass(Category = "Effect", Icon = "auto_fix_high")]
public class MyEffect : MonoBehaviour
{
[ExposedField, Slider(0f, 1f, 0.01f)]
public float intensity = 0.5f;
[ExposedField, Slider(1, 10)]
public int repeat = 3;
[ExposedField]
public Color tint = Color.white;
[ExposedFunction(label = "リセット")]
public void ResetParams()
{
intensity = 0.5f;
repeat = 3;
tint = Color.white;
}
}
| 属性 | 効果 |
|---|---|
[Slider(min, max, step)] | 数値をスライダーで表示する |
ExposedClass(Icon = "...") | Material Icons のアイコン名を指定 |
order | 表示順(負で前、正で後ろ) |

enum を選択肢として公開する
enum 型のフィールドは [ExposedEnum] を付けた enum である必要があります。
using UnityEngine;
using Lilium.RemoteControl;
[ExposedEnum]
public enum EffectMode
{
Off,
Soft,
Strong,
}
[ExposedClass]
public class MyEffect : MonoBehaviour
{
[ExposedField]
public EffectMode mode = EffectMode.Soft;
}

条件付き表示
ShowIf / HideIf で他のフィールドの値に応じた表示制御ができます。
[ExposedField]
public bool useColor;
[ExposedField, ShowIf(nameof(useColor), true)]
public Color color = Color.white;
保存対象から外す
[ExposedField(persistable = false)] を付けると、リモートアプリには公開されるが *.live.json には保存されなくなります。一時的な実験用の値や、起動時に毎回リセットしたい値に使います。
公開メンバーの追加・型変更・リネームを行うと、過去に保存した *.live.json との互換性が崩れることがあります。リネーム時は [FormerlyExposedAs("旧名")] を付けて旧名からの復元を維持できます。
関連リンク
- SDKの構成内容 —
RemoteControlパッケージを含む SDK の構成