ボールプレハブ
ボールがシーンに直接に追加するものではなく、実行中に生成するものであるため、プレハブとして作成しなければならない。とりあえず、現在のシーンを活用し、プレハブができたら、削除すれば良いでしょう。
プレハブ構築
シーンにボールのスクリプトをドラッグドロップで追加し、丸い「CircleCollider2D」を付けてください。ボールも物理的に動かす予定で、リジッドボディも追加してください。
※ボールが見えなければ、「Order In Layer」または Z軸の位置を適切に変えてください
今回も重力を使わないので、「Gravity Scale」をゼロにしてね!
ボールの移動を制御する:BallMove
スクリプトフォルダーに新しい「BallMove」BallMove」スクリプトを作成してください。このスクリプトはボールの動きをコントロールする。このスクリプトはボールの動きをコントロールするスクリプトである。また、Unityでボールの速度を変えられるようにしましょう。
スクリプトの変数
using UnityEngine;
// ボールの移動を管理するスクリプト
public class BallMove : MonoBehaviour
{
// Inspectorで速度を設定する
[SerializeField]
private float speed;
// 移動するためのリジッドボディ
private Rigidbody2D _rigidbody;
}
プレーヤーと同様に、Unityの物理演算を使い、移動するので、Rigidbody2D を使用する。ただし、入力は関係しないので、Inspector で設定するのは、速度だけになる。
初期化 - Start()
とりあえず、ボールが真上に行くようにし、どうなるのか確認しましょう。
private void Start()
{
// コンポーネントの参照を取得
_rigidbody = GetComponent<Rigidbody2D>();
// とりあえず、真上に行くようにしましょう
_rigidbody.linearVelocity = new Vector2(0, 1) * speed;
}
確認
BallMove のスクリプトをボールにアタッチし、ゲームを実行してみてください。

問題発見:ボールが止まってしまう!
Unityでは、デフォルトとして衝突が跳ね返しの「弾み」(bounciness) がほとんどない。そのため、ボールと壁が衝突する場合、速度を吸収され、停止してしまう。
これを解決するには、いずれかのコライダーに「弾み強くしろ!」の設定しなければならない。これは「Physics Material 2D」(Physics: 物理、 Material:素材)のデータで調整できるもの。
スーパーボールのように、ゴムの「素材」を作ろう。この素材の弾みは100%にする(跳ね返す速度は衝突したときと同じ速度にする)まず、プロジェクトのAssetsフォルダーの中に右クリックし、新しい「Create > 2D > Physics Material 2D」を作成し、名前は「Rubber」(ゴム)にする
Rubberを選択し、Inspectorを見ると、物理的な「素材」のパラメータを調整ができる:



