2015年改訂版
2011年にUnityの練習にブロック崩しの作り方をまとめたが、今見ると明らかな間違いや、より良い方法があった…という部分があちこちにある。細かい修正を2015.1改訂版として修正していく。
- 2015/2/4:リジッドボディの誤動作を減らすために、座標を1/10に修正
開発方針
Unityの習作としてブロック崩しを作ってみよう。方針は以下の通り。
- PCをメインターゲットにする。
- 2Dモードで作成。
- Unityに任せられる処理はUnityに任せる。
- キャラクターはUnityで作れる単純な形状を使う。
- Unity4.6.x以降で、言語はC#で開発。
作業手順
- 画面のアスペクト比を決める。
- プロジェクトの作成。
- 背景の作成。
- カメラの調整。
- 画面レイアウトを決める。
- シーンの作成。
- 登場オブジェクトの検討。
- プレイヤーバーの実装。
- ボールの実装。
- ボールをプレイヤーにくっつける。
- ボールを打ち出せるようにする。
- ブロックを壊せるようにする。
- 全てのブロックを破戒したら、ステージを初期化する。
- ボールが画面下に落ちたらボールを再生させる。
- スコアの実装。
- 3ミスでゲームオーバーにする。
以上のような流れで作成していく。それでは作業を開始しよう!
画面のアスペクト比を決める
PCで遊ぶことを想定する。PCのモニタのアスペクト比(縦横比)は多様であり、旧来のブラウン管の比率である4:3のものや、16:9というハイビジョンの比率などがある。
画面サイズの違いでゲーム性やデザインが崩れるのを防ぐため、予め画面のサイズを決めておく。画面サイズが設計と異なるモニタでは、ゲーム画面を中央に表示して、余白を真っ黒にすることで対応する。今回は性能の低いPCでも問題なく動作するように、画面サイズを1024x768にする。
Unityの単位
Unityの大きさは、通常は1が1mを表す。物理挙動に影響があるので、実物大のゲームでは、この単位に合わせるとよい。
Unityでは、0.1であったり、1000といったような、1より小さすぎたり、大きすぎたりするキャラクターを作ると、物理挙動が正しく処理されなくなる。ブロック崩しのように実世界の大きさで考えにくいものについては、画面のピクセル数に合わせて設計した方がやりやすいが、そのままだと横幅が1024となり、大きすぎてしまう。そこで、今回はピクセル数の1/10のサイズで設計する。
プロジェクトの作成
画面デザインなどはUnityを実際にいじりながら決めればよいだろう。早速プロジェクトを作成しよう。
- Unityを起動する
- 【Unity - Project Wizard】が開いたら、【Create New Project】タブを選ぶ。
- 【Browse...】ボタンを押す。
- フォルダの参照で、プロジェクトを作りたい場所を選択。
- 【新しいフォルダの作成】ボタンを押して、プロジェクト名のフォルダ(例えば「Block」など)を作成して【フォルダーの選択】ボタンを押す。
- 【Setup defaults for:】の欄を「2D」に変更。
- グリッドのテクスチャが使いたいので、【Import the following packages:】の欄から、【Standard Assets(Mobile).unityPackage】にチェックを入れてから【Create】ボタンを押す。
- 起動中にエラーが発生したら【Try Again】で処理を続けると、そのうち起動する。
- Unityが起動したら、まずはシーンを保存する。メインメニューから【File】→【Save Scene】を選び、「Game」のファイル名で保存する。
以上で、「Game」というシーンが【プロジェクト(Project)】ビューに作成されて、保存される。これ以降、[Ctrl]+[S]キーで小まめに保存しよう。
背景の作成
GameObjectの【Quad】を使って、画面のレイアウトをする際の目安となるグリッド面を作成する。
- 画面が1024x768になるように、【Game】ビューの下の画面比率をクリックして、「Standalone(1024x768)」を選択する。
- メインメニューから、【GameObject】→【3D Object】→【Quad】を選択。
- 【階層(Hierarchy)】ビューに【Quad】が追加されるので、名前を「Grid」に変更する。
- 名前を変更した「Grid」をクリックして、【Inspector】ビューに「Grid」の設定が表示させる。
- 「Grid」のPositionを画面中心の少し奥、Rotationをカメラ向き、Scaleを1024x768を表すようにするために、以下のような設定にする。
- Position X=0,Y=0,Z=10
- Rotation X=0,Y=0,Z=0
- Scale X=102.4,Y=76.8,Z=1
- ライトを設定するために、【GameObject】→【Light】→【Directional Light】を追加。
- 「Grid」に、グリッド線を貼り付ける。
- 【プロジェクト(Project)】ビューから、【Standard Assets[Mobile]】の左の三角形をクリックして開く。
- 同様に【Textures】を開く。
- 【プロジェクト(Project)】ビューの「grid」をドラッグして、【階層(Hierarchy)】ビューの「Grid」にドロップする。
- 張り付いたグリッドの場所を調整する。
- 【階層(Hierarchy)】ビューの「Grid」をクリックして選択する。
- 【Inspector】ビューに表示されている【Mesh Renderer】コンポーネントを見つけて、Tilingのxを8。yを6。Offsetのx,yを0.5にする。
カメラの調整
「Main Camera」や、Gameビューを画面サイズに合わせる。
- 【階層(Hierarchy)】ビューで「Main Camera」を選択して、【Inspector】に設定を表示させる。
- 【Position】のXとYを0にして、Zを-10にする。
- 【Size】を38.4にする。【Size】は「Orthographic」用の設定で、画面の高さの半分の大きさを設定する。今回は76.8の予定なので、その半分の38.4を設定している。
画面レイアウトを決める。
GameObjectのプリミティブを作って、それらを配置しながら、【プレイヤーバー】【ボール】【ブロック】【ゲームフィールドの壁】の大きさや配置を決めていこう。
フィールド周りの壁
最初にゲームフィールドの広さを決めるために周囲の枠を作ろう。まずは左の枠を作ってみよう。
- メインメニューから【GameObject】→【3D Object】→【Cube】を選択。
- 【階層(Hierarchy)】ビューに「Cube」というのが追加されるので、名前を「FrameL」などに変更。
- 【Position】や【Scale】を調整して、画面左端の枠にする。例として、以下のように設定。
今、作成した左枠をコピーして、右枠を作成しよう。
- 【階層(Hierarchy)】ビューの「FrameL」を右クリックして、【Duplicate】を選択。
- 「FrameL」が2つになるので、どちらでもいいので、片方の名前を「FrameR」に変更する。
- 「FrameR」の【Position】の【x】を調整して、右側の枠にする。
左枠を作ったのと同じ手順で【Cube】を追加し、「FrameT」という名前で上枠を作成する。
こんな感じに調整する。【Position】の【Z】を「0」にすることを忘れずに。
プレイヤーバーの作成
ゲームフィールドが作成できた。これを土台にして【プレイヤーバー】【ボール】【ブロック】のサイズや配置を決める。
【プレイヤーバー】を【フィールドの周りの枠】と同様に【Cube】で作成しよう。決め事は以下の通り。
- 名前は「Player」にする。
- 【Position】の【Z】は0にする。
- 【Scale】の【Z】は5にする。
大きさが決まったら、着色してみよう。
- 色を付けるには、マテリアル(Material)を利用する。
- 【プロジェクト(Project)】ビューの【Create】ボタンを押し、【Material】を選ぶ。
- 作成したマテリアル(Material)の名前を「matPlayer」にする。
- 「matPlayer」マテリアルの【Inspector】を見て、【Main Color】を選び、適当な色を設定する。
- 【プロジェクト(Project)】ビューの「matPlayer」マテリアルをドラッグして、【階層(Hierarchy)】ビューの「Player」にドロップする。
以上で、プレイヤーバーのモデルの作成は完了。引き続き、他のオブジェクトも作成していく。
ブロックの作成
まずは【プレイヤーバー】と同様の手順で、適当なサイズで、適当な色のブロックを1つ作成する。決め事は以下の通り。
- 名前は「Block」にする。
- 【Position】の【Z】は0にする。
- 【Scale】の【Z】は5にする。
- ブロック用のマテリアル(Material)を、「matBlock」という名前で作成して、適当に着色する。
「Block」オブジェクトが出来たら、量産するためにこれをプレハブ(Prefab)にする。
- 【階層(Hierarchy)】ビューの「Block」をドラッグして、【プロジェクト(Project)】ビューにドロップすると、プレハブができる。
- 【階層(Hierarchy)】ビューの「Block」の文字が青くなれば、ブロックのプレハブ化成功。
以上で、ブロックのプレハブ(Prefab)が出来上がる。同様の手順で、別の色のマテリアル「matBlock2」を作成し、別の色のブロックのプレハブ(Prefab)を「Block2」という名前で作成しよう。
作成した2種類のブロックを交互に並べて、面を作ってみよう。
- メニューの【GameObject】→【Create Empty】を選択して、【階層(Hierarchy)】ビューに空の「GameObject」を作成する。
- 作成した「GameObject」の名前を「Blocks」に変更する。
- 【Position】のx,y,zを0にする。
- 「Block」オブジェクトを、作成した「Blocks」ゲームオブジェクトにドロップして、子オブジェクトにする。
- 「Block」と「Block2」プレハブを「Blocks」オブジェクトの子としてドロップして、1行分のブロックを並べる。
出来上がった1行分の「Blocks」オブジェクトを複製して面を作成する。
- 【階層(Hierarchy)】ビューの「Blocks」オブジェクトを右クリックして、「Duplicate」を選択。
- 「Blocks」が増えるので、【Position】の【Y】を修正して、縦に並べる。
ボールの作成
ボールを作成する。ボールは球(Sphere)で作成する。
- メニューの【GameObject】→【3D Object】→【Sphere】を選択。
- 作成した「Sphere」の名前を「Ball」に変更する。
- 【Position】の【Z】を0、【x】と【y】は適当な場所でよい。
- 【Scale】を設定して、大きさを調整する。x,y,z、同じ値とする。
- 「matBall」という名前でボール用のマテリアルを作成して、適当に色を設定する。
以上で、ゲーム画面のレイアウトが決まるとともに、動かすためのゲームオブジェクトの準備も完了した。大きさや配置は良いように決めよう。
Unityを閉じる時は、【Save Scene】と【Save Project】することを忘れずに!