ピンボール完成までの「操作概要と操作手順」を書いた記事です。 Unity3Dの基本操作を頭と体で習得できます。 スペースキーで球を発射し、左クリックで左のフリッパー、右クリックで右のフリッパーを動かします。 黄色いターゲットを全て集めるとクリア、画面下に球を落とすとミスとなります。 対象:初心者、Unityに初めて触る方 使用バージョン:Unity 2021.3 時間:2時間
■オブジェクト作成
●オブジェクト作成
▷球作成
銀メタリックの球を作成し、(11.125, 4.5, 0)に配置、スケールを(1, 1, 1)とします。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>スフィア」をクリック
- 「Ball」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- インスペクターの「Transform>位置」を(11.125, 4.5, 0)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matBall」と入力し、ENTERキーを押す
- インスペクターの「メタリック」を「1」に設定
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「C9CACA」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matBall」をヒエラルキーの「Ball」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷打ち出し器作成
ラベンダー色の円柱を作成し、(11.125, 0, 0)に配置、スケールを(1, 4, 1)とします。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>シリンダー」をクリック
- 「Plunger」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(11.125, 0, 0)に設定
- インスペクターの「Transform>スケール」を(1, 4, 1)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matPlunger」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「CAB8D9」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matPlunger」をヒエラルキーの「Plunger」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷フリッパー作成
フリッパーとして空オブジェクトを作成してプレハブ化し、
以下4つのプリミティブを子供として格納します。
緑色の円柱1:位置(0, 0, 0)、回転(90, 0, 0)、スケール(1, 0.5, 1)
緑色の円柱2:位置(3, -0.25, 0)、回転(90, 0, 0)、スケール(0.5, 0.5, 0.5)
緑色の箱1:位置(1.5, -0.25, 0)、回転(0, 0, 0)、スケール(3, 0.5, 1)
緑色の箱2:位置(1.5, 0, 0)、回転(0, 0, -9.4)、スケール(3, 0.5, 1)

以下4つのプリミティブを子供として格納する
緑色の円柱1:位置(0, 0, 0)、回転(90, 0, 0)、スケール(1, 0.5, 1)
緑色の円柱2:位置(3, -0.25, 0)、回転(90, 0, 0)、スケール(0.5, 0.5, 0.5)
緑色の箱1:位置(1.5, -0.25, 0)、回転(0, 0, 0)、スケール(3, 0.5, 1)
緑色の箱2:位置(1.5, 0, 0)、回転(0, 0, -9.4)、スケール(3, 0.5, 1)
- ヒエラルキー左上の「+」をクリックし、「空のオブジェクトを作成」をクリック
- 「Flipper」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- ヒエラルキーの「Flipper」をプロジェクトの「Assets」にドラッグ&ドロップ
- プロジェクトの「Assets>Flipper」をダブルクリック
- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>シリンダー」をクリック
- インスペクターの「Transform>位置」を(0, 0, 0)に設定
- インスペクターの「Transform>回転」を(90, 0, 0)に設定
- インスペクターの「Transform>スケール」を(1, 0.5, 1)に設定
- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>シリンダー」をクリック
- インスペクターの「Transform>位置」を(3, -0.25, 0)に設定
- インスペクターの「Transform>回転」を(90, 0, 0)に設定
- インスペクターの「Transform>スケール」を(0.5, 0.5, 0.5)に設定
- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>キューブ」をクリック
- インスペクターの「Transform>位置」を(1.5, -0.25, 0)に設定
- インスペクターの「Transform>スケール」を(3, 0.5, 1)に設定
- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>キューブ」をクリック
- インスペクターの「Transform>位置」を(1.5, 0, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, -9.4)に設定
- インスペクターの「Transform>スケール」を(3, 0.5, 1)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matFlipper」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「00FF00」に設定
- 色ダイアログの右上にある「×」をクリック
- ヒエラルキーの「Flipper>Cylinder」をクリック
- SHIFTを押したまま、ヒエラルキーの「Flipper>Cute (1)」をクリック
- プロジェクトの「matFlipper」をインスペクターの「コンポーネントに追加」にドラッグ&ドロップ
- ヒエラルキー左上の「<」をクリック
- CTRLキーを押しながらSキーを押す
▷ターゲット作成
黄色の箱を作成し、(0, 35, 0)に配置、回転を(0, 45, 0)、スケールを(1, 1, 1)としてプレハブ化します。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>キューブ」をクリック
- 「Target」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(0, 35, 0)に設定
- インスペクターの「Transform>回転」を(0, 45, 0)に設定
- インスペクターの「Transform>スケール」を(1, 1, 1)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matTarget」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「FFFF00」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matTarget」をヒエラルキーの「Target」にドラッグ&ドロップ
- ヒエラルキーの「Target」をプロジェクトの「Assets」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷バンパー作成
茶色の円柱を作成し、(0, 27, 0)に配置、回転を(90, 0, 0)、スケールを(3, 0.5, 3)としてプレハブ化します。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>シリンダー」をクリック
- 「Bumper」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(0, 27, 0)に設定
- インスペクターの「Transform>回転」を(90, 0, 0)に設定
- インスペクターの「Transform>スケール」を(3, 0.5, 3)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matBumper」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「800000」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matBumper」をヒエラルキーの「Bumper」にドラッグ&ドロップ
- ヒエラルキーの「Bumper」をプロジェクトの「Assets」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷ミスエリア作成
赤色の箱を作成し、(0, -6, 0)に配置、スケールを(20, 1, 1)とします。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>キューブ」をクリック
- 「WallMiss」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(0, -6, 0)に設定
- インスペクターの「Transform>スケール」を(20, 1, 1)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matWallMiss」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「FF0000」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matWallMiss」をヒエラルキーの「WallMiss」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷シーン確認
シーンカメラを動かし、作成したオブジェクトを確認します。

- マウスホイールを手前に回転する
- マウス右ボタンを押したまま、マウスを上下左右に動かす
- マウス中央ボタンを押したまま、マウスを上下左右に動かす
- 上下左右キーを押す
- 以上を繰り返し、シーンに配置したオブジェクトを確認する
●オブジェクト配置
▷カメラ調整
カメラを位置(0, 11, -40)、回転(350, 0, 0)、背景色(202080)とします。

- ヒエラルキーの「Main Camera」をクリック
- インスペクターの「Transform>位置」を(0, 11 -40)に設定
- インスペクターの「Transform>回転」を(350, 0, 0)に設定
- インスペクターの「Camera>クリアフラグ」を「ソリッドカラー」に設定
- インスペクターの「Camera>背景」のカラーバーをクリックし、色ダイアログの16進数を「202080」に設定
- 色ダイアログの右上にある「×」をクリック
- CTRLキーを押しながらSキーを押す
- ゲームビューの「FreeAspect」をクリック
- 「9:16 Aspect」をクリック(無い場合は以下を操作)
- 左下の「+」をクリック
- ドロップダウン「タイプ」をクリックし、「アスペクト比」をクリック
- 幅&高さの「X」に(9)、「Y」に(16)を入力
- 「OK」をクリック
▷左壁作成
緑色の箱を作成し、(-10, 19, 0)に配置、スケールを(1, 43, 1)とします。

- ヒエラルキー左上の「+」をクリックし、「3Dオブジェクト>キューブ」をクリック
- 「WallLeft」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- インスペクターの「Transform>位置」を(-10, 19, 0)に設定
- インスペクターの「Transform>スケール」を(1, 43, 1)に設定
- プロジェクト左上の「+」をクリックし、「マテリアル」をクリック
- 「matWall」と入力し、ENTERキーを押す
- インスペクターの「アルベド>カラーバー」をクリックし、色ダイアログの16進数を「008000」に設定
- 色ダイアログの右上にある「×」をクリック
- プロジェクトの「matWall」をヒエラルキーの「WallLeft」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷右壁作成
緑色の箱を2つ作成し、以下のように配置します。
箱1:位置(10, 17, 0)、スケールを(1, 39, 1)
箱2:位置(12.25, 20, 0)、スケールを(1, 41, 1)

箱1:位置(10, 17, 0)、スケールを(1, 39, 1)
箱2:位置(12.25, 20, 0)、スケールを(1, 41, 1)
- ヒエラルキーの「WallLeft」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallRight1」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(10, 17, 0)に設定
- インスペクターの「Transform>スケール」を(1, 39, 1)に設定
- ヒエラルキーの「WallRight1」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallRight2」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(12.25, 20, 0)に設定
- インスペクターの「Transform>スケール」を(1, 41, 1)に設定
- CTRLキーを押しながらSキーを押す
▷上壁作成
緑色の箱を2つ作成し、以下のように配置します。
箱1:位置(-5, 42, 0)、回転(0, 0, 290)、スケールを(1, 11, 1)
箱2:位置(6, 41.65, 0)、回転(0, 0, 70)、スケールを(1, 13, 1)

箱1:位置(-5, 42, 0)、回転(0, 0, 290)、スケールを(1, 11, 1)
箱2:位置(6, 41.65, 0)、回転(0, 0, 70)、スケールを(1, 13, 1)
- ヒエラルキーの「WallLeft」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallTopL」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(-5, 42, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, 290)に設定
- インスペクターの「Transform>スケール」を(1, 11, 1)に設定
- ヒエラルキーの「WallTopL」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallTopR」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(6, 41.65, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, 70)に設定
- インスペクターの「Transform>スケール」を(1, 13, 1)に設定
- CTRLキーを押しながらSキーを押す
▷フリッパー左側の壁作成
緑色の箱を2つ作成し、以下のように配置します。
箱1:位置(-7.75, 3.5, 0)、回転(0, 0, 0)、スケールを(1, 5, 1)
箱2:位置(-6, 0.7, 0)、回転(0, 0, 250)、スケールを(1, 4, 1)

箱1:位置(-7.75, 3.5, 0)、回転(0, 0, 0)、スケールを(1, 5, 1)
箱2:位置(-6, 0.7, 0)、回転(0, 0, 250)、スケールを(1, 4, 1)
- ヒエラルキーの「WallLeft」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallFlipL1」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(-7.75, 3.5, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, 0)に設定
- インスペクターの「Transform>スケール」を(1, 5, 1)に設定
- ヒエラルキーの「WallFlipL1」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallFlipL2」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(-6, 0.7, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, 250)に設定
- インスペクターの「Transform>スケール」を(1, 4, 1)に設定
- CTRLキーを押しながらSキーを押す
▷フリッパー右側の壁作成
緑色の箱を2つ作成し、以下のように配置します。
箱1:位置(-7.75, 3.5, 0)、回転(0, 0, 0)、スケールを(1, 5, 1)
箱2:位置(-6, 0.7, 0)、回転(0, 0, 290)、スケールを(1, 4, 1)

箱1:位置(-7.75, 3.5, 0)、回転(0, 0, 0)、スケールを(1, 5, 1)
箱2:位置(-6, 0.7, 0)、回転(0, 0, 290)、スケールを(1, 4, 1)
- ヒエラルキーの「WallFlipL1」をクリック
- CTRLを押しながらヒエラルキーの「WallFlipL2」をクリック
- CTRLを押しながらDキーを押す
- ヒエラルキーの「WallFlipL1 (1)」をクリック
- F2キーを押して「WallFlipR1」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置>X」を(7.75)に設定
- ヒエラルキーの「WallFlipL2 (1)」をクリック
- F2キーを押して「WallFlipR2」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置>X」を(6)に設定
- インスペクターの「Transform>回転>Z」を(290)に設定
- CTRLキーを押しながらSキーを押す
▷下壁作成
緑色の箱を2つ作成し、以下のように配置します。
箱1:位置(-5.5, -2, 0)、回転(0, 0, 70)、スケールを(1, 10, 1)
箱2:位置(5.5, -2, 0)、回転(0, 0, 290)、スケールを(1, 10, 1)

箱1:位置(-5.5, -2, 0)、回転(0, 0, 70)、スケールを(1, 10, 1)
箱2:位置(5.5, -2, 0)、回転(0, 0, 290)、スケールを(1, 10, 1)
- ヒエラルキーの「WallLeft」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallBottomL」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(-5.5, -2, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, 70)に設定
- インスペクターの「Transform>スケール」を(1, 10, 1)に設定
- ヒエラルキーの「WallBottomL」をクリックし、CTRLを押しながらDキーを押す
- F2キーを押して「WallBottomR」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置>X」を(5.5)に設定
- インスペクターの「Transform>回転>Z」を(290)に設定
- CTRLキーを押しながらSキーを押す
▷フリッパー配置
フリッパーを複製し、以下のように配置します。
フリッパー1:位置(-3.7, 0, 0)、回転(0, 0, -18)
フリッパー2:位置(3.7, 0, 0)、回転(0, 180, -18)

フリッパー1:位置(-3.7, 0, 0)、回転(0, 0, -18)
フリッパー2:位置(3.7, 0, 0)、回転(0, 180, -18)
- ヒエラルキーの「Flipper」をクリック
- F2キーを押して「FlipperL」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置」を(-3.7, 0, 0)に設定
- インスペクターの「Transform>回転」を(0, 0, -18)に設定
- ヒエラルキーの「FlipperL」をクリック
- CTRLを押しながらDキーを押す
- F2キーを押して「FlipperR」と入力し、ENTERキーを押す
- インスペクターの「Transform>位置>X」を(3.7)に設定
- インスペクターの「Transform>回転>Y」を(180)に設定
- CTRLキーを押しながらSキーを押す
▷ターゲット配置
ターゲットを複製し、以下のように配置します。
ターゲット1:位置(0, 35, 0)
ターゲット2:位置(-6, 30, 0)
ターゲット3:位置(6, 30, 0)
ターゲット4:位置(-4, 20, 0)
ターゲット5:位置(4, 20, 0)

ターゲット1:位置(0, 35, 0)
ターゲット2:位置(-6, 30, 0)
ターゲット3:位置(6, 30, 0)
ターゲット4:位置(-4, 20, 0)
ターゲット5:位置(4, 20, 0)
- ヒエラルキーの「Target」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置」を(-6, 30, 0)に設定
- ヒエラルキーの「Target (1)」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置>X」を(6)に設定
- ヒエラルキーの「Target (2)」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置」を(-4, 20, 0)に設定
- ヒエラルキーの「Target (3)」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置>X」を(4)に設定
- CTRLキーを押しながらSキーを押す
▷バンパー配置
フリッパーを複製し、以下のように配置します。
バンパー1:位置(0, 27, 0)
バンパー2:位置(-5, 10, 0)
バンパー3:位置(5, 10, 0)

バンパー1:位置(0, 27, 0)
バンパー2:位置(-5, 10, 0)
バンパー3:位置(5, 10, 0)
- ヒエラルキーの「Bumper」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置」を(-5, 10, 0)に設定
- ヒエラルキーの「Bumper (1)」をクリック
- CTRLを押しながらDキーを押す
- インスペクターの「Transform>位置>X」を(5)に設定
- CTRLキーを押しながらSキーを押す
●オブジェクト整理
▷壁整理
空オブジェクトを作成し、「全ての壁」を格納します。

- ヒエラルキー左上「+」をクリックし、「空のオブジェクトを作成」をクリック
- 「Walls」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- ヒエラルキーの「WallLeft」をクリック
- CTRLを押したまま、ヒエラルキーの「WallRight1」をクリック
- CTRLを押したまま、ヒエラルキーの「WallRight2」をクリック
- CTRLを押したまま、ヒエラルキーの「WallTopL」をクリック
- CTRLを押したまま、ヒエラルキーの「WallTopR」をクリック
- CTRLを押したまま、ヒエラルキーの「WallFlipL1」をクリック
- CTRLを押したまま、ヒエラルキーの「WallFlipL2」をクリック
- CTRLを押したまま、ヒエラルキーの「WallFlipR1」をクリック
- CTRLを押したまま、ヒエラルキーの「WallFlipR2」をクリック
- CTRLを押したまま、ヒエラルキーの「WallBottomL」をクリック
- CTRLを押したまま、ヒエラルキーの「WallBottomR」をクリック
- ヒエラルキーの選択ゲームオブジェクトを「Walls」にドラッグ&ドロップ
- ヒエラルキーの「Walls」左にある三角形をクリック
- CTRLキーを押しながらSキーを押す
▷ターゲット整理
空オブジェクトを作成し、「全ターゲット」を格納します。

- ヒエラルキー左上「+」をクリックし、「空のオブジェクトを作成」をクリック
- 「Targets」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- ヒエラルキーの「Target」をクリック
- CTRLを押したまま、ヒエラルキーの「Target (1)」をクリック
- CTRLを押したまま、ヒエラルキーの「Target (2)」をクリック
- CTRLを押したまま、ヒエラルキーの「Target (3)」をクリック
- CTRLを押したまま、ヒエラルキーの「Target (4)」をクリック
- ヒエラルキーの選択ゲームオブジェクトを「Targets」にドラッグ&ドロップ
- ヒエラルキーの「Targets」左にある三角形をクリック
- CTRLキーを押しながらSキーを押す
▷バンパー整理
空オブジェクトを作成し、「全バンパー」を格納します。

- ヒエラルキー左上「+」をクリックし、「空のオブジェクトを作成」をクリック
- 「Bumpers」と入力し、ENTERキーを押す
- インスペクターの「Transform>縦の三点リーダー」をクリックし、リセットをクリック
- ヒエラルキーの「Bumper」をクリック
- CTRLを押したまま、ヒエラルキーの「Bumper(1)」をクリック
- CTRLを押したまま、ヒエラルキーの「Bumper(2)」をクリック
- ヒエラルキーの選択ゲームオブジェクトを「Bumpers」にドラッグ&ドロップ
- ヒエラルキーの「Bumpers」左にある三角形をクリック
- CTRLキーを押しながらSキーを押す
▷プロジェクト整理
マテリアル用、プレハブ用の格納フォルダを作成して移動します。

- プロジェクト左上の「+」をクリックし、「フォルダー」をクリック
- 「Materials」と入力し、ENTERキーを押す
- プロジェクトの「matBall」をクリック
- CTRLを押したまま「matBumper」をクリック
- CTRLを押したまま「matFlipper」をクリック
- CTRLを押したまま「matPlunger」をクリック
- CTRLを押したまま「matTarget」をクリック
- CTRLを押したまま「matWall」をクリック
- CTRLを押したまま「matWallMiss」をクリック
- プロジェクトで選択中のアセットを「Assets>Materials」にドラッグ&ドロップ
- プロジェクトの「Assets」をクリック
- プロジェクト左上の「+」をクリックし、「フォルダー」をクリック
- 「Prefabs」と入力し、ENTERキーを押す
- プロジェクトの「Bumperr」を「Assets>Prefabs」にドラッグ&ドロップ
- プロジェクトの「Flipper」を「Assets>Prefabs」にドラッグ&ドロップ
- プロジェクトの「Target」を「Assets>Prefabs」にドラッグ&ドロップ
■オブジェクト機能
●プレイヤー制御
▷スクリプト整理
スクリプト格納用のフォルダを作成します。

- プロジェクト左上の「+」をクリックし、「フォルダー」をクリック
- 「Scripts」と入力し、ENTERキーを押す
▷玉物理設定
玉にRigidbody「質量(0.7)、衝突判定(連続的かつ動的)、Z位置固定」として割り当て、物理マテリアルを弾性力(0.3)として割り当てます。

- ヒエラルキーの「Ball」をクリック
- インスペクターの「コンポーネントを追加」をクリックし、Physics>Rigidbodyをクリック
- インスペクターの「Rigidbody>質量」を(0.7)に設定
- インスペクターの「Rigidbody>衝突判定」を(連続的かつ動的)に設定
- インスペクターの「Rigidbody>Constraints>位置を固定>Z」をチェック
- プロジェクトの「Assets」を右クリックし、「作成>物理マテリアル」をクリック
- 「Friction」と入力し、ENTERキーを押す
- インスペクターの弾性力を(0.3)に設定
- プロジェクトの「Friction」をヒエラルキーの「Ball」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷打ち出し器物理設定
打ち出し器にRigidbodyを割り当て、Is Kinematic(あり)、衝突判定(連続的かつ動的)とします。

- ヒエラルキーの「Plunger」をクリック
- インスペクターの「コンポーネントを追加」をクリックし、Physics>Rigidbodyをクリック
- インスペクターの「Rigidbody>Is Kinematic」をチェック
- インスペクターの「Rigidbody>衝突判定」を(連続的かつ動的)に設定
- CTRLキーを押しながらSキーを押す
▷制御スクリプト作成
スクリプト「GameManager」を作成し、玉に割り当てます。

- プロジェクトの「Assets>Scripts」を右クリックし、「作成>C# スクリプト」をクリック
- 「GameManager」と入力し、ENTERキーを押す
- プロジェクトの「GameManager」をヒエラルキーの「Ball」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷打ち出し器制御
スペースを押している間は1フレームに0.5の速度で最大0まで上昇、離している間は1フレームに1の速度で最小-3.5まで下降させます。
- プロジェクトの「Assets>Scripts>GameManager」をダブルクリック
- スクリプトを以下のように記述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
float plungerY = 3.5f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
}
}
▷打ち出し器割り当て
GameManagerの参照に打ち出し器を割り当てます。

- ヒエラルキーの「Ball」をクリック
- ヒエラルキーの「Plumger」をインスペクターの「GameManager>Plunger」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷打ち出し器制御確認
スペースキーで打ち出し器を操作できることを確認します。

- エディタ上中央の「▶」をクリック
- スペースキーを押す
- 打ち出し器が手前に移動することを確認
- スペースキーを離す
- 打ち出し器が元の場所に戻り、球が打ち出される事を確認
- エディタ上中央の「▶」をクリック
▷フリッパー物理設定
フリッパーにRigidbodyを割り当て、Is Kinematic(あり)、衝突判定(連続的かつ動的)とします。

- プロジェクトの「Assets>Prefabs>Flipper」をダブルクリック
- インスペクターの「コンポーネントを追加」をクリックし、Physics>Rigidbodyをクリック
- インスペクターの「Rigidbody>Is Kinematic」をチェック
- インスペクターの「Rigidbody>衝突判定」を(連続的かつ動的)に設定
- ヒエラルキーの左上にある「<」をクリック
- プロジェクトの「Assets>Scripts>GameManager」をダブルクリック
- スクリプトを以下のように記述
▷フリッパー制御
以下の仕様でスクリプトを記述します。
- 左クリックで左フリッパー、右クリックで右フリッパーをZ軸を1フレーム16度の速度で30度まで動かす
- 押されていない時はZ軸を1フレーム16度の速度で-18度まで動かす
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
public GameObject flipperL;
public GameObject flipperR;
float plungerY = 3.5f;
float[] angle = {0, 0};
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
FlipAction(0);
FlipAction(1);
}
void FlipAction(int button)
{
if (Input.GetMouseButton(button) == true)
{
angle[button] += 16;
}
else
{
angle[button] -= 16;
}
angle[button] = Mathf.Clamp(angle[button], -18, 30);
GameObject flipper;
if (button == 0)
{
flipper = flipperL;
}
else
{
flipper = flipperR;
}
Rigidbody rb = flipper.GetComponent<Rigidbody>();
Vector3 rot = flipper.transform.rotation.eulerAngles;
rot.z = angle[button];
rb.MoveRotation(Quaternion.Euler(rot));
}
}
▷フリッパー割り当て
GameManagerの参照にフリッパーを割り当てます。

- ヒエラルキーの「Ball」をクリック
- ヒエラルキーの「FlipperL」をインスペクターの「GameManager>FlipperL」にドラッグ&ドロップ
- ヒエラルキーの「FlipperR」をインスペクターの「GameManager>FlipperR」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷フリッパー制御確認
マウスクリックでフリッパーを操作できることを確認します。

- エディタ上中央の「▶」をクリック
- ゲームビュー上でマウス左ボタンをクリック
- 左のフリッパーが動く事を確認
- ゲームビュー上でマウス右ボタンをクリック
- 右のフリッパーが動く事を確認
- エディタ上中央の「▶」をクリック
●オブジェクト制御
▷ターゲット設定
ターゲットをトリガーにし、タグ「Target」を作成して割り当てます。

- プロジェクトの「Assets>Prefabs>Target」をダブルクリック
- インスペクターの「Box Collider>トリガーにする」をチェック
- ヒエラルキーの「Target」をクリック
- インスペクターのドロップダウン「タグ」をクリックし、「タグを追加…」をクリック
- インスペクターのタグ右下の「+」をクリック
- 「Target」と入力し、ENTERキーを押す
- ヒエラルキーの「Target」をクリック
- インスペクターのドロップダウン「タグ」をクリックし、「Target」をクリック
- ヒエラルキー左上の「<」をクリック
▷ターゲット制御
プロジェクトの「Scripts>GameManager」をダブルクリックし、玉がターゲットに衝突したらターゲットが消えるようにスクリプトを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
public GameObject flipperL;
public GameObject flipperR;
float plungerY = 3.5f;
float[] angle = {0, 0};
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
FlipAction(0);
FlipAction(1);
}
void FlipAction(int button)
{
if (Input.GetMouseButton(button) == true)
{
angle[button] += 16;
}
else
{
angle[button] -= 16;
}
angle[button] = Mathf.Clamp(angle[button], -18, 30);
GameObject flipper;
if (button == 0)
{
flipper = flipperL;
}
else
{
flipper = flipperR;
}
Rigidbody rb = flipper.GetComponent<Rigidbody>();
Vector3 rot = flipper.transform.rotation.eulerAngles;
rot.z = angle[button];
rb.MoveRotation(Quaternion.Euler(rot));
}
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.CompareTag("Target"))
{
Destroy(collider.gameObject);
}
}
}
▷ターゲット制御確認
玉がターゲットに衝突したらターゲットが消えることを確認します。

- エディタ上中央の「▶」をクリック
- 玉をターゲットに衝突させる
- ターゲットが消滅する事を確認
- エディタ上中央の「▶」をクリック
▷バンパー物理設定
バンパーにRigidbodyを割り当て、Is Kinematic(あり)、衝突判定(連続的かつ動的)とします。

- プロジェクトの「Assets>Prefabs>Bumper」をダブルクリック
- インスペクターの「コンポーネントを追加」をクリックし、Physics>Rigidbodyをクリック
- インスペクターの「Rigidbody>Is Kinematic」をチェック
- インスペクターの「Rigidbody>衝突判定」を(連続的かつ動的)に設定
- ヒエラルキーの左上にある「<」をクリック
▷バンパー認識
タグ「Bumper」を作成し、バンパーに割り当てます。

- プロジェクトの「Assets>Prefabs>Bumper」をダブルクリック
- ヒエラルキーの「Bumper」をクリック
- インスペクターのドロップダウン「タグ」をクリックし、「タグを追加…」をクリック
- インスペクターのタグ右下の「+」をクリック
- 「Bumper」と入力し、ENTERキーを押す
- ヒエラルキーの「Bumper」をクリック
- インスペクターのドロップダウン「タグ」をクリックし、「Bumper」をクリック
- ヒエラルキー左上の「<」をクリック
▷バンパー制御
プロジェクトの「Assets>Scripts>GameManager」をダブルクリックし、玉がバンパーに衝突したら弾かれるようにスクリプトを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
public GameObject flipperL;
public GameObject flipperR;
float plungerY = 3.5f;
float[] angle = {0, 0};
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
FlipAction(0);
FlipAction(1);
}
void FlipAction(int button)
{
if (Input.GetMouseButton(button) == true)
{
angle[button] += 16;
}
else
{
angle[button] -= 16;
}
angle[button] = Mathf.Clamp(angle[button], -18, 30);
GameObject flipper;
if (button == 0)
{
flipper = flipperL;
}
else
{
flipper = flipperR;
}
Rigidbody rb = flipper.GetComponent<Rigidbody>();
Vector3 rot = flipper.transform.rotation.eulerAngles;
rot.z = angle[button];
rb.MoveRotation(Quaternion.Euler(rot));
}
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.CompareTag("Target"))
{
Destroy(collider.gameObject);
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Bumper"))
{
Vector3 dir = transform.position - collision.transform.position;
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(dir * 30, ForceMode.Impulse);
}
}
}
▷バンパー制御確認
玉がバンパーに衝突したら弾かれる事を確認します。

- エディタ上中央の「▶」をクリック
- バンパーに玉を衝突させる
- 玉が弾かれる事を確認
- エディタ上中央の「▶」をクリック
●ゲーム制御
▷ミスエリア認識
ミスエリアにタグ「Finish」を割り当てます。

- ヒエラルキーの「WallMiss」をクリック
- インスペクターのドロップダウン「タグ」をクリックし、「Finish」をクリック
- CTRLキーを押しながらSキーを押す
▷リスタート制御
プロジェクトの「Assets>Scripts>GameManager」をダブルクリックし、玉がミスエリアに衝突したらリスタートするスクリプトを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
public GameObject flipperL;
public GameObject flipperR;
float plungerY = 3.5f;
float[] angle = {0, 0};
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
FlipAction(0);
FlipAction(1);
}
void FlipAction(int button)
{
if (Input.GetMouseButton(button) == true)
{
angle[button] += 16;
}
else
{
angle[button] -= 16;
}
angle[button] = Mathf.Clamp(angle[button], -18, 30);
GameObject flipper;
if (button == 0)
{
flipper = flipperL;
}
else
{
flipper = flipperR;
}
Rigidbody rb = flipper.GetComponent<Rigidbody>();
Vector3 rot = flipper.transform.rotation.eulerAngles;
rot.z = angle[button];
rb.MoveRotation(Quaternion.Euler(rot));
}
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.CompareTag("Target"))
{
Destroy(collider.gameObject);
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Bumper"))
{
Vector3 dir = transform.position - collision.transform.position;
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(dir * 30, ForceMode.Impulse);
}
if (collision.gameObject.CompareTag("Finish"))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}
▷リスタート確認
玉がミスエリアに衝突したらゲームがやり直しになる事を確認します。

- エディタ上中央の「▶」をクリック
- ミスエリアに玉を衝突させる
- ゲームがやり直しになる事を確認
- エディタ上中央の「▶」をクリック
▷クリアUI作成
クリア用のUIテキストを非アクティブで配置します。

- ヒエラルキー左上の「+」をクリックし、「UI>テキスト – TextMeshPro」をクリック
- TMP Importerの「Import TMP Essentials」をクリック
- TMP Importerを閉じる
- ヒエラルキーの「Text (TMP)」をクリック
- F2キーを押して「TextClear」と入力し、ENTERキーを押す
- インスペクターを以下のように設定
- ・RectTransform左上のアイコン「アンカープリセット」をクリックし、右下の「stretch – stretch」をダブルクリック
- ・RectTransformの「上下左右」を(0, 0, 0, 0)に設定
- ・TextMeshProの「Text Input」にあるテキスト入力を「Clear!」に設定
- ・TextMeshProの「Main Settings>Font Style」にある「B」をオンにする
- ・TextMeshProの「Main Settings>Auto Size」にチェックを入れる
- ・TextMeshProの「Main Settings>Vertex Color」右にあるカラーバーをクリックし、色ダイアログの16進数を「FFFF00」に設定
- ・色ダイアログの右上にある「×」をクリック
- ・TextMeshProの「Main Settings>Alignment」にある「Center、Middle」をオンにする
- ・マテリアル設定にある「Outline」にチェックを入れる
- ・マテリアル設定にある「Outline>Thickness」を(0.2)に設定
- ・マテリアル設定にある「Outline>Color」にあるカラーバーをクリックし、HDRカラーのRを「255」に設定
- ・HDRカラーの右上にある「×」をクリック
- インスペクター左上のチェックを外す
- CTRLキーを押しながらSキーを押す
▷クリア制御
プロジェクトの「Assets>Scripts>GameManager」をダブルクリックし、ターゲットを全て取得したらクリアUIを表示するスクリプトを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public GameObject plunger;
public GameObject flipperL;
public GameObject flipperR;
public GameObject uiClear;
float plungerY = 3.5f;
float[] angle = {0, 0};
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
GameObject[] targets = GameObject.FindGameObjectsWithTag("Target");
if (targets.Length == 0)
{
uiClear.SetActive(true);
Destroy(gameObject);
return;
}
Vector3 pos = plunger.transform.position;
if (Input.GetAxis("Jump") <= 0)
{
plungerY = Mathf.Clamp(plungerY + 0.5f, -3.5f, 0);
pos.y = plungerY;
}
if (Input.GetAxis("Jump") > 0)
{
plungerY = Mathf.Clamp(plungerY - 1, -3.5f, 0);
pos.y = plungerY;
}
Rigidbody rb = plunger.GetComponent<Rigidbody>();
rb.MovePosition(pos);
FlipAction(0);
FlipAction(1);
}
void FlipAction(int button)
{
if (Input.GetMouseButton(button) == true)
{
angle[button] += 16;
}
else
{
angle[button] -= 16;
}
angle[button] = Mathf.Clamp(angle[button], -18, 30);
GameObject flipper;
if (button == 0)
{
flipper = flipperL;
}
else
{
flipper = flipperR;
}
Rigidbody rb = flipper.GetComponent<Rigidbody>();
Vector3 rot = flipper.transform.rotation.eulerAngles;
rot.z = angle[button];
rb.MoveRotation(Quaternion.Euler(rot));
}
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.CompareTag("Target"))
{
Destroy(collider.gameObject);
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Bumper"))
{
Vector3 dir = transform.position - collision.transform.position;
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(dir * 30, ForceMode.Impulse);
}
if (collision.gameObject.CompareTag("Finish"))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}
▷クリアUI割り当て
クリア用UIテキストをGameManagerの参照に割り当てます。

- ヒエラルキーの「Ball」をクリック
- ヒエラルキーの「Canvas>TextClear」をインスペクターの「Ui Clear」にドラッグ&ドロップ
- CTRLキーを押しながらSキーを押す
▷クリア確認
全てのターゲットを取得したら玉が消えてクリアが表示される事を確認します。

- エディタ上中央の「▶」をクリック
- 全てのターゲットを取得する
- 玉が消え、クリアが表示される事を確認
- エディタ上中央の「▶」をクリック
完成!
コメント