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

イベント

イベントを使うと、コードを書かずに、人の操作にシーンを反応させられます。何かが起きたとき、オブジェクトは指定しておいた動作を実行します。

WHEN  誰かがドアをタップしたら
THEN 600 ms かけてドアを開ける
「施錠中」の札を無効にする
シグナル「door-open」を送る

WHEN の部分がトリガー、THEN の部分がステップのリストです。1 つのオブジェクトにイベントはいくつでも追加でき、それぞれが独立して動きます。

イベントを追加する​

  1. オブジェクトを選択します。
  2. インスペクターで + new component をクリックし、Events を選びます。コンポーネントには最初からイベントが 1 つあり、トリガーは Press on the object になっています。
  3. そのイベントをクリックします。Event settings パネルが開きます。イベントをもう 1 つ追加するには、+ add event をクリックします。
  4. トリガーを選びます。Press on the object のままでもかまいません。
  5. + add action をクリックし、ステップを選びます。一覧には検索ボックスがあり、ステップは Actions、Animations、States、Logic に分かれています。
  6. 同じ方法でステップを追加していきます。ステップは並んだ順に実行されます。
開いておくと便利な 2 つの一覧

トリガーのリファレンスにはすべてのトリガーが、ステップのリファレンスにはすべてのステップが載っています。どちらも常に最新です。エディターでの名前の隣に、スクリプトで使うコード上の名前も載っています。例えば Send signal は emit_signal、Signal は on-signal です。

トリガー​

トリガーは、イベントが始まるきっかけです。各トリガーの設定は、上のリファレンスに載っています。下の表では、それぞれのトリガーの用途を説明します。

ポインターとキー​

エディターでの名前発火するタイミング
Press on the objectタップまたはクリックされたとき。クリック、押下、離したときのブランチがあります
Hoverカーソルがオブジェクトに乗ったとき、またはオブジェクトから離れたとき
Double click同じオブジェクトが 300 ms 以内に 2 回クリックされたとき
Long pressオブジェクトが動かされずに 450 ms 押し続けられたとき
Keyキーが押されたとき、または離されたとき
Scrollホイールが回されたとき。方向を指定できます
Drag見る人が自分で配置した AR コンテンツをドラッグしたとき
Pinch配置した AR コンテンツをピンチして拡大縮小したとき
Rotate配置した AR コンテンツをひねって回したとき

Drag、Pinch、Rotate は surface シーンでしか使えません。見る人が配置したコンテンツを操作するトリガーだからです。1 回だけではなく、指が動いている間は何度も発火します。

ライフサイクル​

エディターでの名前発火するタイミング
Launchシーンが始まったとき。すべてのオブジェクトが受け取ります
Resizeウィンドウや画面のサイズが変わったとき
Pauseアプリやタブがバックグラウンドに移ったとき
Resumeアプリやタブが前面に戻ったとき
Visibilityオブジェクトが表示されたとき、または非表示になったとき
Pause でサウンドを止める

見る人が別のアプリに切り替えても、止めないかぎりサウンドは鳴り続けます。Pause でサウンドを止め(例えば、サウンドをミュートしたステートに切り替えます)、Resume で再開しましょう。

AR トラッキング​

エディターでの名前発火するタイミング
Detectマーカーや平面が見つかったとき
Tracking lostトラッキングが外れたとき
Placed見る人がコンテンツを配置したとき
VPS ready位置の特定が始まったとき
VPS localized見る人の実際の位置がわかったとき
VPS localization failedまだ位置がわかっていないとき
VPS error位置の特定をまったく実行できなかったとき

エディターには、シーンのアンカーで起こりうるトリガーだけが表示されます。Detect は毎フレームではなく、トラッキングが始まったときに 1 回だけ発火します。

VPS の位置特定の失敗はよくあること

VPS localization failed は、見る人がマップに登録された場所を探して歩き回っている間、頻繁に発火します。画面に表示するエラーではなく、「引き続き試す」という合図として扱ってください。

時間と距離​

エディターでの名前発火するタイミング
Delay待ち時間のあとに 1 回
Every N seconds何度も繰り返し。繰り返し回数を 0 にすると無制限になります
Distance何かが指定の距離まで近づいたとき、または離れたとき
Variable change変数に新しい値が入ったとき

Distance には At start オプションがあります。シーンが開いた時点で、すでにオブジェクトが近くにあるかもしれない場合はオンにしてください。オフのままだと、イベントは何かが動くまで待ちます。

ステート、衝突、シグナル​

エディターでの名前発火するタイミング
State activeこのオブジェクトが、選んだステートに入ったとき
State inactiveこのオブジェクトが、そのステートから出たとき
Collisionこのオブジェクトが別のオブジェクトに触れたとき。Collide with で相手を絞れます
UI actionUI カードのボタンが押されたとき
Signal別のイベントがシグナルを送ったとき
Game controlsキャラクターが立ち止まる、動く、走る、ジャンプするのいずれかを始めたとき

ブランチ​

一部のトリガーにはブランチがあり、1 つのイベントであらゆる結果に対応できます。例えば、1 つの Distance イベントで「近づいた」と「離れた」の両方に対応できます。

トリガーブランチ
DistanceOn coming closer、On moving away
KeyOn press、On release
HoverOn enter、On leave
Press on the objectOn click or tap、On press、On release
VisibilityOn show、On hide
Game controlsOn idle、On move、On run、On jump

ブランチごとに、別々のステップのリストがあります。ブランチのないトリガーには、On activation というリストが 1 つだけあります。

ステップが作用するオブジェクトを選ぶ​

すべてのステップには Target object フィールドがあります。

  • 空のままにすると、ステップはイベントを持つオブジェクト自身に作用します。ふつうはこちらです。
  • オブジェクトを選ぶと、ステップは代わりにそのオブジェクトに作用します。1 つのボタンで 3 つのドアを開けるときは、この方法を使います。

タップは親オブジェクトにも届く​

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

そのため、グループに 1 つイベントを付けておけば、その中のどれがタップされても受け取れます。40 個のオブジェクトに同じイベントをコピーする必要はありません。

これは次のことも意味します。

  • 「このパネルのどこかをタップしたら」は、パネルに付けた 1 つのイベントで作れます。
  • 同じ親を持つ 2 つの子の間でカーソルを動かしても、親ではホバーの開始や終了は発火しません。カーソルは親の上から一度も出ていないからです。

一部のトリガーは、届き方が異なります。

  • Collision は、触れ合ったオブジェクトでだけ発火します。
  • Key、Scroll、Resize、Launch は特定のオブジェクトに関するものではないので、すべてのオブジェクトが受け取ります。

イベント、パッチ、スクリプトは、同じタップ、キー、衝突を受け取ります。いくつかのトリガーは、スクリプトでは別の名前で届きます。ctx APIを参照してください。

1 つのトリガーは 1 か所で扱う

同じオブジェクトが、同じトリガーにイベントとスクリプトの両方で反応すると、2 回実行されます。何かが 2 回発火するときは、ほぼ間違いなくこれが原因です。

1 つのイベントに複数のキーを使う​

「Space か W でジャンプ」は、2 つではなく 1 つのイベントで作れます。Key フィールドをクリックして、1 つ目のキーを押します。次に or をクリックして、次のキーを押します。必要なだけ追加できます。

  • リストのキーは、それぞれが独立しています。Ctrl などの修飾キーは、一緒に押したキーにだけ適用されます。
  • Auto-repeat など、トリガーのほかの設定は、リストのすべてのキーに適用されます。
  • 同じフィールドでマウスボタンも使えます。その場合、リストにはマウスボタンだけが入ります。

イベントは、これらのキーをテキストとして保存します。アシスタントやスクリプトは、次のように書きます。

ArrowUp        ctrl+KeyW        KeyA+KeyS        Space+double        mouse:middle

キーの代わりにキーバインドを使うこともできます。キーバインドは Project settings → Key bindings で設定します。そこで「jump」のキーを 1 回変えれば、「jump」を使うすべてのイベントに反映されます。左利き向けの操作を頼まれたときに便利です。

ステップ​

各ステップの設定は、ステップのリファレンスに載っています。

エディターでの名前動作
Scene transition別のシーンに移動します
Space transition別のスペースに移動します。シーンを選んでおけば、そのシーンに移動します
Open URLリンクを開きます。今のタブでも新しいタブでも開けます
Open messengerFacebook、VK、OK、Instagram、Telegram、WhatsApp、Viber を開きます
Call phone number電話をかけます
Compose emailメールの作成を始めます
File downloadプロジェクト内のファイルをダウンロードします
Contact download入力した項目から作った連絡先カードを保存できるようにします

Open messenger では、アプリごとに必要な情報が違います。

  • Facebook、VK、OK はページ ID
  • Instagram、Telegram はユーザー名
  • WhatsApp、Viber は電話番号

オブジェクトの表示・非表示と変更​

エディターでの名前動作
Show / hide object対象を表示または非表示にします。シーンに使うと、そのシーンがアクティブになります
Set state保存したステートに切り替えます。長さを設定すると、なめらかに切り替わります
Override properties一時的なステートのように、いくつかの値を 1 回だけ適用します

アニメーション​

エディターでの名前動作
Play animationタイムラインのアニメーションを再生します。ループの種類、繰り返し回数、速度、遅延を設定できます
Stop animation再生中のアニメーションを止めます

Play animation は、どのオブジェクトのアニメーションでも開始できます。そのため、1 つのボタンで、複数のものを同時に動かす一連の動きを始められます。

何かを移動させたり、フェードさせたり、色を変えたりするには、Animation パネルでアニメーションをつくり、このステップで再生します。1 回だけの変化なら、長さを設定した Set state で十分です。

以前につくったプロジェクトには、Transformation、Opacity、Material、Bone transform、Built-in animation の各ステップが残っていることもあります。これらはそのプロジェクトでは引き続き動きますが、エディターではもう選べません。例えば Material は、対象の色、不透明度、発光、表面の設定を保存したマテリアルに近づけるようにブレンドし、各スロットの種類とテクスチャはそのまま保ちます。

移動​

エディターでの名前動作
Follow object別のオブジェクトを追いかけ続けます。距離、オフセット、スムージング、速度を設定できます
Look at object移動せずに、何かのほうを向きます
Stop following追いかけるのも、向くのもやめます
Fly along pathパスに沿って移動します
Stop path flightパスに沿った移動を止めます

ロジック​

エディターでの名前動作
If — otherwise条件を調べ、2 つのステップのリストのどちらかを実行します
Set variable変数に値を設定する、値を加える、または値を切り替えます
Send signal選んだオブジェクト、またはシーン全体にシグナルを送ります
Wait, then待ってから、中にあるステップを実行します

ポインター​

Lock pointer はマウスカーソルを隠し、マウスの動きをシーンで使えるようにします。一人称視点のゲームでは、カーソルがウィンドウの外に出ないように、これが必要です。Release pointer でカーソルが元に戻ります。

プラグインのトリガーとステップ​

プロジェクトに追加したプラグインは、独自のトリガーとステップを持ち込めます。これらはリストの中でプラグインの名前の下に表示され、組み込みのものと同じように使えます。

  • 表示されるのは、そのプラグインが追加されているプロジェクトだけです。
  • プラグインのトリガーには、設定があることがあります。その場合、イベントは設定が一致したときだけ実行されます。毎回反応させるには、設定を空のままにします。
  • プラグインがプロジェクトから外されると、そのトリガーは発生しなくなり、ステップはスキップされます。

自分でつくるには、ランタイムコードを参照してください。

条件を追加する​

条件もステップの 1 つで、If — otherwise を使います。入れ子にすると、3 つ以上の分岐を作れます。

Condition フィールドで、何を調べるかを選びます。

エディターでの名前調べるもの入力するフィールド
Always何も調べません。常に真です—
Variable変数の値Variable、Compare、Value
Distanceこのイベントのオブジェクトと、別のオブジェクトの距離Object、Compare、Threshold
State別のオブジェクトが今どのステートにあるかObject、State
Visibility何かが表示されているかどうかObject、Expected
Chanceランダムな確率Threshold(パーセントで指定)

値は次のように比較されます。

  • 3 は数値、true は真偽値(はい/いいえ)、それ以外はテキストとして読み取られます。
  • == と != は、完全に一致するかどうかを調べます。
  • >、>=、<、<= は数値を比較します。

変数、シグナル、タイマー​

変数は、1 回の訪問の間だけ保たれます。誰かがプロジェクトを開くたびに、空の状態から始まります。初期値を持たせたいときは、Launch トリガーのイベントで設定してください。スクリプトからは、同じ変数がグローバル変数として見えます。

シグナルを使うと、ステップをコピーしなくても、1 つのイベントからほかのイベントを開始できます。例えば、複数のイベントが level-complete を待ち受けていれば、どのイベントからでもそれを送れます。シグナルが自分自身を送り続けると、シーンが固まらないように 8 回で止まります。

タイマー(Delay と Every N seconds)は、オブジェクトがオンになると動き出し、オフになるとリセットされます。オブジェクトがもう一度オンになると、カウントは最初からやり直しです。取りこぼした回の分が、まとめて発火することはありません。

ステート​

ステートは、オブジェクトの見た目を保存したものです。位置、色、表示・非表示などが含まれます。Set state ステップで、そのステートに切り替えます。長さを設定すると、なめらかに変化します。

スイッチ、ハイライト、開いた状態と閉じた状態を持つドアなどに使いましょう。

ステートを選択している間は、編集内容がそのステートに入る

オブジェクトのステートのどれかを選択していると、オブジェクトへの変更はそのステートを変えます。ステートを作っているときは、これが望ましい動きです。ステートを選択したままなのを忘れていると、混乱のもとになります。

詳しくはステートを参照してください。

再トラッキング​

AR シーンでは、イベントごとに再トラッキングのモードがあります。マーカーを見失い、もう一度見つけたときにどうするかを決めます。

  • すぐにステップを最初からやり直す
  • 二度と開始しない
  • 実行中のステップが終わってから、もう一度開始する

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