AR.jsとA-Frameを使ってキャラクターが飛び出すARを作成

## ふと思ったこと
名刺にARマーカー（QRコードみたいな）を設置して、カメラを向けるとキャラクターが飛び出るような…そんなことがしたいと思いました。

名刺にカメラをかざすと…キャラクターが出てくる！…そんなのをイメージしています。今回は、忍者のイラストを使って、忍者が飛び出すARを自作してみたいと思います。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/e666b62a-8e8f-b464-91c7-4d48db300f5d.png">


## AR.jsとA-Frameを使って忍者を召喚…の下準備
色々と調べてみると、「AR.js」と「A-Frame」を使えば、割と簡単にできるらしい…ということが分かりました。私が試した流れは下記の通りです。

➀データを格納する場所（サーバー）を準備する

この後登場する「index.html」をwebページとして公開するため、サーバーを用意します。
※ブラウザでWebページとして表示させることができる場所を確保できればOKです。サーバーを契約していない方は、「Github」の「GitPages」という機能を使うことで、無料で用意することも可能です。

※ GitPagesの使い方は[コチラ](https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site)


私の場合、メディア[「ぬるぺでぃあ」](https://miuradonuts.com/)を運用しているので、「miuradonuts.com～」のサーバーへデータ一式を格納することにしました。

※「ぬるぺでぃあ」では、X-serverを契約しています。紹介リンクを下記へ貼っておきますので、サーバーを契約したい方はご参考までに。

X-Serverの紹介リンクは[コチラです](https://www.xserver.ne.jp/?utm_source=introduction_url&utm_medium=cpp&utm_campaign=introduction_program)


➁webページへアクセスできるQRコードを準備する

ウェブページとして公開する「index.html」を格納する場所（URL）から、QRコードを作成します。URLリンクから、QRコードを作成するのは[コチラ](https://qr.quel.jp/)が非常に簡単で便利です。

ここで作成したQRコードを一旦、保存しておきます。

➂作成したQRコードからARマーカーを作る

ARマーカーは、[「AR.js marker Training」](https://jeromeetienne.github.io/AR.js/three.js/examples/marker-training/examples/generator.html)にて作成が可能です。

- 「UPLOAD」から、「➁」で作成したQRコードをアップロードする
- 「DOWNLOAD MARKER」から、pattファイルをダウンロードする
- 「DOWNLOAD IMAGE」から、pngファイルをダウンロードする



## いよいよ、AR.jsとA-Frameを使って忍者を召喚！
サンプルコードでそのまま動くように、ファイル名やフォルダ名の例を挙げながら、説明を進めます。もちろん、コード内のファイル名・フォルダ名と一致していれば、好きな名前で保存して頂いて構いません。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/660ff1e0-b2b1-9e1c-4a8f-f748ec38c483.png">


下記のHTMLコード：index.html という名前で保存
````
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>NINJA-AR</title>

    <script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
    <script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.6.2/aframe/build/aframe-ar.js"></script>
</head>

<body style="margin : 0px; overflow: hidden;">
    <a-scene embedded arjs="debugUIEnabled:false;">
        <a-entity camera></a-entity>

        <!-- Markerを表示した際の処理を以下に記述する -->
        <!-- ARマーカーのファイル名をここで指定する -->
        <a-marker type="pattern" url="img/pattern_simple_qrcode.patt">

            <!-- 表示したい画像を src= ～ で指定する -->
            <!-- 画像の大きさは width と height で設定可能 -->
            <!-- 画像を表示させる位置は position で設定可能 -->
            <!-- 画像を水平に表示させる場合は下記の rotation でOK -->
            <a-image width="5" height="5" position="0.2 0.4 0.4" rotation="-90 0 0" src="img/icon.png">
            </a-image>

        </a-marker>
    </a-scene>
</body>

</html>
````

※「img」という名前のフォルダを、「index.html」と同じ階層に作成する

■表示させたい画像：
icon.png という名前で保存し、「img」フォルダへ

■ARマーカーのIMAGE：
「pattern_simple_qrcode.png」という名前で保存し、「img」フォルダへ

■ARマーカーのMARKER：
「pattern_simple_qrcode.patt」という名前で保存し、「img」フォルダへ

以上で必要なものは準備OK！あとは…「ARマーカー」（pattern_simple_qrcode.png）をスマホのカメラで読み取るだけです！

こんな風に、「icon.png」の忍者をARで召喚することができました。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416622/7471fe2e-3ad8-26f9-f6dc-56df3b447434.png">



## カスタマイズのポイント
今回は、「icon.png」という１枚の画像だけでしたが、レイアウトさえ注意すれば複数枚の画像を表示させることも可能です。

````
<a-image width="5" height="5" position="0.2 0.4 0.4" rotation="-90 0 0" src="img/icon.png"></a-image>
````

このコードで１つの画像となるので、複数枚の画像を表示したい場合には、上記のコードをコピーして増やして頂ければOKです。

- 画像の大きさを変える場合：width と height で設定できます
- 画像を表示させる位置を変える場合： position で設定できます
- 画像を水平に表示させる場合：rotation の最初の角度を「-90」にします
- 読み込む画像:　src="img/icon.png" のようにパスで記載をします

このルールさえ覚えておくだけで、カスタマイズもかなりできますので、ぜひ触ってみてください。


この記事は、著者が運営するメディア「ぬるぺでぃあ」でも読むことができます（記事は[コチラ](https://miuradonuts.com/2023/07/04/note-004/)）
![](https://miuradonuts.com/wp-content/uploads/2023/06/ヘッダーエリア画像作成.png)