2nd week - dsuz/unity-game-dev1-1st-term-2020 GitHub Wiki
今回のテーマ
今回は、次のような「ブロック崩しの基本形」を作ります。
これを作るために以下を学びます。
- 物理エンジン
- Rigidbody コンポーネント
- Physics Material アセット
- 衝突判定
- Collider コンポーネント
- 画像を画面に表示する
- Sprite Renderer コンポーネント
- Sprite アセット
以上を組み合わせることで、ブロック崩しの基本形を作ります。
Sprite アセットを使う
Sprite アセットは「画像 (image)」です。これと Sprite Renderer コンポーネントを組み合わせることで、画像を画面に表示することができます。以下をやってみましょう。
- Sprites_Balls_Walls.unitypackage をダウンロードしてインポートする
- この unitypackage には「丸いもの」の画像と「長方形のもの」の画像が含まれている
- /Assets/Sprites/Balls/BallSprite アセットを Scene ウインドウにドラッグ&ドロップする
- オブジェクトが作られ、オブジェクトには Sprite Renderer コンポーネントが追加される
- オブジェクト名を Ball に変えておきましょう
- Sprite Renderer コンポーネントの設定を以下のように変えて、変化を確認する
- Sprite を他の Sprite アセットに変える
- Color を変える
- Flip のチェックを入れたり外したりする
- /Assets/Sprites/Walls/PlankSprite アセットを Ball オブジェクトの下に配置する
- 適当に Sprite Renderer コンポーネントの設定を変えてもよい
- オブジェクト名を Plank に変えておきましょう
- シーンを実行する
- 何も起きない
Rigidbody & Collider コンポーネントを使う
Rigidbody コンポーネントには、オブジェクトに力学的な挙動をさせる(例:重力により落ちる)機能を与えます。Collider コンポーネントは、オブジェクトに当たり判定をさせる機能を与え、当たり判定の範囲を設定することができます。以下をやってみて、それらの動きを見ていきましょう。
- Ball オブジェクトに Rigidbody 2D コンポーネントを追加 (Add Component) する
- ここでシーンを実行して何が起きるかを確認しましょう
- Plank オブジェクトに Box Collider 2D コンポーネントを追加する
- Scene ビューで当たり判定の大きさを確認する
- ここでシーンを実行して何が起きるかを確認しましょう
- Ball オブジェクトに Circle Collider 2D コンポーネントを追加する
- Scene ビューで当たり判定の大きさを確認する
- 当たり判定が大きすぎる場合は、Circle Collider 2D コンポーネントのパラメータ Radius を調整する
- ここでシーンを実行して何が起きるかを確認しましょう
- Ball オブジェクト・Plank オブジェクトを増やしたり、傾けたりして挙動を確認する
- "Duplicate" という操作を試してみましょう
例
Physics Material アセットを使う
Physics Material アセットを使うことで、衝突時の反発係数・摩擦係数を変えることができます。以下をやることで、これらの係数を変えた時に動きがどのように変わるかを見ていきましょう。
- Project ウインドウを操作して、Physics Material 2D アセットを新たに作る
- 名前を Bouncy に変える
- Project ウィンドウ内で、いま作った Bouncy アセットを選択し、Inspector ウィンドウで次のように設定を変える
- Friction: 0 (摩擦係数)
- Bounciness: 1 (反発係数)
- Hierarchy ウィンドウから Ball オブジェクトを選び、Rigidbody 2D または Circle Collider 2D コンポーネントの Material に、Bouncy アセットを設定(アサイン)する
- シーンを実行して挙動を確認する
- Friction, Bounciness の値を変えて、どのように挙動が変わるのかを確認する
問題
ボールが回転しないようにするには、Physics Material 2D コンポーネントのどのパラメーターをいくつに設定すればよいか?
コンポーネントの解説
Rigidbody 2D, Circle Collider 2D, Box Collider 2D コンポーネントの設定値(パラメーター)について説明する
公式リファレンス
ブロック崩しの基本を作る
ブロック崩しの基本形として、以下を作る。
- 上・左右を囲む壁
- キー操作で左右に動くパドル
- 動くボール
そして、以下のような動きをするシーンを作る。
壁を作る
新しくシーンを作り、GameScene という名前で保存する。以下のように Sprite を並べ、Collider コンポーネントを追加し、設定する。Collider の形に注意すること。
※ Camera の映る範囲や、Collider の形などの「ゲーム上では見えないが、Scene ビューには見えるもの」のことをギズモ (gizmo) という。Gizmo は Scene ビューの Gizmos ボタンが押されていると表示される。Gizmo が見えない時は、Scene ビューの Gizmos ボタンが解除されていないか確認しよう。
パドルを作る
- Scripts_Ball_Paddle.unitypackage をダウンロードしてプロジェクトにインポートする
- このパッケージにはパドルとボールを制御するスクリプト コンポーネントが入っている
- パドルとなるオブジェクトに以下の変更を加える
- Rigidbody 2D コンポーネントを追加し、以下のパラメータを変更する
- Gravity Scale を 0 にする
- Constraints を展開し、以下のように設定する
- Freeze Position の Y をチェックする
- Freeze Rotation のチェックを入れる
- PaddleController コンポーネントを追加する
- Rigidbody 2D コンポーネントを追加し、以下のパラメータを変更する
- 実行して、キーボードでパドルを左右に動かせることを確認する
ボールを作る
- ボールとなるオブジェクトに以下の変更を加える
- Rigidbody 2D コンポーネントの Gravity Scale を 0 にする
- BallController コンポーネントを追加する
- 実行して、ボールが右上に動き出すことを確認する
- しかし、ボールが壁に張り付いてしまう
ボールが反発するように設定する
先ほど作った Bouncy アセットをボールに設定する。
スクリプト コンポーネントの解説
まとめ
- コンポーネント
- Rigidbody 2D
- Collider 2D
- Box Collider 2D
- Circle Collider 2D
- Sprite Renderer
- アセット
- Sprite
- Physics Material 2D
- 以下の関係を理解しましょう
- オブジェクトにコンポーネントを追加することで、オブジェクトに機能を与えることができる
- コンポーネントを設定することで、動作を変えることができる
- コンポーネントを設定するために、アセットを使う
- 各コンポーネントについて「設定によって何をどのように変えることができるのか」を知っておきましょう