Unityの作品を全世界に向けて公開したい!という人へ
私の備忘録をかねて、参考になればと思います。
ruby 2.5.1 (途中で2.6.3に上げます)
rails 5.2.3
Railsの準備
手前味噌ですが、RailsにPostgreを導入するでRailsのいつものYay!が見れるところまで進めてください。
コントローラーの作成
アプリのディレクトリにいるか確認する
$ pwd
gameコントローラーを作成する
$ rails g controller games
app/controllers/games_controller.rb を開き、以下のように編集
class GamesController < ApplicationController
def index
end
end
hamlのインストール
これは私の趣味ですが、erbよりhamlが好きなので入れます。
gemfileの一番下に
gem 'haml-rails'
を追加
haml-railsのインストール
$ bundle install
erbをhamlに変換
$ rails haml:erb2haml
最後に
Would you like to delete the original .erb files? (This is not recommended unless you are under version control.) (y/n)
と聞かれるので、yを入力して完了
ビューの作成
app/views/games/ に新しいファイルを作成
ファイル名は "index.html.haml"
index.html.hamlを開き、1行目に
hello world
を書いておく。(""とかで囲う必要無し)
ルーティングの作成
config/routes.rb を開いて、以下のように編集
Rails.application.routes.draw do
resources :games
root 'games#index'
end
indexしか使わないのでほんとはresourcesの後にindexつけたほうが良いと思う。(面倒くさがり)
hello worldが見れるかチェックする
ターミナルに戻り、
$ rails s
ローカルホストにアクセスして、hello worldが見れるかチェックする。
http://localhost:3000/
ここまでOKならgitに登録する
$ git init
$ git -A
$ git commit -m "first commit"
必要なgemのインストール
Gemfile を開き、以下のように編集
group :development, :test do
の中に
gem 'sqlite3'
を追加する
他にbyebugとか入っているが、触らないこと。
また、本番環境用の記述も追加する。中身は空っぽでOK
Gemfileの中の適当な場所に追加する。
group :production do
end
bundle installを忘れないように
$ bundle install
rubyのアップデート
ここまでで、UnityのWebGLファイルを適切な場所におけば動きます。
が、rubyのバージョンが低いためエラーが出るのでアップデートします。
すでに2.6.3以上の方は必要ない、かも?
参考:https://qiita.com/hellhellmymy/items/a32f53ba38f843a8f916
$ brew update && brew upgrade ruby-build
$ rbenv install 2.6.3
$ rbenv local 2.6.3
$ gem install bundler -v 2.0.2
$ rm Gemfile.lock
Gemfileを開き、
ruby '2.5.1'
を
ruby '2.6.3'
に変更する。
$ bundle install
gitに登録しておく (コミットメッセージは自分がわかればなんでも良いです)
$ git -A
$ git commit -m "update ruby"
これでRails側の準備は整いました。
herokuの準備
herokuへの登録
herokuを検索して、サクッと登録してしまいましょう。
herokuのインストール
brewを使ってインストール
$ brew tap heroku/brew && brew install heroku
インストールできたか確認する
$ heroku --version
heroku/7.30.0 darwin-x64 node-v11.14.0
herokuへログイン
$ heroku login
なんでも良いのでキーを押すとブラウザでログイン画面が出るのでログインする
ログインに成功すると、ターミナルでもログイン成功が報告される
herokuのURLにもなる名前をつける
$ heroku create <好きな名前>
これでherokuの準備ができました。
UnityのWebGL書き出し
作成したUnityプロジェクトを開き
File → Build Setting
1.左からWebGLを選択
2.swith platformをクリック
(画像ではBuildになってますが、初期はswitch ~になってます)
3.Build And Runをクリック
出力先は、あとで移動するのでデスクトップにでもおいてください。
コーヒーブレイク
ここまでお疲れ様です。
WebGLの書き出しはかなり時間がかかるのでコーヒーでも飲みながら休憩しましょう。
WebGLファイルをRailsへ
参考:https://qiita.com/kanatano_mirai/items/10ffeeca3e0d49db0caa
参考:https://osouonna.hatenablog.jp/entry/2018/09/29/172951
出力先には、以下の3つのファイルがあると思います
index.html
Builderファイル
TemplateDataファイル
これらを移動します。
index.html
→ public の中へ移動
Builderファイル
→ app/assets/javascripts の中へ移動
TemplateDataファイル
→ app/assets/images の中へ移動
index.htmlの編集
public/index.htmlを開き
TemplateData/***
Build/***
となっている全てのパスの先頭に
../assets/
を追加します。
完成形
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | error</title>
<link rel="shortcut icon" href="../assets/TemplateData/favicon.ico">
<link rel="stylesheet" href="../assets/TemplateData/style.css">
<script src="../assets/TemplateData/UnityProgress.js"></script>
<script src="../assets/Build/UnityLoader.js"></script>
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "../assets/Build/deploy_test.json", { onProgress: UnityProgress });
</script>
</head>
<body>
<div class="webgl-content">
<div id="gameContainer" style="width: 960px; height: 600px"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="gameInstance.SetFullscreen(1)"></div>
<div class="title">error</div>
</div>
</div>
</body>
</html>
jsonファイルの編集
app/assets/javascripts/Build/◯◯.jsonを開き
◯◯.data.***
◯◯.asm.***
となっている全てのファイル名の先頭に
../Build/
を追加します。
(◯◯の部分はWebGLを書き出すときにつけた名前)
完成形
(このとき、WebGLに書き出す際の名前をdeploy_testとしてました)
{
"companyName": "DefaultCompany",
"productName": "error",
"dataUrl": "../Build/deploy_test.data.unityweb",
"wasmCodeUrl": "../Build/deploy_test.wasm.code.unityweb",
"wasmFrameworkUrl": "../Build/deploy_test.wasm.framework.unityweb",
"TOTAL_MEMORY": 268435456,
"graphicsAPI": [
"WebGL 2.0",
"WebGL 1.0"
],
"webglContextAttributes": {
"preserveDrawingBuffer": false
},
"splashScreenStyle": "Dark",
"backgroundColor": "#231F20",
"cacheControl": {
"default": "must-revalidate"
}
compileの設定を変更
config/environments/production.rb を開き
config.assets.compile = false
を
config.assets.compile = true
に変更する。
config.assets.js_compressor = :uglifier
を
config.assets.js_compressor = Uglifier.new(harmony: true)
に変更する。
コントローラーの変更
今のままだとhello worldしか表示されないので、
indexアクションの先を書き出したindex.htmlに変更する
class GamesController < ApplicationController
def index
render file: 'public/index.html'
end
end
準備完了!
まずはローカル環境でテストして、OKならgitに登録しましょう!
$ rails s
うまくunityプロジェクトが表示されているようなら、
$ git -A
$ git commit -m "unity on rails"
いよいよherokuへのデプロイ
さぁ、herokuへデプロイしましょう!
$ git push heroku master
生成されたURLでアクセスする
デプロイが問題なく終了したら、生成されたURLでアクセスしてみましょう!
ターミナルのログの下の方が以下のようになってると思いますが
https://◯◯.herokuapp.com/
がアクセスするべきURLとなります。
このURL名は、上の方でheroku createした時の名前になります。
remote: -----> Compressing...
remote: Done: 53.5M
remote: -----> Launching...
remote: Released v7
remote: https://◯◯.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/◯◯.git
お疲れ様でした!
以上がWebGLで書き出したUnityプロジェクトをRailsを使ってherokuに
デプロイするまでの手順となります。
ローカルと違い、heroku上のunityプロジェクトはロードに時間がえらくかかりますが
やはり全世界に発信できるというのは良いですね。