Unityでメタバース的な博物館を作りたかった話。

## はじめに
メタバースというものが去年ぐらいからテレビなどでも見かけるようになり、大手企業もメタバースでのイベント開催や独自のサービスを開始するなど、流行っていました？よね。
そのころ僕はUnityを触り始めたのですが、ゲームをあまりやらないせいなのか、いいアイデアが思いつかず、チュートリアル程度のものしか作れませんでした。
そんなとき、たまたまテレビでメタバースの特集をやっていたのを見て、思いついたのがデジタル博物館です。弟が恐竜好きで博物館にはよく行ったのですが、田舎の小さな博物館だと、コロナとなかなか行きにくい場所にあるせいで、あまり人がいなかったのを思い出しました。そこで、オンライン上で見れる博物館みたいなのをUnityで作ってみようと思ったわけです。

## 作ったもの
作ったのはこちら→[デジタル博物館](https://harryp0tterk.github.io/DegitalMuseum/)
Enterをクリックするとロードが始まります。
3月ぐらいにはサイトを閉じてしまうので、SNSなどで広めてもらえると嬉しいです！

誰でもどこでも見れる博物館、をコンセプトに作りました。インストールしなくてもいいようにブラウザで動くWebgl形式でやりました。
Webglに対応しているブラウザから見れます(PCのみ）。
ロードが長いのでしばらくお待ち下さい。
### 製作期間
だいたい半年ぐらいです。ただ、二回ほど作り直しているので、実質一ヶ月強だとおもいます。
### 使ったサービスなど
・Unity 2021.3.14f(Webglでビルド)
・サーバー　自宅サーバー(Ubuntu 22.04)
・3Dモデル作成　Blender,Scaniverse

僕はパソコン部的なところに所属しているのですが、顧問の先生のツテで場所だけ貸してもらい、中古のPCで作った自作サーバーで動かしてます。サーバーの構築からやってみたかったのと、レンタルサーバーは諸事情により使えなかったので。

展示物はSketchfabで公開されているものや、部活で行った博物館でiphoneで3Dスキャンしたりしたものです。Blenderはスキャンしたモデルの処理に使いました。

## 二度の作り直し
### 初期案
最初はメタバースを思いっきり意識して作ろうとしていました。実装した機能と実装したかった機能は以下のとおりです。
#### 実装した機能
・閲覧機能（3Dモデルが見れる（動かせない）、説明が見える）
・マルチプレイ（他の人のアバター（カプセルみたいなやつ）が見える）
・チャット機能（公開チャットのみ）

マルチプレイにはMirrorというアセットを使いましたが、これがいけなかったです。Mirrorは日本語の情報が少なくて、初心者の僕にはきつかったです。英語のドキュメントを読むというのも相当な労力が必要でした。PhotonFusionが出る前のPUN2は同時接続数が20人までという制約があったのでMirrorを使ったのですが、閲覧機能以外はまともに動かなかったです。単純に技術が足りませんでした。ただ、仕組みを考えるのはとても面白かったです。

#### 実装したかった機能
・ボイスチャット（リアルタイムで解説してくれる、みたいなのを作りたかった）
・動画再生（解説動画など）
・アバター読み込み機能（VRMを使える）

Webglはメディア関係が色々とややこしいのですが、動画再生は特にうまくいきませんでした。StreamingAssetsに置くと再生できず、GoogleDriveからURLで再生しようとしても上手く行かない。再生できたときもあったのですが、距離でのAudioの制御ができず、大音量で博物館全体に流れてしまいました。
ボイスチャットはPhotonVoiceを使おうと思ったのですが（マルチプレイはMirrorで実装しているのに！）、そもそもWebgl非対応でした。アバター読み込みに関してはどうやればいいんでしょうか（思考放棄）。


一旦は作ってみたものの、これではだめだと3ヶ月ぐらいで作り直します。

### 第二案
独自でデジタルな博物館を作れないような小さな博物館でも使えるようにと、展示物の3Dモデルさえ作れば（あれば）展示できるようにしようと思いました。また、閲覧機能をもっと充実させようと機能を考えました。

#### 実装した機能
・3Dモデルのアップロード機能
・展示物のデータベース作成

実装できた機能はこれだけです。アップロードソフトもUnity(exeにビルド)で作り、サーバーにアップロードするところまでは行きました。3Dモデルは重いので、gzipで圧縮しサーバーにアップロードします。また、アップロードされたモデルのモデル名、博物館名、詳細がデータベース(mysql)に登録されます。そこからデジタル博物館にロードされます（する予定でした）。
しかし、デジタル博物館にロードするところが問題でした。

#### 実装したかった機能
・アップロードしたモデルのロード

先程も言ったように、アップロードまではできたのですが、そこからデジタル博物館にロードできませんでした。アップロードされた展示物の数だけ台座のPrefabを生成し、位置をデータベースの情報から決めて配置するところまではうまくいきました。しかし、エディター上でもブラウザ上でもロードができません。発生したエラーをしらべても自分の知識では理解できず、結局諦めてしまいました。
そもそもwebglで追加コンテンツをロードする、みたいな情報がなくてロジックすら曖昧でしたので、うまくいくわけはないですね。
どなたか、webglでサーバーからロードする方法知ってる人いますか？

これも2ヶ月ぐらい頑張ったのですが、あることをきっかけにもう一度やり直します。

### 第三案
総合の授業で行った博物館で、土器を3Dスキャンする機会が偶然にもありました。iphoneでスキャンしたモデルはかなり出来が良く、これなら現地に行ってスキャンして、それを自分がアップロードすればいいのでは？と思い、閲覧機能のみを実装しようと考えました。さらに、ライティングなども凝ってみようと頑張ってみて、出来たのが今の形です。

#### 実装した機能
・閲覧機能（初期案と変わらず）
・モデルのダウンロード機能（Sketchfabより）

閲覧機能に関しては、今の所初期案からほぼ変わっていません。
せっかく3Dスキャンしたので、モデルのダウンロードも実装したいと思い、Sketchfabにアップロードしたものをダウンロードしてもらうという形で、とりあえずは実装できました（何も自分はやっていない）。展示物をクリックすると詳細とSketchfabへのリンクが表示されるので、そこからアクセスしてください。ライセンスは博物館の方に許可をもらい、CCBYで公開しています。
ただ、SketchfabがEpicGamesに買収？された影響で、18歳未満はモデルのアップロードができなくなったので、どうしようか考えています。

長野市立博物館の方々をはじめ、協力してくださった皆さん、ありがとうございました！


## 様々な課題
他にも、様々な課題がありました。
### サーバー
レンタルサーバーを諸事情により借りることが出来ないので、部活の顧問のツテでサーバーを置く場所と、ドメインを提供してもらいました。普通のデスクトップPCにUbuntuを入れてサーバーにしたのですが、Linuxをまともに触るのが初めてだったので、Apacheを入れるだけでも苦労しました。
ですが、httpsにしたりと色々な経験ができたのでとても良かったです。
qiitaの記事にも随分お世話になりました。
### アクセス数
Googleアナリティクスを入れているのですが、当然のことながらアクセス数などありません。割とモチベーション下がったのもこれが原因です。世の中のサイトはすごいんだなーと感動しました（小並感）。SNSなどで広めてもらうとアクセス数が伸びてモチベーションに繋がります！お願いします！

## 最後に
もうすぐクローズしてしまうので記録としてこの記事を書きましたが、思い返すと大変だったなーと感じました。docomoとかNTTのメタバースを見て、「うわっ、このクオリティでリリースしちゃうの！？」とか思ってましたけど、自分で作ってみたことでその苦労がわかりました。
自分としては初めての大きな作品なので、見てもらえると嬉しいです！