こんにちは ばな坊です
前回のブロック崩しの壁制作に続き、今回はボールの配置と動作の実装をしていきます
壁の製作がまだな方はこちらから
ボールの作成
ボールのゲームオブジェクトを作成します
Hierarchyで右クリック > 3D Object > Sphere
追加したSphereを選択し、Inspectorで名前とTransformを指定します
Rigidbodyの追加・設定
Rigitobodyの追加
Ballを選択 > Inspectorの一番下のAddComponent > 検索欄に「Rigitobody」と入れ選択
Rigitobodyの設定を行います
Rigitobodyの内容を下記のように設定してください
Rigitobodyの主な要素
Mass | オブジェクトの質量 |
Drag | 直線運動の空気抵抗 |
Angular Drag | 回転運動時の空気抵抗 |
Use Gravity | 重力を使うかどうか |
Freeze Postion | チェックを入れた軸での移動の制限 |
Freeze Rotation | チェックを入れた軸での回転の制限 |
上記の設定より今回のボールは以下の物理制御となっている
- 空気抵抗なし
- 回転に関する摩擦なし
- 移動はxz平面
- 回転しない
ボールに初速を加える
ボールの物理制御がおわりました!
次はボールに初速を与えることでボールを動かしてみよう!
Scriptの追加
Ballを選択 > Add Component > New Scriptを選択 > NameにBallと入れる
追加出来たらAssets内に下記のようなスクリプトができると思います
それをダブルクリックしVirtual Studioで開いてください
Scriptの作成
やっと実際にコードを少しだけ書いていきます
まずもとからある関数の説明です
- Start() Update関数が最初に呼び出されるときに1回だけ呼び出される関数で、変数の初期化、ゲームオブジェクトなどの取得に用いられる
- Update() 1フレームに一回呼び出される関数
実際に書いていきます
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
private float speed = 20.0f;
// Start is called before the first frame update
void Start()
{
//初速を与える
this.GetComponent<Rigidbody>()
.AddForce(
(transform.forward + transform.right) * speed, ForceMode.VelocityChange
);
}
// Update is called once per frame
void Update()
{
}
}
コードの解説
private float speed = 20.0f;
ボールに与える初速度を変数で管理しています
//初速を与える
this.GetComponent<Rigidbody>()
.AddForce(
(transform.forward + transform.right) * speed, ForceMode.VelocityChange
);
実際にボールの力を与えています。Start()内に書くことで1回だけ呼び出すので最初に力を与えることができ、初速度を発生させています
this.GetComponent<Rigidbody>()でこのコード自体が割り当てられる先ほど作ったBallオブジェクトを取得しています
そのボールオブジェクトに対してAddForce()で力を加えています
今回、AddForceは
.AddForce(力のベクトル,どのように加えるか) で設定します
ここでtransform.forwardはz軸正の方向、tarnsform.rightはx軸正の方向のため力のベクトルは下記の画像の赤い矢印のようになります
力の加え方は今回はVelocityChange(質量を無視し、瞬時に速度変化を追加する)を選択しています
Physic Materialの追加・設定
最後にボールに物理的な材質の設定(跳ね返りや摩擦など)をしていきます
Physic Materialの追加
Assets内で右クリック > Create > Physic Materialを選択
作成した「New Physic Matrerial」から「Ball Physic Material」に名前を変更し、画像の右の値にっ設定する
Dynamic Friction | 動摩擦 |
Static Friction | 静止摩擦 |
Bounciness | 面の跳ね返り度合い |
Friction Combine | 衝突するオブジェクト間の摩擦の処理について |
Bounce Combine | 衝突するオブジェクト間の跳ね返りの処理について |
Ballを選択してからInspector内のSphere Colliderの画像の部分にドラッグして入れる
ボールの動作の確認
これでボールの設定は完了です
最後に動くかの確認をします
画面上の再生ボタンをクリックし、ゲームを始めてみてください
下のようになっていれば大丈夫だと思います!
もしうまくいかない場合はさかのぼって確認してみてください
ボールが動かない ⇒ Scriptの確認
ボールが反射しない ⇒ Physic Materialの確認
【Unity初心者】ブロック崩し(2) ボールの実装 まとめ
今回はボールの配置と動作の実装を行いました
前回よりは少し難易度が上がったかもしれませんが、Unity特有の物理演算に触れることが出来たと思います
次回はラケットの配置と動作を実装していきます
コメント