今回は、ゲーム開発エンジンUnityを使い2Dゲームの作り方を見ていきたいと思います。Unityには3Dと2Dがあり、今回利用するのはUnity 2Dの方です。
photo by DaraKero_F
Unity 2Dについて
Unityで2Dが正式サーポートされたのはUnity4.3以降からです。
従来のUnity3DとUnity2Dとの違いは物理処理です。それぞれの処理は分離しているようなので、2Dゲーム制作時に3D用のコンポーネントをうっかり使用してしまわないように注意しましょう。
また、スクリプトの座標指定の書き方がVector3、Vector2とそれぞれ違うという点もあります。あとは慣れなので制作しながら操作を覚えていくといいと思います。
「下準備」Unity 2D
では、プロジェクトを新規で立ち上げる所から確認してみましょう。
2D用の新プロジェクトをこれから作成するといった場合は、セットアップ時に「3D/2D」を選択することができるので、「2D」を選択しましょう。
すでに3D用として用意しているプロジェクトを2D用のプロジェクトにしたいといった場合は「Edit」→「Project Setting」→「Editor」と選択、Default Behavior Modeを「2D」に変更すればOKです。
今回のプロジェクト作成時2Dを選択しましたが、「Project Setting」のDefault Behavior Modeを確認したらなぜか3Dになっていたので再度2Dを選択して変更しておきました。
2D用のアセットをダウンロード

デフォルトアセットのパッケージのUnityちゃんは3Dなのでユニティちゃん 2Dデータを用意する必要があります。
ステージのセットは、少し懐かしめの2Dアクションゲームを思わせるフリ-のアセットがあったのでこちらもダウンロードしておきました。
Rigidbody 2D
2Dの場合、RididbodyやコライダーはPhysics 2Dから選択できます。2Dの物理的な処理をするための2D用コンポーネントが用意されているようです。
このように3Dゲームを制作する場合の物理的な処理はPhysicsを利用、今回のように2Dゲームを制作する場合はPhysics 2Dを利用と使い分けします。
Rigidbody 2DのInspectorをパッとみてどのような挙動をするのかわからなかったので確認してみました。見てみましょう。
Use Auto Mass
コライダーの設定によって自動的にMassの処理をする機能です。今のところ使わないので置いておきます。
Mass
オブジェクトの重さで整数の単位は「Kg」です。Unityちゃんの体重がわからなかったのでとりあえず43(kg)にしておきました。
Linear Drag
オブジェクトの直線の動きににかかる抵抗 (空気抵抗) です。Dragが重いものを引きずるという意味があります。
Linear Dragの設定はデフォルトでは0になっています。試しに50にするとUnityちゃんが強風を受けているような感じになりました。
今回のような2Dアクションゲームとしての使い道は、強風や台風の影響を受けるトラップがあるステージがあってプレイヤーはそれをかわしながら進むという場面で使用するイメージでしょうか。
Angular Drag
オブジェクトが回転する時の空気抵抗です。プレイヤーが回転しない場合は特に影響ありません。
Gravity Scale
オブジェクトが受ける重力の影響です。動作を確認してみましょう。
▼【1】Gravity Scale「-1」に設定

▼【2】Gravity Scale「70」に設定
1ではマイナスの重力なのでプレイヤーは上空にのぼっていきます。それに対し2では70位の重力からコライダーを通過して下に落っこちてしまいます。
Gravity Scaleを「0」に設定したらプレイヤーはその場で停止し、「1」に設定したらゆっくり下降していきました。
Is Kinematic
Is Kinematicは物理的な処理の影響を受けなくなる機能です。通常は無効にしておいて必要になったら有効にするという使い方でいいと思います。
▼Is Kinematicを有効にするとUnityちゃんは宙に浮いたままでさらにコライダーがきいているブロックを通り抜けました。

物理的な処理が対象なので、スクリプトやアニメーションとなる動作部分は別で、もちろん左右の動きはそのままです。
Interpolate
Rigidbodyによる設定でオブジェクトの動作がぎこちない、滑らかな動作にしたいという場合はこの設定を使用します。
確認してみましたが違いがよくわかりませんでした。動作がカクカクし過ぎてどうしようもない時は試してみたら有効/無効の違いがわかるのかもしれません。
Sleeping Mode
Rigidbodyによる物理処理の開始・終了の設定です。CPUの内部的な処理の設定となります。オブジェクトが静止している時でもCPUが無駄に処理をしないために付いている機能です。
UnityのGUIからは「Start Awake」か「Start Asleep」でスリープ機能が有効となります。Unityマニュアルを見ると「Never Sleep」以外の設定が推奨されているようです。
- 「Never Sleep」… 常に物理演算対象として処理されている
- 「Start Awake」… 物理演算対象として生成されオブジェクトの動作が停止すると物理演算対象外に切り替わる
- 「Start Asleep」… 物理演算対象外として生成されオブジェクトが動作すると物理演算対象に切り替わる
Collision Detection
衝突判定の度合いを設定する項目。高速で動作するオブジェクトが衝突する時に、コライダー判定をすり抜けるように設定するための設定です。
CPUが高負荷になってしまう可能性があるので、必要になった時だけ「Continuous」にして有効にしておくといいでしょう。デフォルトでは「Discrete」で無効となっています。
- 「Discrete」
- 「Continuous」
- 「Constraints」
オブジェクトに対する座標の動きを制限する場合などに使用する設定です。Constraintsの設定項目の中に「X,Y,Z」座標がありチェックをした座標は固定されて動かなくなってしまいます。

まとめ
2Dゲームを作るにはGUIとかSpriteとかもありますが、その辺は部品を組み立てるように1つずつやっていきましょう。また、いざゲームを作ろうと思って必要性を感じるのはデザインです。
というのもUnityのプレイヤーをアニメーションさせるためのMecanimという機能がアニメーション動作設定をGUIから行えるらしいという事からです。ゲーム制作においてデザインが描けるというちょっとした強みみたいなものを感じました。
自分でデザインできないという場合は、クラウドソーシングなどで外注するという方法もあります。