【Unity】WebGL向けにビルドしたゲームをサーバーにアップロードしてみる
最近流行りのHTML5ゲームの流れに乗って、UnityでWebGL向けビルドを試してみました。スマホアプリを作成したプロジェクトでPCのブラウザ向けにビルドできるのは強み。ビルド自体も簡単なので、ぜひみんなに試してみてもらいたいところ。
あなたのゲームをいち早く完成させるための研究所
最近流行りのHTML5ゲームの流れに乗って、UnityでWebGL向けビルドを試してみました。スマホアプリを作成したプロジェクトでPCのブラウザ向けにビルドできるのは強み。ビルド自体も簡単なので、ぜひみんなに試してみてもらいたいところ。
複数バージョンのUnityがマシンの中にある際、後からプラットフォームサポートのモジュールを追加するときには注意が必要です。Windowsでは発生しにくい問題かと思いますが、MacでUnityを複数バージョン持っている人には確認してもらいたいところ。
複数のフォントファイルをインポートしたときに、スクリプトから動的に切り替えるサンプルを用意しました。セットするフィールドはpublicなフィールドなので、そこにフォントを指定してあげるだけのお手軽操作です。今回は時間経過でフォントが切り替わるようにしてみました。
Textコンポーネントで選択できるFont StyleのBoldですが、フォントによっては太字にならず、横に拡大されて表示されます。これはFont Styleがゲームの実行環境にインストールされているフォントを見にいっているため。実行環境に依存する設定なので、使用時は要注意。
Unityのデフォルトのフォントは日本語表示には向いていません。英字はともかく、漢字とひらがなの太さが合ってなかったりと、ゲームをリリースするにはきつい状態。なので、外部からフォントをインポートしてイケてるテキストを表示しましょ。
Unityのスクリプトファイル名って日本語にできるんですかね? という疑問を持ったので試してみました。変数名なども日本語にして動きを確認しているのでご覧あれ。日本語でコードを書くメリットについても触れています。
コンポーネントをアタッチする際、Inspectorの[Add Component]ボタンを使うと、文字列でコンポーネント名を検索することができます。その様子を紹介しているのと、分かる範囲で確認した検索の仕様(複数ワード検索など)についても記載。
作成したスクリプトはコンポーネントメニューからアタッチすることができますが、デフォルトだと『Scripts』の下にずらっと並びます。AddComponentMenuのAttributeをクラス名の前につけることで、コンポーネントメニュー内のパスを指定することができるため、これを試してみます。
UnityでRigidbodyのAddForceやAddTorqueを使う際に指定するForceModeについて、その4種類の動きを観察しています。モードによって1フレーム辺りのオブジェクトに加えられる力の大きさが異なるので、違いを覚えつつ使い分けができるといい感じ。
オブジェクトに物理的な運動をさせる際、摩擦や反発係数の設定も重要になります。ここでは物理特性マテリアルの摩擦に注目して、設定項目の説明と、摩擦に応じたオブジェクトの動きを確認する実験を行なっています。
UnityでRigidbodyを扱う際、衝突検知モードを選択することができます。ここでは、狭い空間内に気体分子をインスタンス化させるゲームを作り、衝突検知モードによるパフォーマンスへの影響を実験しています。
Sphere Colliderを使った衝突の例として、単原子の気体分子が狭い空間を飛び回る様子を表現してみます。時間経過で気体分子を生成するスクリプトなども公開しています。また、Rigidbodyの衝突検知モードについてもパフォーマンス面で発見がありました。
衝突を表現するのに必要なコンポーネントであるColliderを扱っています。ここでは球形で使い勝手の良いSphere Colliderのパラメータを紹介しています。楕円形などに変形できない制限はあるものの、複数のSphere Colliderを組み合わせることで様々な形を表現できます。
Unityで実行するスクリプトの順番を指定する方法を紹介しています。MonoBehaviourを継承したスクリプトなら、同じStart()が呼ばれるタイミングでも、スクリプト間の実行順序を変えることができちゃうんです。覚えておくと結構便利かも。
Unityで衝突を表現するためのColliderを使って、オブジェクトの爆発的なぶっ飛びを表現してみます。Colliderの重複時は、その重複を解消しようとしてオブジェクトが移動させられますが、その退避先にColliderを置くことで、さらに移動させようと大きな力が加わります。
ここ最近BoxColliderを使って遊んで……じゃなくて各種動作の実験を行なっているのですが、今回はColliderが重複した時、それらのオブジェクトが重ならない位置まで移動させるのにどれくらいの時間がかかるのかを検証しました。個人的に1フレームで移動完了だと思っていたので意外な結果に。
Colliderでは衝突を扱いますが、Colliderコンポーネントがアタッチされているオブジェクトの占有領域が重複している場合は、お互いのColliderが重ならない位置に移動させられます。その時の移動速度はオブジェクトの運動にも影響を与えるため、実験をしてみました。
衝突を表現するのに必要なコンポーネントであるColliderを扱っています。ここでは箱型で汎用性のあるBox Colliderについてパラメータの説明を行なっています。また、Box Colliderを使って衝突時の力が伝播する様子も紹介しています。
ライティングを変えるだけでゲームにおける見た目の印象がガラリと変わります。シーン内で動かす予定のないオブジェクトはStaticフラグを付ければ、そのオブジェクトに当たる光や反射光を事前計算していい感じに表現させることができます。
Unityで環境光の設定を行う方法を紹介。例えば、室内の光源だけで画面を表示したい場合、Skyboxなどから与えられる環境光はカットしたいところ。他にもカメラのクリアフラグを設定した場合についても実験しています。