メインコンテンツまでスキップ

リモートアプリにパラメータを公開する

警告

実験的な機能が多く、破壊的な仕様変更が入ることがあります。

VirgoMotionStudioTemplate のスタジオアプリ側スクリプトに属性を付けるだけで、リモートアプリから値を編集したり関数を呼び出すことができます。

最小例

1. スクリプトを書く

MonoBehaviour[ExposedClass][ExposedField] を付けます。

using UnityEngine;
using Lilium.RemoteControl;

[ExposedClass]
public class MyEffect : MonoBehaviour
{
[ExposedField]
public int hoge;
}

2. GameObject を追加してスクリプトをアタッチする

VirgoMotionStudioTemplateStudio シーン(または独自に作ったシーン)に空の GameObject を作り、上のスクリプトをアタッチします。

alt text

3. RemoteControlProvider に登録する

シーンに配置済みの Remote Control GameObject の LiveStudioRemoteControl コンポーネントを開き、Objects リストに項目を追加します。

  1. Objects+ ボタンを押し、型ドロップダウンから ExposedGameObject を選択する
  2. その項目の Reference に手順 2 で作った GameObject をドラッグして割り当てる

alt text

ここで登録しない限り、[ExposedClass] を付けただけではリモートアプリには現れません。LiveStudioRemoteControlObjects がリモートアプリに公開する対象の入り口になっています。

4. 動作確認

Unity Editor で Play するか、ビルドしたアプリを起動してリモートアプリを接続します。リモートアプリの「シーン」ページに MyEffect が並び、hoge フィールドが整数入力として表示されます。値を変更するとその場で反映され、*.live.json にも保存されます。

alt text

注記

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

alt text

属性の使い分け

属性付ける対象用途
[ExposedClass]class / structこの型をリモートアプリに公開対象として登録する
[ExposedField]fieldフィールドを公開し、編集可能にする
[ExposedProperty]propertyプロパティを公開し、編集可能にする (setter で副作用を起こしたい場合)
[ExposedFunction]method引数なしメソッドをボタンとして公開する
[ExposedEnum]enumenum 値をドロップダウンとして表示するために必要
[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表示順(負で前、正で後ろ)

alt text

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;
}

alt text

条件付き表示

ShowIf / HideIf で他のフィールドの値に応じた表示制御ができます。

[ExposedField]
public bool useColor;

[ExposedField, ShowIf(nameof(useColor), true)]
public Color color = Color.white;

保存対象から外す

[ExposedField(persistable = false)] を付けると、リモートアプリには公開されるが *.live.json には保存されなくなります。一時的な実験用の値や、起動時に毎回リセットしたい値に使います。

注記

公開メンバーの追加・型変更・リネームを行うと、過去に保存した *.live.json との互換性が崩れることがあります。リネーム時は [FormerlyExposedAs("旧名")] を付けて旧名からの復元を維持できます。

関連リンク