Unity寸感

今回の最新作はふと思い立ってUnityで作ってみたのでとりあえず寸感でも述べる。勢い余ってProバージョンを買ってしまったので今後はUnityの記事も幾つか書かれると思う。
新作はこちら。I.9 -Intelligent Fool-

特徴

  • 古きよきFlashの進化系

つまりActionScript2以前である。オブジェクトの中にスクリプトを書けるし、言語はAS2(or JS)に近い。タイムラインの無いFlash。AS2畑の人は明日にでも始められる。

  • 特定ジャンルのベースは一瞬で出来る

3D空間上に地形を作りキャラクターを配置し動かす、までなら30分で出来るほど楽。物理エンジンも標準搭載しているのでFPSやTPSなどの3Dアクションが非常に作りやすい。

  • 楽だが簡単ではない

Unityは所謂「車輪の再発明」、つまり誰もが書くようなコード部分を全部取って代わってやってくれるのでそこは楽。そしてその先は結局自分で実装するしかない。ツクールのようにゲームを作ったことがないユーザが対象では決して無い。

いわゆるうんこである。

ワールドオブジェクト

Unityのゲームオブジェクトは凄い。Flashより変態度が高い。
基本的にオブジェクトは「コンポーネント」と呼ばれる部品の集合体で表される。コンポーネントは自由に付加したり、元々あるものを削除(3Dモデルのメッシュ描画コンポーネントを削除すれば透明になる)することもできる。
Unityは幾つかのコンポーネントを既に用意してくれている。例えばCharacter Controllerという自機キャラに必要な様々な要素を詰め込んだモノや、Rigidbody(剛体)などである。コライダもコンポーネントの一つとして提供される。或いは、3Dモデルをプロジェクトフォルダから作業スペースにドラッグ&ドロップするだけで、自動的に描画に必要なコンポーネントをくっつけた3Dオブジェクトを作ってくれたりもする。また、オブジェクトを動作させるスクリプトコンポーネントである。これについては後述する。
オブジェクトはプレハブというテンプレートにする事ができ、プレハブとなったオブジェクトはそのオブジェクトに付いたコンポーネントごと自由に動的配置が可能である。自機や敵などの配置はこれで行う。
地形作成機能も付属しているため、適当に山なり川なりを作り、水面オブジェクト(用意されている)を配置し、建物などのモデルを置けばそれだけでマップが完成する。これらは全てGUIで行うことができるため、何も複雑なことを考える必要はない。そしてPlayボタンを押すだけで、命を吹き込まれたように彼らは動き出す。

スクリプト

全てのスクリプトはオブジェクトにコンポーネントとして紐付けられた状態で運用される。シングルトンが欲しければ空のGameObjectを作り適用すれば良いが。自機だの敵だのは基本的に非同期で勝手に動き回る。
IDE*1上でスクリプトのついたオブジェクトを選択すると、なんとそのスクリプトの中に含まれるpublic変数が全て表示されてしまう。これをIDE上から変更することも可能だ(変更した数値はどうやらプロジェクトに保存されるらしく、元のコードが変更されたりはしない)。これはゲームを動作中でも出来るため、実際にプレイしながら歩行速度を変えたりといった試行錯誤が容易に可能である。
また、この機能は汎用型であるGameObject型にも適用され、ワールド上のオブジェクト一覧からドラッグ&ドロップでここに持ってくるだけでそれを変数に代入してくれるのである。なんとも変態的だ。この状態でスクリプトからそのインスタンスを呼び出せば、ちゃんとワールド上のオブジェクトに紐付けられている。

UnityScript

スクリプトの中身について。Unityで使われているのはUnityScriptというJavascript(どちらかというとActionScript2)系列のスクリプト言語である。が、Scriptと付くもののJITコンパイルを採用してるので、実はかなり早い。大体C#の1/2くらいの速度で動くらしい。しかもコンパイル時間は一瞬である。
当然Unityのゲームオブジェクトのパラメータを弄ったりするような専用関数が山ほどあるが、公式にみっちりとリファレンスが用意されている。サンプルもあるため、非常に分かりやすい。英語だが。あと、Javascriptには動的型付けやクラスの概念がないが、UnityScriptにはある。
一応C#でも書けるが、結局ほとんど利用しなかった。定数や構造体はC#を使ってのみ書けるので、その時は利用しなければならなかったが。

アセットストア

Unityに標準搭載されているアセットストアは、ユーザの作り出したオブジェクトやらシェーダやらスクリプトやらなにやらなにまで(アセットと云う)を売買してしまう恐ろしいシステムである。勿論無料なものもある。
購入したアセットはそのまんまプロジェクトにimportでき、一瞬で使用可能になる。三分も掛からない。
品揃えはまだまだ拡がりそうだが基本的に何でもあるので、一切リソースを作れなくてもゲームを作ることが出来る。まあ実際用途としては手の届かない所を買っていく感じになると思うが。
ちなみにI.9では空や床など幾つかのテクスチャやエフェクトなどを購入している。

プロジェクトのビルド

ビルド形式は標準でWindowsの.exeとMacの.appの二通りがある。つまり必然的にWindows/Macの両対応になってしまう。これは良い。後述の追加ライセンスを買うと、iOSAndroidにも書き出せる。項目にはPS3XBOX360Wiiもあるが、恐らく法人用である。
Unityのプロジェクトフォルダにはあらゆるリソースやインポートしたアセットがばら撒かれているが、ビルドの際にその中から自動的に必要なものを抜き出してパッケージしてくれる。これもまた便利である。更に、自動的に描画クオリティ設定とキーコンフィグを作成し、ゲーム起動時に表示してくれるのも素晴らしい。
あとは、今回は使用していないが、Asset Bundleという機能(Pro版のみ)を使うとDLCのようなものも簡単に作れるらしい。とにかくビルドに関してはUnityはとても強い。

Pro版とBasic版

Unityには無料のBasic版と有料のPro版がある。100,000ドル以上儲けたらProにしないといけないが、違いはそれだけではない。とりあえず制作に関わったものとしては以下のようなものが挙げられる。

カメラの映像を他のテクスチャにレンダリングする。つまり鏡面反射に必要で、Pro版は光を反射するリアルな水面や、鏡を使うことができる。

  • リアルタイムシャドウ

つまり影。Pro版だとLightオブジェクトに影というパラメータができ、オブジェクトに影がつくようになる。一気に臨場感が増しクオリティが高くなるが、描画ポリゴン数も増える。悪魔の契約。

  • フルスクリーンポストエフェクト

ブルームとかDOFとか。画面全体に掛かる特殊効果で、最近のイカした3Dゲーは大抵使っている。シャドウと同じように一気に見た目のレベルが上がる必殺技。プログラマーの叡智の結晶である数々のポストエフェクトを、ワンボタンで湯水のように使える所はUnityの強みである。ただし重さは倍増していくので注意。
他にもプロファイラだのなんだの色々あるが、こんな所である。結論から言うと、Pro版を買ったほうが全然いい。だが、円高マジックでも13万弱するので高い。30日間は試用できるので試してみるのもよい。試用期間中も全ての機能が使えるが、書き出したゲームの右下にTrial Versionと小さく書かれる。
ちなみにiOSAndroidへの書き出しは別途それに応じたライセンス料が掛かるので注意。

欠点

さあ、お待ちかね(?)の欠点だ。

  • 簡単ではない

冒頭でも述べたが、楽であっても簡単ではない。大規模なプロジェクトを作ろうとしたら、結局延々と楽な作業を繰り返すことになる。IDEはかなりクセがあるので、それに慣れるにも一苦労だ。ぶっちゃけてしまえば、バリバリ3Dゲーを作れて自前のフレームワークがきちんと出来上がってる人はUnityを使う必要は特に無い。

  • 結局リソースに困る

アセットストアや地形エディタのような機能はあるが、結局リソースは自分で用意する必要が出てくる。Unityを使ったからといっていきなりプロ並のゲームが作れたら苦労しない。まあ訝しげな表情でこの日記を見ているあなたならもう分かっていると思うが。

  • 英語必須

Unityは公式にUnity Answersという巨大なフォーラムがあり、大抵の疑問は網羅されている。が、英語である。日本語の文献は無いとまでは行かないがまだまだ不十分で、どうしても英語の文献を読む必要が出てくる。しかもフォーラムでトピックを検索する時はある程度やりたいことを英語の言い回しで表現しないといけないので若干大変。まあ頑張ればなんとかなる。

  • 止まる。

Unityはよく落ちるしフリーズする。特に自分の環境で多いのは所謂null参照を出してしまった時一定の確率でメニュー以外の操作が効かなくなり終了するしかなくなる。こまめに保存すればダメージなし。

HPだの残機だの2DでGUIを使う必要も出てくるのだが、このGUIがくそったれである。何故か3Dの各オブジェクトと違って、ワールド上に自由に配置したりといった親切な設計が全くなされてない。GUIの制作にはGUIコントロールを呼び出すかGUITextureというオブジェクトを使うかの二択だが、両方ともクソである。当然2Dゲーなんて作れたものではないが、あまりのクソさにぶちぎれた有志が2D用のプラグインを作ってしまったのでそれを使えば幾分か楽かもしれない。

関連書籍

今回は「Unityではじめるゲームづくり」という所謂バンナム*2を使って勉強した。同時にUnity入門という黄色い本も買ったのだが、要点をきちんと押さえ、ゲームとして欲しい機能を教えてくれるのは前者だった印象がある。とりあえずUnityで一本何か作りたい人は購入してみると安定だろう。

*1:統合開発環境、この場合はUnityツール

*2:バンナムで実際に研修に用いられているらしい?