スターティアラボ WebAR勉強会 part2

すぎどん
2020-10-02
すぎどん
2020-10-02

前回のおさらい

先日、スターティアラボ主催で第二回勉強会を開催しました。
https://startialab.connpass.com/event/184941/

この記事は勉強会の内容についてまとめたものになります。
今回はPart2のため、Part1をご覧になってない方は、こちらよりご覧ください。
https://dev.startialab.blog/WebAR/a90

前回までの記事で、AR.jsとRaycasterの実装まで完了しました。
これからモグラ叩きのゲームに関する実装をメインに進めます。

モグラの配置

BOXをモグラと見立てて、3x3の格子状に配置していきます。

実装内容

モグラ配置の準備を行います。
マーカータグを取得し、3x3に配置するための配列を用意しています。

第二回勉強会part2モグラ配置1


ループをつかって、3x3の格子状にBOXを配置します。
ポイントは、用意した配列を使ったforEachループで取得できるx、zの値をpositionに設定しているところです。
用意した配列を変更することで4x4などにも対応出来ます。

第二回勉強会part2モグラ配置2

モグラを配置したら、元々あったマーカータグ内のa-boxタグを削除します。

第二回勉強会part2モグラ配置3


動作確認

3x3の格子状にBOXを配置することができました。
また、◉のカーソルを使ってRaycasterの動作も確認できます。

第二回勉強会part2モグラ配置動作確認

Animation

Animationの説明と、実装ソースコードを記載します。 

Animationとは?

属性やプロパティの値を、一定時間内に滑らかに変更させることで、アニメーション表現することができます。
一つのオブジェクトに複数のAnimationを設定することもできます。__(アンダースコア2つ)をanimationの後につけて、一意に識別します。


animation = "property:position; from:..."
animation__2 = "property:rotation; ..."

第二回勉強会Animationとは1


BOXを少し上にアニメーションさせる例を使って、設定を説明します。

animation="
  property: position;   //変化させる項目
  dur: 1000;            //変化させる時間
  from: -1 0.5 -3;      //スタートの値
  to: -1 2 -3;          //エンドの値
  loop: 1;              //変化させる回数
  dir: normal;          //変化の方向
  startEvents: click;"  //開始トリガー

詳しい仕様は以下を参照ください。
https://aframe.io/docs/1.0.0/components/animation.html

第二回勉強会Animationとは2

実装内容

透明度(opacity)を変化させることで、BOXが現れたり消えたりを表現します。
初回起動のため、Animation内に設定した「startEvent」をemitしてAnimation開始しています。


第二回勉強会Animation実装1

これだけだと、同じタイミングで現れて消えていくアニメーションになってしまいます。
Animationの開始時間をランダムに変更します。
まず、Animation繰り返さずに1回だけとします。
そして、Animation終了(animationcomplete)を検知するListenerを記載します。
Listenerの中には、setTimeoutを使って一定時間待つ処理を実装します。待つ時間は0秒〜10秒の間でランダムに決まります。
一定時間待ったあと、Animation内に設定した「startEvent」をemitしてAnimation開始します。

第二回勉強会Animation実装2

動作確認

それぞれのBOXがランダムに現れては消えていく動きになりました。

第二回勉強会Animation動作確認

モグラ叩き判定

最後に、モグラ叩いた判定を入れて終わりにします。

実装内容

叩かれたかどうかの判定は、Clickイベント内に記載します。
Clickイベント発生時に、透明度(Opacity)が0ではない(表示されている)かの判定を入れます。
叩かれたと判定された(Clickイベントが発生して かつ 透明度が0ではなく表示されている)場合、
叩かれたことがわかるように、BOXのAnimationを停止し、色を赤に変え、透明度を1にしてくっきり表示します。

第二回勉強会モグラ叩き判定実装1

raycaster-intersected、raycaster-intersected-clearedのListenerは不要のため削除します。

第二回勉強会part2モグラ叩き判定実装2

動作確認

以上で、WebARモグラ叩きの実装が完了です。

ソースの全容は以下に公開していますので、参考にされてください。
https://glitch.com/edit/#!/startialab-webar-mogura-handson?path=index.html

最後に

WebARを使った簡単なゲームを実装できたかと思います。
WebARってそんなに難しいものではないと知ってもらえれば嬉しいです。

9月に第三回勉強会を開催いたします。
次のテーマはWebVR+AIとなります。
https://startialab.connpass.com/event/188450/

ブラウザで使える推論モデルを使って、簡単なVRの実装をしていきます。
ご興味ある方は是非ご参加お待ちいたします。