UnityUnityメモ

Unity初心者でも簡単!キューブをランダム回転&ボール発射するスクリプト入門

Unity

1. はじめに

こんにちは!この記事では、キューブを1秒おきにランダムな方向に回転させ、その方向にボールを発射する方法をステップバイステップで解説します。Unityでゲームを作る際に、ランダムな動きやオブジェクトの発射はとてもよく使われる要素です。

今回は、Unityの基本操作から始めて、C#スクリプトを使ってこの仕組みを実装していきます。初心者の方でもわかりやすいように、各ステップを丁寧に説明するので安心してください。

それでは、キューブとボールを使った面白い仕組みを一緒に作り上げていきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. キューブとボールを準備しよう

Unityでキューブをランダムに回転させ、ボールを発射する仕組みを作るには、まずキューブとボールをシーンに準備する必要があります。このセクションでは、その具体的な手順を解説します。

1. キューブを配置する

  1. ヒエラルキーウィンドウで右クリックします。
  2. **「3D Object」→「Cube」**を選択します。
  3. シーンにキューブが追加されます。
    • 必要に応じて、Transformの「Position」項目を (0, 0, 0) に設定しておくと、わかりやすい位置に配置されます。

2. ボールを作成する

  1. 再びヒエラルキーウィンドウで右クリックします。
  2. **「3D Object」→「Sphere」**を選択します。
  3. シーンにボールが追加されます。
    • ボールの大きさを調整したい場合は、インスペクターウィンドウの**「Scale」**を変更してください。例えば、 (0.5, 0.5, 0.5) にすると、ボールが小さくなります。

3. Rigidbodyをボールに追加する

ボールが物理的に動くようにするためには、Rigidbodyコンポーネントを追加します。

  1. ヒエラルキーでボールを選択します。
  2. インスペクターウィンドウで**「Add Component」**ボタンをクリックします。
  3. **「Rigidbody」**と検索し、選択して追加します。
    • Rigidbodyを追加すると、重力が自動的に適用され、物理的な挙動が可能になります。

4. ボールをPrefab化する

ボールを複数生成できるように、Prefab(テンプレート)として登録します。

  1. ヒエラルキーウィンドウからボールをドラッグしてプロジェクトウィンドウにドロップします。
  2. ボールがPrefab化され、プロジェクトウィンドウにアイコンが表示されます。

5. キューブの準備

最後に、ランダムな方向にボールを発射できるようにするキューブの準備を行います。

  • キューブの位置やサイズを確認し、動作がわかりやすいように調整します。

これで、キューブとボールの準備が完了しました!次は、スクリプトを使ってランダムな回転とボールの発射を実現していきましょう。



3. キューブのランダム回転&発射スクリプトを作成する

キューブが1秒おきにランダムに回転する仕組みを作るために、C#スクリプト「CubeRotate」を作成します。このスクリプトでは、ランダムな角度でキューブを回転させ、同時にボールを発射する処理を実装します。

CubeRotateスクリプトを作成しよう

まずは、以下の手順で新しいスクリプトを作成します。

  1. プロジェクトウィンドウで右クリック
    • 「Create」→「C# Script」を選択します。
    • スクリプト名を「CubeRotate」と入力してください。
  2. スクリプトをキューブにアタッチ
    • ヒエラルキーウィンドウでキューブを選択します。
    • 作成した「CubeRotate」スクリプトをキューブにドラッグ&ドロップしてアタッチします。

CubeRotateスクリプトのコードを記述しよう

作成したスクリプトをダブルクリックして、以下のコードを入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeRotate : MonoBehaviour
{
    private float angle;  // ランダム回転角度
    private float time;   // 発射のタイミング
    public GameObject ball;  // 発射するボールのPrefab

    void Start()
    {
        time = 1.0f;  // 1秒ごとに処理を行うための時間設定
    }

    void Update()
    {
        // 時間を減らして1秒ごとに発射する
        time -= Time.deltaTime;
        if (time <= 0.0f)
        {
            time = 1.0f;  // タイマーをリセット
            // ランダムな角度でキューブを回転させる
            angle = Random.Range(0, 360); 
            this.transform.Rotate(angle, angle, angle);
            // ボールを生成して発射
            Instantiate(ball, transform.position, transform.rotation);
        }
    }
}

コードのポイントを解説

  • Random.Range(0, 360)
    この関数で0度から360度のランダムな角度を取得しています。
  • this.transform.Rotate(angle, angle, angle)
    現在の回転角度に対してランダムな角度を加えます。
  • Instantiate(ball, transform.position, transform.rotation)
    ボールPrefabを現在の位置と回転に基づいて生成します。

ボールPrefabをスクリプトに割り当てる

  1. ヒエラルキーウィンドウでキューブを選択します。
  2. インスペクターウィンドウの「CubeRotate」スクリプトの「Ball」フィールドに、ボールのPrefabをドラッグ&ドロップします。

これで、キューブが1秒ごとにランダムな方向に回転する仕組みが完成しました!次は、発射されたボールを動かす仕組みを作っていきます。



4. ボールを進ませるスクリプトを作成する

次に、キューブから発射されるボールの動きを制御するスクリプトを作成します。このスクリプトでは、ボールが発射される際に一定の速度で前方に進むように設定します。


スクリプトを作成する手順

  1. 新しいスクリプトを作成 プロジェクトウィンドウを右クリックして、「Create」→「C# Script」を選択します。 スクリプト名は「BallMove」とします。
  2. スクリプトにコードを追加 作成した「BallMove」スクリプトをダブルクリックして開き、以下のコードを入力してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallMove : MonoBehaviour
{
    private Rigidbody rb;  // ボールに物理的な力を与えるためのRigidbody
    private float speed;   // ボールのスピード

    void Start()
    {
        // Rigidbodyコンポーネントを取得
        rb = GetComponent<Rigidbody>();
        // ボールの速度を設定
        speed = 10.0f;
        // ボールを前方に移動させる力を与える
        rb.velocity = transform.forward * speed;
    }
}

コードの説明

  • Rigidbodyの取得
    Startメソッド内で、ボールにアタッチされているRigidbodyコンポーネントを取得します。これにより、ボールに物理的な動きを与えることができます。
  • 速度の設定
    speed変数でボールの移動速度を設定しています。この値を調整することで、発射速度を変更できます。
  • 前方への移動
    transform.forwardを使用して、ボールが自身の前方方向(Z軸方向)に進むように設定しています。この力にspeedを掛けることで、速さを制御します。

ボールPrefabにスクリプトをアタッチする

  1. プロジェクトウィンドウでボールのPrefabを選択します。
  2. 「BallMove」スクリプトをドラッグ&ドロップでボールPrefabにアタッチします。
  3. ボールPrefabを保存して、設定を確定させます。

これで、ボールが発射された後に前方へ進むように動きを設定するスクリプトが完成しました!次のステップでは、全体の動作を確認しましょう。



5. 動作確認

最後に、作成したキューブとボールが正しく動作するかを確認してみましょう。以下の手順で実行してください。


1. シーンを保存する

まず、作成したシーンを保存します。メニューから「File」→「Save As」を選び、プロジェクト内にシーンファイルを保存してください。シーン名は「RandomCubeShooter」など、わかりやすい名前にしましょう。


2. ゲームを再生する

Unityエディター上部の「▶」(再生ボタン)をクリックしてゲームを再生します。


3. 正しい挙動を確認する

再生中に以下の動作が確認できれば成功です:

  1. キューブが1秒ごとにランダムな方向に回転している
    • キューブが常に異なる方向を向いていることを確認してください。
  2. ボールが1秒ごとに発射されている
    • キューブの中心からボールが生成され、回転した方向に向かって飛んでいく様子を観察します。

4. 問題がある場合

もし以下の問題が発生した場合は、該当する解決策を試してください:

  • キューブが回転しない場合
    • キューブに「CubeRotate」スクリプトが正しくアタッチされているか確認してください。
    • インスペクターウィンドウで、「CubeRotate」の「Ball」フィールドにボールPrefabが設定されているか確認してください。
  • ボールが発射されない場合
    • ボールPrefabに「BallMove」スクリプトがアタッチされているか確認してください。
    • ボールPrefabにRigidbodyが正しく追加されているか確認してください。
  • ボールがゆっくり動く、またはまったく動かない場合
    • 「BallMove」スクリプト内の速度設定 (speed) を見直してください。値が適切に設定されているか確認しましょう。

5. シーンを終了する

再生を終了するには、「▶」(再生ボタン)をもう一度クリックしてください。シーンが元の状態に戻ります。


これで動作確認は完了です!Unityでランダムな動きと物理的な挙動を組み合わせたスクリプトが完成しました。今後は、発射するボールの種類を増やしたり、回転のパターンを変えたりして、さらに面白い挙動を追加してみてください。



よくある質問(FAQ)

Q
スクリプトが動かない場合はどうすればいいですか?
A

まず、エラーメッセージを確認しましょう。以下の点も確認してください:

  • スクリプトが正しいオブジェクトにアタッチされているか。
  • CubeRotate スクリプトの「Ball」フィールドに正しいボールPrefabが設定されているか。
  • スクリプト内にスペルミスがないか。

また、コンソールウィンドウに表示されるエラー内容をもとに、修正を試みてください。

Q
ボールが発射されないのはなぜですか?
A

以下の項目を確認してください:

  • ボールPrefabにRigidbodyが正しく追加されているか。
  • BallMove スクリプトがボールPrefabにアタッチされているか。
  • キューブの位置が他のオブジェクトと干渉していないか。

特にRigidbodyがない場合、物理的な動きが発生しないため、発射されていないように見えることがあります。

Q
回転速度や発射速度を変更するにはどうすればいいですか?
A

回転速度を変更する場合は、CubeRotate スクリプトの以下の行を調整します:

angle = Random.Range(0, 360);

Random.Range の範囲を小さくすることで回転の変化を緩やかにできます。

発射速度を変更する場合は、BallMove スクリプトの以下の行を編集します:

speed = 10.0f;

speed の値を増減させることで、ボールの速度を調整できます。

おすすめのアセット

「Swipe Throw Games (PC and Mobile)」は、PCとモバイル両方に対応したスワイプ操作を使ってオブジェクトを投げるゲームテンプレートです。このアセットには、バスケットボールゲームやターゲットに卵や雪玉を投げる「Eggs Game」など、2つのミニゲームが含まれています。各ゲームは簡単にカスタマイズでき、異なる投擲力の調整が可能な画面独立型のシステムを採用しています。