WebVRに入門する

この記事は [リンク情報システム](https://www.lis.co.jp) の「[Tech Connect Summer 夏のアドベントカレンダー](https://qiita.com/dgkz/items/2862d5e6b77203a126b3)」のリレー記事です。
engineer.hanzomon のグループメンバーによってリレーされます。
（リンク情報システムのFacebookは[こちらから](https://ja-jp.facebook.com/lis.co.jp/)）


#1.はじめに
とりあえず今回もVR関連でなにか書こうかな？
でも今回あまり時間がないしちょっとしんどいかな？
Web系の業務やってるわけだしそっちでなにか書けばええかな？
Web・・・VR・・・？
というわけで今回はWebVRをちょこっと触ることにしました。


#2.フレームワーク
調べるといくつかでてきたのですが、2,3年前あたりに波があったんでしょうか？
2017年くらいで更新が止まってる？ものが多いようにみえました。
ネット上の記事自体も2017年ごろのものが多いようですね。
生きている？もので有名そうなのは以下の二つでしょうか。

・[React 360](https://facebook.github.io/react-360/)
・[A-Frame](https://aframe.io/)

今回は時間もないのでHTMLのタグだけで色々できるらしいA-Frameを触ってみます。

##2-1.とりあえず触ってみる
とりあえず公式をみればチュートリアル的なものがあるはず。
ということで[Getting Started](https://aframe.io/docs/0.9.0/introduction/)へ。

```html:sample
<html>
  <head>
    <script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box>
      <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
      <a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
      <a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
      <a-sky color="#ECECEC"></a-sky>
    </a-scene>
  </body>
</html>
```
ブラウザで表示するとこんな感じ。
![a-frame.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282891/5fd53245-1588-bf3f-9719-7b058917c435.jpeg)
ほんとにHTMLだけでなんか色々表示できました。
ちなみに普通にブラウザで見る場合、デフォルトで慣れ親しんだWASD移動ができるようです。すごい。
でも上下の移動はできないみたい？マウスでカメラを上に向けて移動しても上には動きませんでした。


コードの内容としては`<a-scene></a-scene>`の中に`<a-xxx></a-xxx>`を置くことでオブジェクトを表示できるらしい。
これだけでも色々と作れそうな感じがします。
公式ページをみるとこのほかにもいろいろなタグがある様子。
ということでいくつかタグを確認！

###`<a-asset>`
テクスチャとかモデルデータとかのリソースをまとめるためのタグらしいです。
子として使うタグは以下の4つ。
`<a-asset-item>`：3Dモデルとかマテリアルとか
`<audio>`：オーディオファイル
`<img>`：テクスチャ画像など
`<video>`：動画ファイル
詳しくはこちら（[Asset Management System](https://aframe.io/docs/0.9.0/core/asset-management-system.html)）


###`<a-box>`
名前そのまま。箱を表示します。
テクスチャを指定する場合は`src`にそのままパスを指定するか`<a-asset>`のidを指定します。
初期位置は自分のカメラの下らしいので位置を指定しないと初期状態で表示されず困惑することになります（なりました。

```html
<a-scene>
    <a-assets>
        <img id="texture" src="./test.png">
    </a-assets>
    <a-box src="#texture" repeat="1 1" position="-1 0.5 -3" rotation="0 45 0" depth="1" height="1" width="1"></a-box>
    <a-sky color="#ECECEC"></a-sky>
</a-scene>
```

![a-frame.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282891/724aa104-cb82-4530-a1d4-40df152bb25d.jpeg)

###`<a-image>`
こちらは画像をそのまま表示します。
テクスチャの指定とか初期位置の注意点とかは`<a-box>`同様。

```html
<a-scene>
    <a-assets>
        <img id="texture" src="./test.png">
    </a-assets>
    <a-box src="#texture" repeat="1 1" position="-1 0.5 -3" rotation="0 45 0" depth="1" height="1" width="1"></a-box>
    <a-image src="#texture" position="-3 0.5 -3" rotation="0 45 0" depth="1" height="1" width="1"></a-image>
    <a-sky color="#ECECEC"></a-sky>
</a-scene>
```
![a-frame.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282891/45329ca7-3ea1-81b6-9e43-b5bbac83999e.jpeg)

###`<a-dodecahedron>`
どでかへどろん・・・？めっちゃでかいなにかなんやろなぁ・・・。
と思いましたが十二面体らしいです。英語力が足りない。

```html
<a-scene>
    <a-dodecahedron color="#FF926B" radius="1" position="-1 0.5 -3"></a-dodecahedron>
</a-scene>
```
![a-frame.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282891/508f53f2-45dc-7d3b-b2d9-3aa4b5068040.jpeg)

###`<a-gltf-model>`,`<a-obj-model>`
3Dモデルの表示用のタグ。
それぞれgltf形式、obj形式用のようです。推奨はgltfの模様。
VRMもgltf形式の拡張なので拡張子変えたらいけるとかなんとか・・・？
時間もないし手元にどの形式のファイルもなかったのでお試しは断念。

###`<a-entity>`
いろいろいじり倒す場合はおそらくこれをつかうんだろうなぁという感じのタグ。
属性の組み合わせとかでいろいろできる・・・のかな？
パーティクルとか使えるみたいです（[A-Frameでいろいろ降らせる](https://idontwannawork.github.io/posts/aframe-particle/)）
詳しくはこちら[Entity-Component-System](https://aframe.io/docs/0.9.0/introduction/entity-component-system.html)

#3.おわりに
というわけでほんとに少しだけでしたがWebVR入門ということでA-Frameを触ってみました。
Oculas Questが盛り上がってますし今後こういうのも盛り上がっていくのでしょうか。
WebであればまだUnityよりはとっつきやすい感があるのでじわじわ触っていきたいですね。



#参考
[A-Frame](https://aframe.io/)
[A-Frameを使ってWebVRを実装してみよう](https://magnets.jp/web_design/8859/)
[WebVRをReactで開発するフレームワーク「React VR」ことはじめ](https://mae.chab.in/archives/59799)

---
[リンク情報システム株式会社](https://www.lis.co.jp)では一緒に働く仲間を[随時募集](https://www.lis.co.jp/employ_top)しています！
また、お仕事のご依頼、ビジネスパートナー様も募集しております。[お気軽にご連絡](https://www.lis.co.jp/inquiry)ください。