Skip to content

3rd week

D. Suzuki edited this page Jun 28, 2020 · 4 revisions

今回のテーマ

解説動画

今回は、次のような「壊れるブロック」を追加します。

これを作るために以下を学びます。

  1. 当たり判定の種類
    • 衝突判定と接触判定(トリガー)という2種類の当たり判定がある
  2. タグ
    • オブジェクトを分類することができる
  3. プレハブ
    • 同じオブジェクトをたくさん作るためのひな型となる
  4. Hierarchy 上でのオブジェクトの親子関係
    • 今回はオブジェクトが増えてきた時に整理するためなどに使える

プロジェクトの準備

解説動画

  • 前回までのプロジェクトがある人は、3rd_week_assets.unitypackage をプロジェクトにインポートする
  • 前回までのプロジェクトがない人は、新しくプロジェクトを作って 2nd_week_finish.unitypackage をプロジェクトにインポートすれば、「前回終了時のプロジェクト」になる

崩せるブロックを作る(タグ)

解説動画

以下の手順で、「ボールが当たると壊れる」ブロックを作成せよ。この作業では「タグ」を使う。「タグ」はオブジェクトを分類する機能であるが、ここでは「『ボール』としてタグ付けされたオブジェクトに衝突されたらブロックが壊れる」ように設定する。

  1. インポートしたスプライトアセット /Assets/Sprites/Blocks/Block 128x64 をシーンに配置し、以下のように設定を変更する
    1. 色を赤に変える
    2. 名前を RedBlock に変える
    3. Box Collider 2D コンポーネントを追加する
    4. TargetBlockController コンポーネントを追加する
  2. 以下のようにして、Ball のオブジェクトに "BallTag" というタグを設定する
    1. メニューから Edit > Project Settings... を選び、"Tags and Layers" を選ぶ
    2. Tags に新しいタグ "BallTag" を追加する(Case-Sensitive であることに注意すること)
    3. シーン上の Ball オブジェクトを選び、Inspector から Tag に "BallTag" を設定する
    4. シーンを実行して、ボールが RedBlock に当たると跳ね返り、ブロックが消えることを確認せよ

注)TargetBlockController コンポーネントが「"BallTag" というタグが付いたオブジェクトに衝突されたらオブジェクトを消す」という機能を提供している。

プレハブを使う

解説動画

シーン上に作ったオブジェクトはひな型として保存し、再利用することができる。この機能を「プレハブ」という。以下のようにしてその機能を使ってみましょう。

  1. Hierarchy 上の RedBlock オブジェクトを、Project ウインドウの /Assets/Prefabs/ フォルダ内にドラッグ&ドロップし、プレハブを作る
    • この作られたプレハブを Project ウインドウ上で選択すると、そのファイル名が .prefab であることが確認できる
  2. 作られたプレハブの名前を RedBlockPrefab に変える
  3. シーン上の RedBlock オブジェクトは削除する
  4. Project ウインドウから RedBlockPrefab をシーンまたは Hierarchy にドラッグ&ドロップすると、「ボールが当たると壊れる赤いブロック」が何度でも作れる

注および参考資料

プレハブをただ使うだけなら簡単だが、一度シーン上に置いて変更した設定をプレハブに反映させたり、設定の一部のみを変更してまたプレハブ化したりなどすると意外と操作は複雑になる。

ボールが当たると貫通するブロックを作る(トリガー)

解説動画

ここまでの当たり判定は「衝突判定」だったが、「接触判定」という当たり判定もある。前者は「当たり判定の範囲は重ならない」。後者は「当たり判定の範囲は重なる。そして、重なっているかどうかを判定する」という違いがある。以下のやり方で、後者の当たり判定を使ってみましょう。

  1. Hierarchy 上で RedBlockPrefab を複製し、以下のように設定を変える
    • 名前を BlueBlock に変える(名前で区別するため)
    • 色を青に変える(見た目で区別するため)
    • Box Collider 2D コンポーネントの設定 "Is Trigger" にチェックを入れる
  2. シーンを実行し、Ball を BlueBlock に当てると、跳ね返らずにブロックが消える
  3. 期待通りに動いたら、BlueBlock を "BlueBlockPrefab" として /Assets/Prefabs/ の下にプレハブ化しておく

注)TargetBlockController コンポーネントは「"BallTag" というタグが付いたオブジェクトに接触されたらオブジェクトを消す」という機能も提供している。

Hierachy 上での親子関係を設定する

解説動画

オブジェクトには「親子関係」というものを設定することができます。これにより、親の情報を子に引き継がせたり、またオブジェクトが増えてきた時にすっきり整理することができます。以下をやってみましょう。

  1. RedBlockPrefab, BlueBlockPrefab をシーン上に適当に配置し、Hierarchy ウインドウ上で Empty な GameObject を作ったり、オブジェクトをドラッグしたりして次のような親子関係を作りましょう
  2. 親子関係を作ったら、以下をやってみましょう
    • 親オブジェクトを無効にしたら、子オブジェクトも無効になる
    • 親オブジェクトの Transform の設定を変えると、子オブジェクトの Transform の設定もそれに従って変わる

注)「親子関係」なのはオブジェクトではなく、実際は Transform が親子関係になっている。

その他のトピック

解説動画1 解説動画2 解説動画3

  • プロジェクトを Hub のリストから消して、もう一度リストに追加して開く
  • プロジェクトの名前を変える
  • gyazo を使って画像・動画をキャプチャし、URL を Slack に送る
  • Hierarchy 上でオブジェクトを「隠す」「選択不可にする」ことができる

課題

RedBlock や BlueBlock と同じ大きさで、かつ「ボールが当たっても壊れない」「色がグレー」のブロック "GrayBlockPrefab" というプレハブを作り、シーンに配置せよ。

シーンに配置できたら、実行中の動画をキャプチャして Slack に送信せよ。

まとめ

  1. タグ (tag) 機能を使うとオブジェクトを分類することができる
  2. プレハブ (prefab) を使うと同じオブジェクトをたくさん作ることができる
  3. 当たり判定には「衝突判定」と「接触判定」の2種類がある
    • 後者をやりたい時は Is Trigger にチェックを入れる
  4. Hierarchy 上でオブジェクト(実は Transform)の親子関係を設定することができる
  5. Case Sensitive (Insensitive) という言葉を知っておきましょう