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

イベント

イベントは一文です。これが起きたら、これらを行う。

とき   誰かがドアをタップしたら
ならば きしむ音を鳴らす
600 ms かけて開く
「施錠中」の札を無効にする

ときトリガーならばステップの並びです。考えかたはこれだけで、プロジェクトに 必要なことの驚くほど多くをこれで賄えます。

1 つのオブジェクトはイベントをいくつでも持てて、それぞれが独立して動きます。

ここに挙げたのは、エディターで目にする名前です

script を書いたり patch を組んだりもするなら、それぞれに短いコード上の名前もあります。 トリガーステップのリファレンスに、両方が並べて載っています。エディターで 作っているかぎり、必要になることはありません。

開いたままにしておきたい、生成された 2 つの一覧

反応できるトリガーのすべて:トリガー。 実行できるアクションのすべて:ステップ。 どちらもエンジンから直接生成されるので、古くなることがありません。

すべてのトリガーと、その用途

生成されたトリガーのリファレンスには、それぞれのパラメーターが 載っています。ここでは、それらが何を意味するのかと、人が驚きがちな点を説明します。

入力

エディターでの名前発火するとき
Mouse buttonタップやクリック。クリック・押下・解放のブランチがあります
Hoverカーソルがオブジェクトに入る、または出る
Double click同じオブジェクトを 300 ms 以内に 2 回クリック
Long press動かさずに 450 ms 押し続ける
Keyキー。押下と解放のブランチがあります
Scrollホイールが回る。方向で絞り込めます
Drag配置済みの AR コンテンツをドラッグ
Pinch配置済みの AR コンテンツをピンチで拡大縮小
Rotate配置済みの AR コンテンツをひねる

ジェスチャー系の 3 つは surface のシーンにしか存在しません。来場者が置いたコンテンツについての ものだからです。指が動いている間じゅう連続して発火するので、単発の瞬間ではなく流れとして扱って ください。

ライフサイクル

エディターでの名前発火するとき
Launchシーンが始まる。すべてのオブジェクトに届きます
Resizeウィンドウやビューポートのサイズが変わる
Pauseアプリやタブがバックグラウンドへ
Resume戻ってくる
on-pause は、行儀よく止めるための場所です

来場者がアプリを切り替えても、止めないかぎり音は鳴り続けます。on-pause で音とタイマーを止め、 on-resume で戻す。人が気づく、ささやかな心づかいです。

トラッキング

エディターでの名前発火するとき
Detectマーカーや面が見つかった
Tracking lostトラッキングを見失った
Placed来場者がコンテンツを置いた
VPS ready位置合わせが始まった
VPS localized来場者の実際の位置が分かった
VPS localization failed分からなかった。これは正常で、エラーではありません
VPS error位置合わせがそもそも動かせなかった

それぞれ、アンカーがそれを生み得るシーンでのみ提示されます。検出は毎フレームではなく、 トラッキングが始まる立ち上がりで報告されます。

VPS の位置特定が外れるのは想定内です

on-vps-not-localized は、来場者がマップの認識できる場所を探して歩き回っている間、ごく普通に 発火します。「引き続き試して」という意味に扱い、告知すべき失敗とはしないでください。

時間と近さ

エディターでの名前発火するとき
Delay遅延のあと、一度だけ
Every N seconds繰り返し。回数 0 は無限を意味します
Distance何かが一定距離に入る、または離れる。ブランチは 2 つ
Visibilityオブジェクトが表示された、または隠された
Variable change変数の値が変わった

on-distance には「開始時にも判定する」オプションがあります。これがないと、シーンを開いた時点で すでに近くにあるオブジェクトは、何かが動くまで発火しません。

state・物理・UI

エディターでの名前発火するとき
State activeこのオブジェクトが、指定した state に入った
State inactiveその state から出た
Collisionこのオブジェクトが別のものに触れた。特定の相手だけに絞れます
UI actionUI カードのボタンが押された
Signal別のイベントがシグナルを送った
Game controlsキャラクターの状態が変わった

1 つのイベントで、両方向

いくつかのトリガーにはブランチがあり、1 つのイベントですべての結末を扱えます。距離を一度 決めれば、近づいたときと離れたときの両方に答えられます。

トリガーブランチ
Distance入った · 出た
Key押された · 離された
Hover入った · 出た
Mouseクリック · 押下 · 解放
Visibility表示 · 非表示
Game control待機 · 移動 · ジャンプ · 走行

エディターでは、ブランチごとにセクションが 1 つずつ出ます。ブランチのないトリガーは 「発動時」という単一のセクションになります。

ステップがどのオブジェクトに効くか

どのステップにもターゲットがあります。

空のままなら、イベントが載っているオブジェクトに効きます。これがふつうです。指定すれば、そちらの オブジェクトに効きます。ボタンの 1 つのイベントで 3 つのドアを開けられるのは、これのおかげです。

タップは親へと上っていきます

タップ・ホバー・カードのアクションは、そのオブジェクトと、その親に届きます。

これで繰り返しがかなり減ります。グループに 1 つイベントを付ければ、その中のすべてへのタップを 拾えます。同じイベントを 40 個のオブジェクトにコピーせずに済みます。

うれしい副作用が 2 つあります。

  • 「このパネル内のどこをタップしても」は、パネルに置いた 1 つのイベントで済みます
  • 同じ親の子から子へ移っても、親では hover/blur が発火しません。実際には親から出ていない からです

衝突は例外で、起きた場所でしか発火しません。また、キーボード・スクロール・リサイズ・シーン開始は 特定のオブジェクトの話ではないので、すべてに届きます。

1 つのイベントに複数のキー

Space または W でジャンプ、は 2 つのコピーではなく 1 つのイベントです。最初の組み合わせは トリガーの中にあり、残りは「or」のリストにテキストで書きます。

ArrowUp        ctrl+KeyW        KeyA+KeyS        Space+double

修飾キーは、それが書かれた組み合わせに属します。そして代替の指定は割り当てに追加されるのではなく、 置き換えます。マウスのボタンも同じ書式です(mouse:middle)。

さらによいのは、キーではなくプロジェクトの割り当てを指定することです。プロジェクト設定で 「ジャンプ」を一度付け替えれば、それを参照するすべてのイベントが一緒に移ります。左利き用の操作を 頼まれた日に欲しくなるのは、まさにこれです。

すべてのステップと、その働き

パラメーターは、生成されたステップのリファレンスにあります。

画面遷移と外の世界

エディターでの名前はたらき
Scene transition別のシーンへ移動する
Space transition別の space へ移動する。特定のシーンも指定できます
Open URLリンクを開く。このタブでも新しいタブでも
Open messengerFacebook・VK・OK・Instagram・Telegram・WhatsApp・Viber
Call phone number電話をかける
Compose emailメールを書き始める
File downloadプロジェクトのファイルをダウンロードする
Contact download入力した項目から作った連絡先カードを渡す

メッセンジャーのステップは、Facebook・VK・OK にはページの id、Instagram と Telegram にはユーザー名、 WhatsApp と Viber には電話番号を取ります。

シーンを変える

エディターでの名前はたらき
Show / hide objectターゲットを表示・非表示にする。シーンに対してはアクティブ化になります
Set state名前の付いた state に切り替える。時間を指定すればなめらかに
Override propertiesその場かぎりの値の組を、一時的な state として適用する

アニメーション

エディターでの名前はたらき
Play animationタイムラインのプリセットを再生。ループ・回数・速度・遅延を指定
Stop animationそれを止める
Transformation時間をかけて移動・回転・スケール
Opacityフェード
Materialターゲットのマテリアルを、保存済みマテリアルへ寄せる
Bone transform1 本のボーンを動かす
Built-in animationモデルに付いてきたクリップを再生する

Play animation は、イベントが載っているオブジェクトだけでなく、どのオブジェクトの アニメーションでも開始できます。1 つのボタンで複数のものが同時に動く演出は、これで作ります。

移動

エディターでの名前はたらき
Follow object継続的に追従する。距離・オフセット・スムージング・速度を指定
Look at object動かずに、何かのほうを向く
Stop following上の 2 つを止める
Fly along pathパスに沿って進む
Stop path flightそれを止める

ロジック

エディターでの名前はたらき
If — otherwise条件を判定し、入れ子の 2 本のステップリストのどちらかを実行
Set variable変数を設定・加算・反転する
Send signalシグナルを送る。ターゲットへ、または全員へ
Wait, then待ってから、中に入れ子にしたステップを実行する

ポインター

Lock pointerRelease pointer は、マウスカーソルを隠し、その動きをシーンへ渡します。 一人称視点のゲームで、ポインターがウィンドウの外へ出ていかないようにするために必要なものです。

条件

if_action はイベントのプロパティではなくステップです。だから条件は入れ子にでき、「if の中の if」で 3 つ以上の結末を作れます。

条件が何を見るかは、そのソースが決めます。

ソース判定するもの使うもの
always何も見ない。常に真
variable変数の値変数・演算子・値
distanceイベントのオブジェクトと別のものとの距離ターゲット・演算子・しきい値
state別のオブジェクトがどの state にいるかターゲット・state
visible何かが見えているかどうかターゲット・フラグ
random確率しきい値(パーセント)

値はゆるく解釈されます。3 は数値、true は真偽値になり、それ以外は文字列のままです。==!= は厳密に比較し、ほかの演算子は数値として比較します。

変数・シグナル・タイマー

変数が生きるのは訪問の間で、プロジェクト全体ではありません。誰かがあなたの体験を開くたびに、 空の状態から始まります。初期値は、シーン起動時のイベントから入れてください。これは script が globals として見るのと同じ変数です。

シグナルemit_signalon-signal)は、ステップをコピーせずにイベントをつなぎます。 複数のイベントが level-complete を聞き、どこからでもそれを送れます。自分自身を再送するシグナルは、 フレームを固めるのではなく 8 巡で止まります。

タイマーは、対象のオブジェクトが有効になったときに開始し、無効化でリセットされます。再び 有効にすると、取りこぼした分をまとめて発火するのではなく、カウントをやり直します。

States

state は、オブジェクトの設定に名前を付けたスナップショットです。位置、色、可視性、何でも かまいません。state に切り替えるとスナップショットが適用され、時間を指定して切り替えると なめらかに変化します。

スイッチ、ハイライト、開いた/閉じたドアは、手でアニメーションを付けずに state で作るのが いちばんすっきりします。

state を選んでいる間、編集はその state に入ります

state がアクティブなままオブジェクトを変更すると、編集しているのはその state のスナップ ショットで、オブジェクトではありません。state を作っているときはこれが正解ですが、選ばれている ことに気づいていないと、たいへん混乱します。

再トラッキング

AR シーンでは、イベントごとの再トラッキング設定が、マーカーを見失って再び見つけたときの ふるまいを決めます。すぐに最初からやり直す、二度と再開しない、いま動いているステップが 終わってから再開する、のいずれかです。

script も書く場合は

イベント・patch・script は語彙を共有しています。同じタップが 3 つとも届きます。

1 つのトリガーは、1 か所でだけ処理してください

同じオブジェクトの同じトリガーを、イベントと script の両方に配線すると 2 回実行されます。 二重に発火するときの原因は、ほぼ必ずこれです。


次へ: アニメーション — ものを動かす。