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

script はどこに置くか

同じ script でも、どこに付けるかでふるまいが変わります。どの階層に置くかは、たいていコードそのもの より重要です。

付ける先動いている条件終わるとき
オブジェクトそのオブジェクトが画面にある間隠された・無効になった・削除された
シーンそのシーンがアクティブな間そのシーンを離れたとき
space来場者がその space にいる間別の space へ移ったとき
プロジェクト常に、どの space でも来場者が去ったとき

オブジェクトに付ける

既定であり、あるモノに属する挙動には正解です。開くドア、追ってくる敵、反応するボタン。

ctx.entity はそのオブジェクトで、オブジェクトが終わる瞬間に script も止まります。これは利点です。 もう存在しないオブジェクトの script の後始末をする必要がありません。

シーンに付ける

シーンの Scripts セクションで追加します。シーン全体に関わるロジックに使ってください。導入の 段取り、集めるものがあと何個残っているかの集計、来場者が先へ進んでよいかの判断など。

シーンがアクティブになると始まり、シーンが終わると止まります。AR プロジェクトなら、検出した 時点で始まるということです。

space に付ける

space の Scripts セクションで追加します。これはシーンの切り替えを生き延びます。それこそが 要点です。3 つのシーンをまたいで持ち越すスコア、訪問全体のタイマー、次のシーンを決めるコントローラー。

「space レベル」の技術的な意味はこれです

挙動を持ち、親を持たない entity は、どのシーンにも属しません。シーンが入れ替わっても動き続け、 宛先のあるイベントはいずれそこへ届きます。経路はオブジェクト、次にシーン、そして space です。

プロジェクトに付ける

プロジェクト設定で追加します。すべての space に差し込まれるので、来場者がどこへ行っても そこにあります。

space の切り替えを越えて残す必要があるものに使ってください。来場者の選択、全体の進捗カウンター、 アナリティクスなど。

何が何を生き延びるか

置き場所シーン切り替えspace 切り替えリロード
init の中の変数script が生きていればscript が生きていればいいえ
ctx.storeはいいいえいいえ
globalはいはいいいえ
@space: の globalはいいいえ(意図的に分離)いいえ
タブを閉じたら何も残りません

store も global も、何も残りません。次に来たときにも必要な値なら、来場者がまだページにいる間に、 自分の手元へ送っておいてください。

選びかたは、1 つの問いで

このロジックが扱っている、いちばん小さな対象は何か?

  • 1 つのオブジェクトのこと → オブジェクトに置く
  • このシーンのこと → シーンに置く
  • 訪問全体のこと → space に置く。space が複数あるならプロジェクトに置く

「安全のために」何でもプロジェクト階層に置くやりかたは、しばらく動いて、やがて動かなくなります。 プロジェクトの script は特定のシーンが読み込まれていることを前提にできないので、オブジェクト階層の script なら不要だったはずの存在チェックだらけになります。

patch も同じ規則に従います

patch もこれらのどの階層にも付けられ、寿命も同じです。プロジェクト階層の patch は、コードを 書かずにグローバルなコントローラーを組む、いつものやりかたです。


次へ: ctx の API