「Unity2D入門」 アクションゲームを制作 – Rigidbody 2D –

ゲームのリモコン レゴ・ブロック

今回は、ゲーム開発エンジン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」を選択しましょう。Unity 2D

すでに3D用として用意しているプロジェクトを2D用のプロジェクトにしたいといった場合は「Edit」→「Project Setting」→「Editor」と選択、Default Behavior Modeを「2D」に変更すればOKです。

今回のプロジェクト作成時2Dを選択しましたが、「Project Setting」のDefault Behavior Modeを確認したらなぜか3Dになっていたので再度2Dを選択して変更しておきました。

【英単語】
  • 「behavior/ビヘイビア」… ふるまい、動作

2D用のアセットをダウンロード

ユニティちゃん 2Dデータ

デフォルトアセットのパッケージのUnityちゃんは3Dなのでユニティちゃん 2Dデータを用意する必要があります。

ステージのセットは、少し懐かしめの2Dアクションゲームを思わせるフリ-のアセットがあったのでこちらもダウンロードしておきました。Tap and Fly Unity アセットストア

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」に設定

Gravity Scale「-1」に設定

▼【2】Gravity Scale「70」に設定
Gravity Scale「70」に設定

1ではマイナスの重力なのでプレイヤーは上空にのぼっていきます。それに対し2では70位の重力からコライダーを通過して下に落っこちてしまいます。

Gravity Scaleを「0」に設定したらプレイヤーはその場で停止し、「1」に設定したらゆっくり下降していきました。

Is Kinematic

Is Kinematicは物理的な処理の影響を受けなくなる機能です。通常は無効にしておいて必要になったら有効にするという使い方でいいと思います。

▼Is Kinematicを有効にするとUnityちゃんは宙に浮いたままでさらにコライダーがきいているブロックを通り抜けました。

Is Kinematic Unity 2D

物理的な処理が対象なので、スクリプトやアニメーションとなる動作部分は別で、もちろん左右の動きはそのままです。

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」座標がありチェックをした座標は固定されて動かなくなってしまいます。

Rigidbody 2D Unity
【英単語】
  • 「linear/リニア」… 直線の、伸びる (和製英語… リニアモーターカー)
  • 「angular/アンギュラー」… 角のある、 角ばった、 「物理」→ オブジェクトの回転量
  • 「gravity/グラビティ」… 重力、引力
  • 「kinematic/キネマティック」… 運動学 (運動学的な)
  • 「Interpolate/インターポレート」… 書き込む、改ざん
  • 「Awake/アウェイク」… 呼び起こす
  • 「collision/コリジョン」… 衝突
  • 「detection/ディテクション」… 判定、発見
  • 「discrete/ディスクリート」… 別々、個別、不連続
  • 「continuous/コンティニュアス」… つながっている、途切れない、連続的
  • 「constraints/コンストレイント」… 強制、制限

まとめ

2Dゲームを作るにはGUIとかSpriteとかもありますが、その辺は部品を組み立てるように1つずつやっていきましょう。また、いざゲームを作ろうと思って必要性を感じるのはデザインです。

というのもUnityのプレイヤーをアニメーションさせるためのMecanimという機能がアニメーション動作設定をGUIから行えるらしいという事からです。ゲーム制作においてデザインが描けるというちょっとした強みみたいなものを感じました。

自分でデザインできないという場合は、クラウドソーシングなどで外注するという方法もあります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次