コンテンツにスキップ

式の後方互換性

リリース r27.10 で、式システムに後方互換性のない変更がいくつか加えられました。このページは、そのリリース以前に式(特に変数代入)を使っていたプロジェクトのリファレンスを提供します。

  • 式の変数は、すべてのフレームの開始時にクリアされます。これにより、変数がタイムラインの他の部分や以前のフレームの評価結果から来た古い値になることがなくなります。
  • 同じフレーム内で変数を複数回再定義することはできなくなりました。これはエラーになり、式エラーは、そのフレームの早い段階でどのオブジェクトが定義したかを通知します。
  • 式は大文字小文字を区別しなくなりました。変数、フィールド、関数は大文字小文字を区別して検索され、識別子 test と Test は別物です。
  • 文字列を整形する式には format:: プレフィックスが必要になりました(以前のプロジェクトのアップグレード時に自動的に追加され、矢印をドラッグして式を入力するときにも追加されます)。
  • 式の中で Resource の関数を呼び出せるようになりました。これは高度な機能で、通常の使用は想定していません。たとえば、式 track:track_1.sectionToBeat(1) を使って、track 1 の 2 番目のセクションの拍単位の時間を返せます。これらの関数は、内部的であることと将来変更される可能性があるため、文書化されていません。

上記で説明した最も影響の大きい変更は、変数のライフタイムの変更です。以前は、早い段階のチェックアウトトラックの開始時に変数を定義し、ショーの実行中ずっとアクティブにしておくことが可能でした。これは、古いデータ、追加のレイテンシ、マシンがセッションを離れて再参加した場合の失敗など、いくつかの理由で危険でした。

変数がこのように使われていたケースに対処するため、Disguise は次を推奨します:

expression variables device は変数を定義し、常に利用可能であることを保証します。これは変数が常に利用可能であることを保証するのに便利ですが、動的に変化する値の場合、いくつかの問題が生じることがあります。始めるには、expression variables device を作成します。

  • 静的な値の場合は、型(通常は float)を選択して目的の値を入力します。
  • 動的な(たとえば外部制御の)値の場合は、function 型を選択し、その動的な値を制御する式を入力します。変数が以前使われていたすべての場所で、今度は呼び出す必要があります(関数になったため)。つまり myvarmyvar() になります。

expression variables layer は、タイムライン上に存在する期間、変数を定義します。これは、アップグレードプロセス中のマルチトランスポートや単一トラックのショーで扱いやすいことがあります。始めるには、expression variables layer を作成します。

expression variables layer は、コンポジションスタックで変数のすべての使用箇所より下にある必要があります。

変数は、レイヤーが再生ヘッドの下にある間のみ利用できます。

他のレイヤータイプでの既存の代入の更新

Section titled “他のレイヤータイプでの既存の代入の更新”

変数代入は引き続き機能しますが、変数が使われる前に定義されるよう注意する必要があります。

変数はレイヤーのコンポジション順に、また各レイヤー内ではフィールド順に上から下へ定義されます。そのため、自身が定義する変数を使うレイヤーは、その変数をレイヤーエディターの上部に近いフィールドで定義する必要があります。

なお、コンポジション順はレイヤーとトランスポート(マルチトランスポート使用時)では下から上です。レイヤー内では、フィールドは上から下へ評価されます。

コア式システムへの変更に加えて、新しい expression variables layer と device が追加されました。これにより、次のことができます:

  • デバイスマネージャー内の複数の expression variable device 内で、任意の数のグローバル変数のグループを作成します。これらの変数はすべてのタイムラインで利用できます。
  • トラック上の任意の数の expression variable layer を使って、時間依存の変数を作成します。変数は、コンポジション順で expression variable layer より上のレイヤーで利用できます。
  • 他の場所で参照したい定義済みのテキスト値を含む文字列変数を作成します。
  • 他の場所で参照したい定義済みの数値を含む float 変数を作成します。
  • myVariable() の呼び出し構文で呼び出せる関数変数を作成します。これは呼び出された時点で評価され、共有された式ロジックを提供します。