Unity5.5で2Dゲームを作って遊ぶ
久々にUnityいじってみました
環境
Unity5.5.0
Windows10
Visual Studio2015
つくりたいもの
横スクロールアクション
セットアップ
Visual Studio Tools for Unityをインストール。これでVSでUnityのスクリプトを編集できるようになります。
Unityを起動して New Projectで2Dを選択してプロジェクトを作成
素材
ニンジャスレイヤーとスリケン(手裏剣ではない)を描いてみた。
素材はなんでも良いです。
れっつら作成
Projectタブに先ほどの画像をアセットとしてロードする。
「Sprites」などそれっぽい名前のフォルダーを作り、画像をドラッグ・アンド・ドロップ。
AssetをHierarchyタブにドラッグアンドドロップすると、その画像のスプライトがハイエラルキーに追加される。
ところで勉強会などで「ハイエラルキー」と耳にするが、英語の発音はハイアラーキーらしいし、かと言ってヒエラルキーなのかといわれると、元のドイツ語はキーではなくヒエラルヒーと発音するらしいので結局日本語でなんと呼ぶのが正しいのかわからない。誰か教えて。
Hierarchyタブで先ほどのスプライトを選択すると、インスペクター(Inspector)タブに情報が表示される。
デフォルトだと名前が素材名そのままだが、インスペクターの一番上が名前なので適宜わかり易い名前にしよう。今回は「Player」にした。
ここまでをファイルメニューからSave Scenesでシーンとして保存しておこう。
さて、インスペクターに色々表示されていると思う。これらはコンポーネントといい、スプライトなどのゲームオブジェクトに色々なコンポーネントを組み合わせることで、極力コードを書くこと無くゲームらしい動作をさせることができる。
例えば
Transformコンポーネントはオブジェクトの位置、回転、拡大率を決められる。
Rigidbody / Rigidbody2Dコンポーネントは物理演算を付与できる。
○○Colider / ○○Colider2Dコンポーネントは物体の当たり判定を決めることができる。
オブジェクトの動作を記述するスクリプトもコンポーネントである。
ここでPlayerのスプライトに、インスペクターのAdd ComponentからPhysics2D → Rigidbody2Dコンポーネントを追加し、Gravity Scaleを適当な値にする。(1など)
画面上部の再生ボタン(三角マーク)から実行すると、Gameタブでゲームが動作する。
すると重力に従ってプレイヤーが下へ落ちて行くはず。
このままだと画面外まで無限に落ちるので地面を作ろう。
ウィンドウ上部のGameObjectメニューからはゲームオブジェクトを作成できる。
2D Objectはスプライトしかないっぽいので、3DオブジェクトからCubeを持ってくる。
名前はGroundにした。
Sceneタブに黒っぽい四角形が表れるので選択する。すると四隅をドラッグで拡大できるようになるので、長い長方形に引き伸ばして画面の下の方へ配置する。
実行してみると、Cubeをすり抜けてやはり奈落へ落ちて行ってしまう。
これはスプライトと地面に衝突判定(当たり判定)がない為だ。
PlayerのインスペクターからAdd Componentを押し、Physics2D→Box Colider 2Dを追加しよう。
おそらく自動で範囲が決められると思うが、変更したい際はインスペクターにEdit Coliderボタンがあるのでそれを押すと変更できる。
Groundの方のインスペクターでもコライダーを追加する。すでにBox Coliderがあるだろ!と思われるかもしれないが、このCubeは3D Objectから持ってきたのを思い出して欲しい。このコライダーは3D用なので、2Dのコライダーとは干渉しないのだ。(3D用のコライダーはBox Colider 3DではなくただのBox Coliderという名前なので注意)
Box Coliderを右クリックでRemove Componentし、新たにBox Colider 2Dを追加する。
これで実行してみると、ちゃんとプレイヤーが地面に立つはず。
すごい。物理演算と接触判定をコードを一切書かずにできた。Unityすごい。
次回は操作するためのスクリプトを書こう。
覚え書き
コライダーをBoxではなくcapsuleなどにしたとき、スプライトが回転してしまったりする。
そういう時はRigidbodyのConstraintsのFreeze RotationのZ軸にチェックを入れると、Z軸回転しなくなる。
これは3Dゲームなんかでも、Y軸回転はしたいけどX,Z軸回転はしてほしくない時等に使える。