コンテンツにスキップ

第5週:画像を取り込んで落とそう

前回はC#スクリプトを書いて、オブジェクトを動かすことができました。 transform.positiontransform.Rotateで、自分の書いたコードが 画面の中で動くのを確認しましたね。

今日からいよいよゲーム制作を始めます。 今日は自分でスクリプトを書かなくても、 Unityが用意している「物理エンジン」で画像が落ちるようにします。

  • これから作るゲームの全体像をつかむ
  • 画像をUnityに取り込む方法を覚える
  • Rigidbody 2Dで重力を働かせる
  • Collider 2Dで床に乗せる

これから作るのは、同じもの同士がぶつかると合体して大きくなるパズルゲームです。 スマホゲームで遊んだことがある人もいるかもしれません。

完成したゲームの画面
完成したゲームの画面

遊び方はこうです。

  1. 画面の上をクリックすると、そこから玉が落ちてくる
  2. 玉は箱の中に溜まっていく
  3. 同じ玉同士がぶつかると、1つ大きい玉に合体する
  4. 合体するとスコアが増える
  5. 箱からあふれるとゲームオーバー
その週にできるようになること
5 画像が落ちて、床に乗る
6 クリックした場所から玉が出てくる
7 箱の中に玉が積み上がる
8 同じ玉同士が合体する(いちばんの山場)
9 合体のバグを直して仕上げる
10 スコアが画面に表示される
11 ゲームオーバーとリトライができる
12 音がついて完成

今日はこの2つだけです。

  • 玉が1つ、重力で落ちてくる
  • 落ちた玉が床の上で止まる
  1. Unity Hubを起動
  2. プロジェクト一覧から「MergePuzzle」をクリック
  3. Unityエディタが開くのを待つ

前回作ったScriptPracticeは練習用のシーンです。 これから作っていくゲームは、専用のシーンに作りましょう。

  1. File → New Scene(または Ctrl + N)
  2. Lit 2D (URP)を選択(前回と同じもの)
  3. 「Create」をクリック
  4. Ctrl + Sで保存し、名前をMainGameにする
    • 保存先はAssets/Scenesフォルダ

これから画像やスクリプトが増えていきます。 先に置き場所を作っておきましょう。

  1. ProjectウィンドウのAssetsフォルダを右クリック
  2. Create → Folder を選択
  3. 名前をSpritesにする(画像を入れる場所)
  4. 同じ手順でScriptsフォルダも作る(スクリプトを入れる場所)
Spritesフォルダの作成
Spritesフォルダの作成

この教科書では、あらかじめ用意された6種類の玉の画像を使います。 番号が大きいほど大きい玉です。

6種類の玉の画像
6種類の玉の画像
ファイル名 大きさ
level1.png いちばん小さい
level2.png オレンジ
level3.png
level4.png
level5.png
level6.png いちばん大きい

6枚まとめてダウンロードできます。

玉の画像6枚(ZIP・85KB)

ダウンロードしたZIPファイルは、右クリック → すべて展開で開いてください。 spritesフォルダの中にlevel1.pnglevel6.pngが入っています。

  1. 展開した画像ファイルをデスクトップなどに置く
  2. UnityのAssets/Spritesフォルダを開く
  3. 画像ファイルをProjectウィンドウにドラッグ&ドロップ
  4. 画像がProjectウィンドウに並ぶ
ドラッグ&ドロップで取り込む
ドラッグ&ドロップで取り込む

取り込んだ画像を1つクリックして、Inspectorを見てください。

設定項目 確認すること
Texture Type Sprite (2D and UI)になっている
Pixels Per Unit 100(初期値のまま)
Texture Typeの確認
Texture Typeの確認
  1. Projectウィンドウでlevel1をクリック
  2. そのままSceneビューにドラッグ&ドロップ
  3. Hierarchyに「level1」が追加される
  4. Sceneビューに赤い玉が表示される
シーンに配置した玉
シーンに配置した玉
  1. Hierarchyで「level1」を選択
  2. F2キーで名前をBallに変更
  3. InspectorのTransformでPosition(0, 3, 0)にする
    (少し上の方に置きます。ここから落とします)

上の再生ボタン(▶)を押してみてください。

……何も起きませんね。玉は空中に浮かんだままです。

Unityは、何も指示していないものは動かしません。 落とすには「これは物理法則にしたがう物体です」と教える必要があります。

  1. HierarchyでBallを選択
  2. Inspectorの一番下のAdd Componentボタンをクリック
  3. 検索欄にrigidbodyと入力
  4. Rigidbody 2Dを選択
Rigidbody 2Dの追加
Rigidbody 2Dの追加

再生ボタン(▶)を押してください。

玉が落ちました! 画面の下に消えていったはずです。

スクリプトを1行も書いていないのに落ちました。 これがUnityの物理エンジンの力です。

Inspectorに表示されている項目のうち、よく使うものだけ紹介します。

項目 意味
Mass 重さ。大きいほど重い(初期値1)
Gravity Scale 重力の強さ。0にすると落ちなくなる(初期値1)
Linear Damping 空気抵抗。大きいほどゆっくり落ちる(初期値0)
Angular Damping 回転のしにくさ

このままでは玉が落ちて消えてしまいます。床を作りましょう。

  1. Hierarchyで右クリック
  2. 2D Object → Sprites → Squareを選択
  3. 名前をFloorに変更(F2キー)
  4. Transformを次のように設定:
    • Position:(0, -4, 0)
    • Scale:(8, 0.5, 1)(横長にする)
  5. Sprite RendererのColorを茶色や灰色にする
床の作成
床の作成

ここで再生しても、玉は床をすり抜けます。 Rigidbody 2Dは「動き」を担当するだけで、 「形」は別に教える必要があるからです。

  1. Ballを選択
  2. Add Component → 検索欄にcircle
  3. Circle Collider 2Dを選択
  1. Floorを選択
  2. Add Component → 検索欄にbox
  3. Box Collider 2Dを選択
Colliderの追加
Colliderの追加

再生ボタン(▶)を押してください。

玉が落ちて、床の上で止まりました!

床に乗った玉
床に乗った玉

これが物理エンジンを使ったゲームの第一歩です。

今日出てきた2つの部品は、役割が分かれています。

部品 役割 付けないとどうなる
Rigidbody 2D 動かす(重力・速度・力) 動かない・落ちない
Collider 2D 形を教える(当たり判定) すり抜ける

玉と床のように、オブジェクトは重なることがあります。 どちらを前に出すか、どれくらい透けさせるかも、Sprite Rendererで決められます。

Sprite RendererにあるOrder in Layerは、数字が大きいほど手前に表示されます。

オブジェクト Order in Layer
背景 -1
床・壁 0
1

玉が床の裏に隠れてしまうときは、ここを見直します。

Order in Layerの設定
Order in Layerの設定

第2週で出てきたRGBAのA(Alpha)を下げると、後ろが透けて見えます。

  1. Sprite RendererのColorをクリック
  2. カラーピッカーのAのスライダーを左に動かす
透明度の調整
透明度の調整

影やガラスのような表現に使えます。第11週のゲームオーバー画面でも使います。

用意された玉の代わりに、自分の画像を使うこともできます。

  1. 画像を用意する(自分で描く、スマホで撮る、など)
  2. Assets/Spritesにドラッグ&ドロップ
  3. Ballを選択し、Sprite RendererのSprite欄に 新しい画像をドラッグ
症状 原因と対処法
玉が落ちない Rigidbody 2Dではなく3D用の Rigidbodyを付けている → 削除して付け直す
玉が床をすり抜ける Colliderを付け忘れている(玉と床の両方に必要)
玉が落ちずに浮いたまま Gravity Scaleが0になっていないか確認
玉が巨大/極小になる 画像のPixels Per Unitを確認(100が目安)
玉が真っ黒で見えない シーンに2Dライトが無い。Lit 2D (URP) テンプレートでシーンを作り直すか、Hierarchyで右クリック → Light → Global Light 2D を追加
玉が真っ白になる Sprite RendererのColorが白になっているか確認
画像をSceneに置けない Texture Typeが Sprite (2D and UI)か確認
玉が床の上で震えている 床のScaleが小さすぎないか確認。Yを0.5以上にする

基礎課題全員必須

玉が落ちて床に乗るところまで作る:

  • level1.pngを取り込んでBallを作る
  • Rigidbody 2DとCircle Collider 2Dを付ける
  • Floorを作ってBox Collider 2Dを付ける
  • 再生して、玉が床で止まることを確認する
  • 最後にCtrl + Sで保存する

標準課題時間があれば

玉を増やして落とし方を変える:

  • 6種類すべての画像を取り込む
  • 大きさの違う玉を3つ以上、高さを変えて置く
  • 再生して、大きい玉と小さい玉の落ち方を比べる
  • MassGravity Scaleを変えて違いを観察する

発展課題チャレンジ

壁を作って囲む:

  • 左右に壁(Square)を作り、Box Collider 2Dを付ける
  • 玉が箱の中から出られないようにする
  • 玉をたくさん置いて、積み上がる様子を確認する
  • ヒント:壁もFloorと同じ作り方です。 Scaleを縦長にしましょう

今日は玉を手で置きましたが、次回はクリックした場所から玉が出てくる ようにします。

そのために「Prefab(プレハブ)」という、 オブジェクトの設計図を作る仕組みを学びます。 これができると、玉を何個でも増やせるようになります。