コンテンツにスキップ

Resource へのアクセス

Disguise は、レイヤーから Feed Rectangle まで、Designer のあらゆるものを表すために Resource という概念を使います。式の中で、システム内のさまざまな Resource のフィールドを参照すると便利なことがよくあります。

特定の Resource が識別されると、それを参照してその Resource のフィールド(およびサブフィールド)にアクセスでき、Designer システムのほぼすべての側面にアクセスできます。

なお、すべてのフィールドが文書化されているわけではなく、ソフトウェアのバージョンをまたいで同じ名前を使い続けると確実に頼れるわけでもありません。これは、式が Designer で使われる内部データモデルへの生のアクセスを公開しており、新機能や改善でフィールド名が変わる可能性があるためです。機能が完全に失われることはまれであり、このドキュメントは、ユーザーが必要なフィールドを見つける方法のガイドラインを提供します。

1 つ以上の Resource から値にアクセスしたら、式システムの 関数演算子 を使って値をさらに組み合わせたり変更したりできます。Resource への参照を構成するテキストは、式システムが保持する他の 変数 と同様に扱えます。

要約すると、式を使って Designer の他の部分にアクセスする一般的な流れは次のとおりです:

  1. Designer のユーザーインターフェースで情報を特定します。
  2. ユーザーインターフェースの要素から Alt + 左マウスドラッグして、式フィールドへの接続を作成します。
  3. Designer が構築する参照式を理解します。
  4. 目的の結果を構築するために必要な他のデータを参照する式を追加し続けます。
  5. プロセスの早い段階でメモしたさまざまな式から目的の値を構築するよう、式を編集します。

多くの場合、ユーザーインターフェースの別の部分から値をリンクするだけで、式の作成者は目的を達成できます。

ユーザーインターフェースを使って式を構築するショートカットがあり、alt キーを押しながら、対象のフィールドから式を受け付けるフィールドへマウスを左ドラッグしてアクセスします。

Example of alt-dragging

式が望みの Resource を使うには、まず対象の Resource を識別する必要があります。これには 2 つの方法があります:

  1. タイプと名前による
  2. UID による

システム内の既知の Resource への参照を構築する最もシンプルで読みやすい方法は、type:name 構文を使って Resource を参照することです。

これは、Alt を押しながら対象のフィールドから式へマウスをドラッグして式を書いてもらうよう Designer に頼んだときに、Designer が使う技法です。これは、Resource の名前と、対象のフィールドの一般的な命名規則を学ぶために使う、推奨される方法です。

たとえば、Projector を参照するには、式 projector:"projector 1" を使って Projector 自体を参照します。サブフォルダー内のファイルに由来するビデオクリップを参照するには、videoclip:"sample/george.jpg" を使えます。

UID は Unique IDentifier(一意の識別子)の略です。この識別子はプロジェクト全体で一意で、Resource の名前を変更しても変わりません。Resource が「名前なし」のとき(Resource がより大きな別の Resource に埋め込まれているとき)にも使われます。

この技法の 1 つの使用例は、レイヤーの名前が変更されても、そのレイヤーへの参照を作成する永続的な方法を持つことです。なお、これはこの方法で参照された Resource の複製やコピーには追従しません。

この方法で参照を構築するには、ユーザーは次の手順に従う必要があります:

  1. 対象の Resource のエディターを開きます(レイヤーをクリックするなど)。
  2. ポップアップするエディターウィンドウのタイトルバーを右クリックします。
  3. 表示されるメニューで「Copy UID」をクリックします。
  4. 次の関数呼び出しを使って式を作成します: getByUID(<コピーした番号をここに貼り付け>)

最終結果は getByUID(0x123875234) のような式で、これはエディターを開いた Resource への不変の参照であり、対象の Resource が削除された場合にのみ失敗します。

この技法では、これらの読みにくい式を直接使うのではなく、function タイプの変数に格納すると便利です。ユーザーは、読みにくい getByUID(...) テキストを保持する expression variables device または layer を作成できます。これにより、ユーザーの他の式で Resource への名前付きの参照が容易になります。これは、ユーザーが同じ Resource を複数の場所で参照したい場合に特に便利です。

Resource フィールドへのアクセス

Section titled “Resource フィールドへのアクセス”

参照したい Resource を見つけたら、. 演算子を使ってフィールドにアクセスします。この演算子は、Resource やシステム内のほとんどの他のオブジェクトの名前付きフィールドにアクセスします。

たとえば、すべての Resource には description フィールドがあり、意図した Resource にアクセスしたことを検証するのに便利なことがあります。その場合、ユーザーは式 projector:projector_1.description を入力します。これは、Resource の実際の名前(_ 文字の装飾なし、つまり「projector 1」)を含むテキスト結果を生成します。

一般的な Resource フィールドには次のものがあります:

  • offset - 親に対する、ステージ内のオブジェクトの位置。. 演算子を再度使って x、y、z 座標をさらに指定します(例: projector:projector_1.offset.x)。
  • rotation - 親に対する、ステージ内のオブジェクトの回転。個々のオイラー角として利用できます(例: projector.projector_1.rotation.y)。

システム内の Resource には他にも多くのフィールドが存在し、長期的な安定性は保証できませんが、提供されるデータはまさに Designer が内部で使うものなので、その正確さに疑いの余地はありません。

None に設定されたフィールドへのアクセス

Section titled “None に設定されたフィールドへのアクセス”

場合によっては、ユーザーインターフェースで None に設定されたフィールドにアクセスできることがあります。これは、そのフィールドに見つけるべきオブジェクトがないことを意味します。オブジェクトがないときにプロパティにアクセスしようとすると失敗し、式は評価されません。これが起こらないようにすることを推奨します。

オブジェクトが有効かどうかは、if を使ってテストできます。たとえば if(transportmanager:default.timecode, "has timecode", "no timecode") ですが、フィールドに条件付きでアクセスする方法はありません。つまり、式 if(transportmanager:default.timecode, transportmanager.default.timecode.description, "no timecode") は失敗します。