狠狠撸

狠狠撸Share a Scribd company logo
ブロック崩しを作ろう!
(改訂版)
渋谷知弘
安達圭司
お詫び
4月25日 当日はお忙しい中、ホルトホールで開催された「春のハンズ
オン祭り」にてUnity「ブロック崩しを作ろう!」教室に来た下さった
方々、
わざわざお越しくださったのに、「ブロック崩しゲーム」完成まで、
時間内に内容を紹介しきることが出来ませんでした。
また、一部、解説が甘い部分があったため、参加者の皆様に混乱を
招く部分もあったりなどで、モヤッとした気持ちのまま、
お帰りになった方もいらっしゃったのではないでしょうか。
お詫びとして25日の補足資料として、「ブロック崩しゲーム」を、
Unity起動?完成までの解説を、画面付きで、当資料にて
解説させていただきます。
当資料について
当資料は、25日に「ブロック崩しを作ろう!」にご参加頂きました方向けに
制作しています。
そのため、Unity5のインストール?起動までは、既に終了しているものを
前提としておりますので、
「Unityって何?」 「何ができるの?」 「どうやってインストールするの?」
といった方は、下記のURLなどで独自に調べてください。
http://hiromart.com/blog/how_to_install_unity5/
また、各スクリーンショット等は、MacOSXで作成しております。
Windows環境の人とは、若干細かい描写が変わってくるかもしれません
が、やってる事自体は変わらないので、空気を読みながら、
「なんとなくそれっぽく」がんばってください!
配布物の確認
最初に配布物の確認をします。
同梱の「ブロックくずしを作ろう.zip」を解凍すると、
図のようなディレクトリ構成になっています。
それぞれ、
「Images」フォルダの中身は、
ゲーム内で使用する画像
「Scripts」フォルダの中身は、
ゲーム内で使用するプログラムを、
予めこちらで、テキストに書いたおいたものになります。
(コピペ用です)
UNITY5の起動?
新规プロジェクトの作成
?新規プロジェクトを作成します。
Unityを立ち上げると、写真のような画面が出てきます。
これは、今までUnityで作ったプロジェクトの一覧になっています。
※いきなりUnityの編集画面が表示されてしまう場合は、
メニューバーより、[File] > [New Project]を選択してください。
まず今回は、新規にプロジェクトを作成しますので、
右上の青いボタン[New Project]を押してください。
新规プロジェクトの作成
UNITYの起動確認
特に何も設定を変更していなければ、図のような画面が立ち上がって
くると思います。
画面のざっとした説明
Hierarchy:sceneに配置されてあるオブジェクトの一覧(最初はカメラだけ)
Scene:sceneに実際にモノを置いた状態
Game:カメラを通して、どのように画面が見えているか
Project:このプロジェクトで使用する各種ファイルなどの構成
Inspecter:画面上に設置されたオブジェクト(モノ)の細かい設定
まずは使いながら惯れていきましょう!
ゲーム解像度の設定
このブロック崩しは、縦長の画面でプレイするゲームです。
ゲーム画面を縦長に設定しましょう。
まずは、先ほど紹介した「Game」ビューの、
アスペクト比を、9:16に設定します。(16:9ではない)
一覧に無い場合は、
+マークを押して、
追加しましょう!
ゲーム解像度の追加
一覧になかった場合、9:16のアスペクト比を追加します。
アスペクト比とは、ざっくり言えば、画面の縦横の比率のことです。
Labelは、分かり易い名前を記入しましょう(書かなくてもOK)
Typeは、「Aspect Ratio」を選択してください。
そして、Width&Heightの部分を、「9」 「16」とそれぞれ記入してください。
選択することで、Gameの画面が縦長になると思います。
フォルダ構成を作成する
今回のゲームを作るにあたって、各種ファイルを整頓するために、
下記の4つのフォルダを作ります。
「Scenes」 「Scripts」
「Sprites」 「PhysicsMaterials」
Projectビューの、Assetsフォルダ
を右クリックして、
[Create]>[Folder]を選択して、
上記4つのフォルダを作成します。
作ったフォルダの説明
【Scenesフォルダ】
このプロジェクトで使用するシーン(scene)を保管します。
Sceneについては次のコマで説明します。
【Spritesフォルダ】
このプロジェクトで使用する画像を保管します。
【Scriptsフォルダ】
このプロジェクトで使用するプログラムのソースコードを保管します。
【Physics Materialsフォルダ】
このプロジェクトで使用する素材の設定を保管します。
後々、ボールなどに設定する材質などの設定です。
SCENEとは…
ゲーム制作に移る前に、sceneについて簡単に説明します。
Sceneとは、ザックリ言えばゲームの場面です。
スーパーマリオブラザーズでいえば、
「タイトル画面」、「残機&ステージ」、「1?1」、「1?2」… など、
全てが個別のsceneとなっています。
SCENEとは…②
Unityでも、各画面をsceneとして取り扱います。
試しに、現在のプロジェクトを保存してみましょう。
Ctrl + S もしくは、メニューの[File] > [SaveScene]
保存する名前と、保存先を聞かれるので、今回は取り敢えず
「Stage1」と命名し、先ほど作ったSceneフォルダを選択してください。
画像の用意
いよいよゲームの制作に移ります。
まずは、配布している「ブロックくずしをつくろう」フォルダの
Imagesフォルダの中の画像を、先ほど作ったUnityの「Sprites」
フォルダに、ドラッグ&ドロップで全て移動します。
ここに画像が表示されれば成功!
画像の配置
ゲームに使う画像を配置していきます。
まずは、ゲームの背景となる画像[bg]をSceneビュー、もしくは
Hierarchyビューに、ドラッグして配置します。(どちらも同じ意味)
その際、Hierarchyビューに、bgが追加されますが、コレを選択すると、
Inspectorビューに、bgに関する細かい設定が表示されます。
設置位置を揃えるため、Transform
のPosition(位置)を、X,Y,Z、
それぞれ全て0に指定してください。
Scale(大きさ),Rotation(角度)は
そのままで結構です。
カメラの設定
このままだと、画面サイズに対して背景がこぢんまりと、悲しい感じで
表示されていると思いますので、カメラのサイズを変更しようと思いま
す。
Hierarchyビューから、[Main Camera]を選択し、
Inspectorビューより、CameraのSizeを
1.4 に変更してください。
Gameビューの黄色い背景bgが、
画面いっぱいにキッチリ収まったと思います。
外壁の作成
背景とカメラの設定が出来ましたので、続いてブロック崩しの外壁を作
成します。
Spritesフォルダより、wallの画像ファイルを、先ほどと同じように、
ドラック&ドロップで画面上に配置してください。
適当に配置すると位置がズレてしまうため、設置後、Inspecterから
Positionを全て0に指定してください。
こちらも完了したら、barとball、
そしてblockをそれぞれ、
ブロック崩しっぽく、適当に配置しましょう。
また、お好みに応じて障害物として、
daikeiや、starなども設置してみましょう!
当たり判定の設定①
今のままでは、ただ画面上に画像を配置しただけなので、
続いて、設置した各画像に、それぞれ当たり判定をつけていきます。
当たり判定が無いと、ボールはブロックやバーをスルーしてしまいます。
四角いモノには、BoxCollider2D、
丸いモノには、CircleCollider2D、
複雑な形のモノ(daikeiやstarなど)には、PolygonCollider2Dを、
それぞれ指定していきましょう!
当たり判定をつける必要があるのは、 [ball] [block] [bar] [wall]、
そして設置した人は、[daikei], [star]です。
当たり判定の設定②
たとえば、ボールに当たり判定を設定します。
①Hierarchyより、ballを選択
②ボールは丸いので、Inspectorより、
ballに、[Add Component]>[Physics 2D]より、
CircleCollider2Dを追加します。
コレだけで簡単に当たり判定が設定できる!
当たり判定の設定③
四角いモノには、BoxCollider2Dを、
複雑な形のモノにはPolygonCollider2Dを、
[Add Component]>[Physics 2D]より、
ballと同じように、各部品に当たり判定を設定しましょう!
しかし、Wallへの当たり判定の設定はやや特殊です。
そのままBoxCollider2Dを指定しても、画面全体に当たり判定が
及んでしまいます。
ここは、BoxCollider2Dを、上壁、右壁、左壁の3つ追加し、
範囲の指定をしましょう。
当たり判定の設定④
外壁の当たり判定設定を行います。
①Hierarchyよりwallを選択し、BoxCollider2Dを追加します。
②InspectorのBoxCollider2Dの設定画面より、EditControllerを
クリックしてください。Sceneビューに表示されている緑枠が当たり判
定ですが、ドラッグで大きさを変えられるようになっています。
①?②を繰り返し、それぞれ上壁、右壁、左壁の当たり判定を設定し
ましょう!
いよいよボールを動かします。
重力や加速度など、物理的な挙動を簡単に付け加えることの出来る、
Rigidbody2Dコンポーネントを、ballに設定します。
方法はこれまでの通り、ballを選択後、「AddComponent」ボタンを
押し、[Physics2D]>[RigidBody2D]を選択し、適用します。
これにより、ゲームの再生ボタンを押すと、ボールが落下するようにな
ります。
しかし、ブロックくずしゲームで、ここまでリアルな挙動でボールが落ち
てしまうと困るので、Inspectorより、追加したRigidBody2Dの
GravityScale(重力)を0に、FixedAngleにチェックを入れましょう。
ボールの挙動を設定
ボールが落ちるように!
ボールの挙動を設定②
プログラムを書いてみる。
続いて、ブロック崩しのボールの挙動を、プログラムで設定します。
とはいえ、プログラムの内容を細かく説明しだすと大変なので、今回は
配布物フォルダ内「Scripts」フォルダの中に、予め作成したプログラ
ムをコピペして使います。
ここでは、Unityでプログラムをどのように書いて、どのように扱うかだ
け、体験していただけたらと思います。
まず、今回はボールを斜め上に発射し、壁にあたると跳ね返るプログ
ラムを作成します。
ボールの挙動を設定③
はじめてのプログラム
最初に作成した「Scripts」フォルダの中に、Ball.csという
C#という言語で作成するプログラムのファイルを作成します。
このプログラムのファイルを、以後、スクリプトと呼びます。
Scriptsフォルダを右クリック > [Create] > [C# Script]
で、作成されるファイルの名前を、「Ball」にしてください。
(大文字と小文字の違いに注意!)
ボールの挙動を設定④
はじめてのプログラム
先ほどのC#で作製したballをダブルクリックすると、すこじ時間が経っ
て、Mono Developerという、スクリプトのソースコードエディターが開
きます。この、Ball.csタブに書かれている文字列が、プログラムの内
容になります。
今回は、予め中に書かれている文章を全て削除し、
配布してあるScriptsフォルダの中の、
Ball.txtの内容を、そのままコピペして
ください。
コピペが終わったら、Ctrl+Sなどで、
保存をしてください。
ボールの挙動を設定⑤
はじめてのプログラム
Ball.csスクリプトの作成が終わったら、早速作ったスクリプトを、
ballに適用してみましょう。
①Hierarchyより、ballを選択して、[Add Compornent]をクリック。
②[Scripts] > [Ball.cs]を選択。
もしくは…
Projectビューから、Ball.csをHierarchyのballにドラッグ&ドロップ
方法はどちらもで可能ですが、前者の方をおすすめします。
ballのInspectorに、右のような
コンポーネントが追加されていれば成功!
ボールの挙動を設定⑥
ballに、作成したコンポーネントを追加したところで、一度
「再生」ボタンを押してみましょう。
ボールが右斜め上に飛ぶようになりますが、wallにぶつかったところ
で、そのまま転がっていってしまいます。
これは、ボールの材質や特性を何も設定していないため、このボール
は反発しない材質で出来ているのようなものです。
次は、ボールが壁に跳ね返るように設定します。
ボ
ー
ル
は
壁
に
着
い
た
途
端
、
転
が
っ
て
い
っ
て
し
ま
う
????
ボールの挙動を設定⑦
最初に作った、Assetの[Physics Materials]フォルダを右クリック
[Create] > [Physics Materials2D]を選択
すると、ボールが跳ねるようなアイコンの何かが作成されました。
ここでは、「Ball」と名づけておきましょう。
これは、適用した素材の反発の具合(弾力?)と、摩擦を設定できるもの
になります。
クリックすると、Inspector上で数値の変更が可能になっています。
Frictionが摩擦、Bouncinessが反発係数(弾力)になります。
今回はボールを動かし続けるゲームのため、
摩擦(Friction)は0に、
受けた力はそのまま100%返すので、
反発係数(Bounciness)は1に設定しましょう。
ボールの挙動を設定⑧
作成したPhysicsMaterials2DのBallを、Hierarchy上のballに指定
しましょう。(ややこしい!)
Ballをballにドラッグ&ドロップで適用できますし、
ballのInspector上にある、Circle Collider2DのMaterialの部分か
ら、設定してあげても構いません。
何を言ってるのか分からない人は、
素直にドラッグドロップしましょう。
「再生」してみるとわかりますが、
ボールがブロック崩しの動きを
するようになりました!
バーを動かそう!
ここまで、ボールの設定が完了しましたが、
このままでは何も出来ないまま、ボールが落ちるのを眺めるだけの
ゲームになってしまいます。
ゲームの要であるバーを、キー操作で動かすスクリプトを作成します。
①まずは、ProjectビューのScriptsフォルダを右クリックし、
[Create] > [C# Script]と、先ほど同じ手順でスクリプトを作成します。
②名前は、[Bar]にしてください。
③先ほどのBallと同じ手順で、Mono Developerで開き、
中身を消して、配布物のBall.txtの内容をまるっとコピペしてください。
④作ったスクリプトを、Hierarchyのbarに適用します。
相変わらず、ドラッグ&ドロップで大丈夫です。
バーが動いた!
「再生ボタン」を押してください。
キーボードの左右キーでバーが動かせ、
ボールを跳ね返すことが出来ます。
これで一気にブロック崩しっぽくなってきました!
写真では伝わりにくいこの躍動感…
ブロックを消そう
ブロックくずしというからには、ブロックが崩れないと意味がありません。
ボールがぶつかったら、ブロックが消えるようにしましょう。
例のごとく、Scriptsフォルダに、C# Scriptの[Block]というファイルを
作成し、配布物フォルダの中の、Block.txtの中身をコピペしてくださ
い。
慣れてきた頃だと思うので、
どんどん端折りますが、
今度はこれをHierarchyの
blockに適用します。
これでblockが消えるように
なるはずです。
ブロックを量産する
ブロックがひとつだけでは寂しいので、ブロックを沢山つくりましょう。
簡単なのは、Hierarchyに既に存在するblockを、コピーして貼り付け
る方法です。
Hierarchyのblockを選択して、[Command + C] > [Command +
Z]
もしくは、blockを右クリックして[Duplicate]を選択。
block1、block2…とどんどん増えていきます。
一見、何も増えてないように見えますが、
増えたものはblockの上に重なっているので、
InspectorからPositionの値を変更するか、
移動ツールを使って移動しましょう。
HIERARCHYを整頓する
さて、調子に乗って気持よくブロックを増やしまくっていると、
Hierarchyの項目がブロックまみれになってしまいました。
このままでも特に問題ありませんが、せっかくなので整頓しましょう。
[Create] > [Create Empty]で、空のゲームオブジェクトを作ります。
名前を、「Blocks」にでも変更しましょう。
そして、block全てを、Blocksにドラッグ&ドロップします。
空のオブジェクトとは
ブロックでもなければ、
ボールでも壁でもな
い、
本当になんでもない
ただの空気のような
存在です。
コンポーネントを追加
することで、モノに
なっていきます。
クリアと失敗を判定
さて、いよいよブロック崩しも完成してきましたが、
これだけでは、とても人に遊ばせられるゲームではありません。
ゲームのクリアとミス時の処理を追加しましょう。
?全てのブロックを壊したら「クリア!」
?ボールが下に落ちてしまったら「失敗…」
この2つを実装する処理を作ります。
まずは、Spritesフォルダ(画像フォルダ)
から、画面中央に、Successとfallの2つの画像を
設置しましょう。
クリアと失敗判定②
クリアと失敗を切り分けるための、「審判」を設置します。
空のオブジェクトを作成します。名前をJudgeにします。
これは先ほど同じ、空のオブジェクトですので、Hierarchyに置いただ
けでは、何の効果もありませんし、存在感もありません。
Judgeに審判としての役割を与えるため、スクリプトを用意します。
①ScriptsにC#でJudgeを作成
②Judge.txtの内容をコピペ
③作成したC#のJudgeを、空のオブジェクトJudgeに適用します。
クリアと失敗判定
今回のJudgeプログラムの内容を日本語でザックリ説明すると、
最初に、成功の画像と失敗の画像を非表示に。
もし、ボールのy座標(縦位置)が、-1.4f(画面の一番下のライン)を下
回った場合は、失敗の画像を表示して、終了
もしくは、ブロックが全て消えてしまった場合は、成功の画面を表示
して終了
といった内容になります。
このプログラムでは、スクリプトに、
どれがボールで、
どれが成功の画像で、
どれがブロックで、
どれが失敗の画像なのか?
どれがなどを入力する必要があります。
クリアと失敗判定
スクリプトJudgeのコンポーネントを追加したJudgeを、
Inspector上で確認してみてください。
図のようになっていると思いますので、それぞれ、
Success_image, Failed_image, Ball_obj, Blocks_obj
を、それぞれ対応する項目に指定してあげてください。
レイヤーの設定
2Dのゲームは、基本的に一枚の絵を何層にも重ねてできていて、
レイヤーとは、その層のことになるのですが、
今のところ、何の設定もしていないので、例えばもし、このゲームの
Projectを保存して終了した場合、再度実行して、全てがこのまま
見え、プレイ出来るとは限りません。
ですので、最後にレイヤーの設定を行おうと思います。
レイヤーの設定②
UI、GAME、BGの3つのレイヤーを作成します。
並べ方も以下の通りとなります。
レイヤーの設定③
レイヤーの設定を行いましょう。
画面左上、
[Layers]>[Edit Layers]
BG,GAME、UI
レイヤーを作成
前の?????の図を元に、
各部品のインスペクタ上から、
Sorting Layerを選択。
速度閾値の調整
レイヤーの設定が完了したら、ゲームを開始してみてください。
ほぼしっかりと遊ぶことが出来ると思いますが、
たまにプレイ中に、速度が遅くなってしまい、ボールが停止してしまう
事があると思います。これは、バグではなく、ボールがオブジェクトに
ぶつかった時、物理計算が成された結果なのです。
速度閾値については、説明が難しいので、細かい説明は割愛します
が、
設定の変更を行います。
メニューの[Edit] > [Project Setting] > [Physics Materials]を選択
Inspector内に、[Velocity Threshold]という項目があるため、こちら
を0に設定してください。
※0に設定すると、0.0001になりますが、これが正解です。
完成!
オマケ
障害物を追加してみよう!
画像の、starや、 daikeiなどを設置して、ブロックと同じように
当たり判定を追加してみましょう。
C#スクリプトを追加して、配布しているstar.txtをスクリプトファイルに
書き写し、starにコンポーネントで適用してみましょう。
障害物として、星のオブジェクトが
動くようになりました。
まとめ
このように、障害物を一つ追加したりするだけで、全然違った面白さの
ゲームが出来上がったりします。
他にも、
?続きのステージを作ってみる
?残機制にする
?ブロックに耐久力をつける
?ボールの早さをランダムで変える
などの工夫で、もっと面白くすることが出来ると思います。
みなさんも、独自で色々と試してみましょう。

More Related Content

フ?ロック崩しを作ろう!