【Unity初心者】ブロック崩し(2) ボールの実装

パソコンの画像 プログラミング

こんにちは ばな坊です

前回のブロック崩しの壁制作に続き、今回はボールの配置と動作の実装をしていきます

壁の製作がまだな方はこちらから

【Unity初心者】ブロック崩し-1 壁の配置

ボールの作成

ボールのゲームオブジェクトを作成します

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特有の物理演算に触れることが出来たと思います

次回はラケットの配置と動作を実装していきます

【Unity初心者】ブロック崩し(3) ラケットの実装

コメント

タイトルとURLをコピーしました