はじめに
以下のジェネレーターを公開しました。公開する上でいくつか知見を得たので記事にまとめたいと思います。
planeなmeshを作る
meshを作るスクリプトはいろいろな方が公開されているので借用します。今回は以下の記事を参考にさせていただきました。
meshを書き出す
エディターで書き出すには以下のコードでかんたんに実現できます。meshデータをシリアライズ化して.asset
というファイル形式で保存できます。
var path = Path.Combine(dir, fileName + ".asset"); UnityEditor.AssetDatabase.CreateAsset(mesh, path);
memo
.asset
ファイルに関する細かい情報は得られなかったのですが、editor設定のAsset Serialization
のMode
によってテキスファイルになったりバイナリファイルになるんだと思います。デフォルトではテキストファイルなのでテキストエディタで中身を読むことができます。デフォルトがテキストファイルなのはバージョン管理ツールと相性がいいからみたいです。
ランタイムでmeshを書き出す
今回はエディターではなくビルドしたアプリからmeshを書き出す必要があります。シリアライズとデシリアラズの仕組みはエディター用の機能なので実行ファイルでは使えないようです。
.asset
のフォーマットを解析してランタイムで作ることも出来そうですが、大変なので他の方法を考えます。.fbx
などのフォーマットも考えましたが.obj
形式がシンプルに記述できるようなのでmeshデータから.obj
形式に変換することにします。
上記の記事によると「Unify Community Wiki」内にてmeshを.obj
形式にエクスポートするスクリプトが公開されていたようですが、今現在サイトが存在しなく見ることができませんでした。
こちらの記事で自作されている方がいましたので参考にさせていただきました。
memo
以下のページの「エディターとランタイムのシリアライゼーションの違い」の項に詳しく説明されていました。
WebGL版でビルドする
ビルドすると以下のようなファイルが出来上がります。
index.html
を開くと以下のようなエラーが表示されました。
Failed to download file Build/***.data.gz. Loading web pages via a file:// URL without a web server is not supported by this browser. Please use a local development web server to host Unity content, or use the Unity Build and Run option.
file://
形式でアクセスしたhtmlからajaxで追加ファイルを読み込もうとすると、CORS制約で読み込めないようです。webサーバーを立ててアクセスすることにします。
memo
webサーバーを立てる
apache
やnginx
やnode
を使ってサーバーを立ててもいいのですが、大変なのでpython
を使って簡易サーバーを立てることにします。macでの実行例になります。
$ cd Builds $ python -m http.server 8080
http://localhost:8080/ にアクセスすると以下のエラーが表示されました。
Unable to parse Build/***.framework.js.gz! This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header "Content-Encoding: gzip" present. Check browser Console and Devtools Network tab to debug.
サーバー側の設定で「このファイルはgzip圧縮されてるよ」と返してあげる必要があるようです。大変なので以下の設定でサーバー側の設定がなくても、unityがいい感じに解凍してくれるように設定します。
ここまでで表示することができました。
memo
WebGL版プレーヤーからファイルをダウンロードできるようにする
.jslib
というプラグインを作成することでUnityスクリプトからJavaScript関数を呼び出せるようです。
JavaScript経由でファイルをダウンロードする方法は以下を参考にしました。
上記で作った.obj
ファイルはテキスト形式なので.obj
拡張子をつけたテキストファイルとしてダウンロードするようにしました。
webに公開する
作ったアプリをwebに公開する必要があります。静的ファイルのホスティングなので「s3」や「Netlify」など無料で使える方法はいくつかありますが、今回は「GitHub Pages」で公開します。
「GitHub Pages」での公開方法はかんたんなので省略します。「GitHub Pages」ではリポジトリのルートか「docs」フォルダ以下を公開することが可能なので、ビルド先を「docs」フォルダにしてpushするだけで公開してくれます。
note
上記で公開したサイトをブログに貼り付けたかったのでiframe
で埋め込みました。
おわり
よかったら使ってください。