UnityUnityメモ

Unityでクリック操作のボール発射を実装!一定距離で自動消去する方法を解説

Unity

はじめに

こんにちは!
Unityでゲームを作るとき、クリック操作でオブジェクトを発射する仕組みを作るのはとても面白いですよね。たとえば、ボールをクリックで発射してターゲットに当てたり、一定の距離に達したら自動的に消えるように設定することで、シューティングゲームやアクションゲームの基本的な動きを作ることができます。

今回の記事では、クリック操作でボールを発射し、一定の距離で消える仕組みをUnityで簡単に作成する方法を紹介します。初心者でも分かりやすいように、具体的な手順やコードを一つひとつ丁寧に説明していくので、安心してくださいね!

それでは、楽しいUnityの冒険を始めましょう!

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



準備

まずは、クリックで発射するボールとその仕組みを作るための準備を整えましょう。以下の手順に沿って進めれば、スムーズに作業を進められます。


1. ボールのプレハブを作成する

  1. ボールオブジェクトを作成
    ヒエラルキー(Hierarchy)ウィンドウで右クリックして「3D Object」→「Sphere」を選択します。これでシーン上に球体(ボール)が作成されます。
  2. プレハブ化
    作成した球体をプロジェクト(Project)ウィンドウにドラッグ&ドロップして、プレハブ化します。
    • プレハブ化とは、オブジェクトをテンプレートとして登録して使い回せるようにする作業です。
    • プレハブの名前は「Ball」にしておくと分かりやすいです。
  3. ボールをヒエラルキーから削除
    プレハブ化が終わったら、ヒエラルキー上の球体は削除して構いません。

2. Rigidbodyを追加する

  1. プロジェクトウィンドウで作成した「Ball」プレハブをクリックして選択します。
  2. インスペクター(Inspector)ウィンドウで「Add Component」をクリックし、「Rigidbody」を検索して追加します。
    • Rigidbodyを追加することで、ボールが物理演算の影響を受けて動くようになります。

3. 空のゲームオブジェクトを作成する

  1. ヒエラルキーで右クリックして「Create Empty」を選択します。
  2. 名前を「BallShooter」に変更します。このオブジェクトが、ボールを発射する仕組みを制御する役割を持ちます。

4. 必要なフォルダを作成する(任意)

プロジェクトウィンドウで分かりやすく管理するため、以下のようにフォルダを作成することをおすすめします。

  • Prefabs: プレハブを保存するフォルダ
  • Scripts: スクリプトを保存するフォルダ

準備はこれで完了です!次のステップでは、ボールを発射するスクリプトと消去するスクリプトを作成していきます。さっそく進めていきましょう!



スクリプトの作成

準備が整ったら、次はボールを発射するスクリプトと、一定の距離でボールを自動消去するスクリプトを作成していきます。手順を丁寧に説明するので、安心して進めてくださいね!


1. ボールを消去するスクリプト

  1. スクリプトを作成する
    • プロジェクトウィンドウで「Scripts」フォルダ(作成していない場合は作成してください)を右クリックします。
    • 「Create」→「C# Script」を選択して新しいスクリプトを作成します。
    • 名前をDestroyBallにしましょう。
  2. コードを記述する
    作成したDestroyBallスクリプトをダブルクリックして開き、以下のコードを貼り付けます。
using UnityEngine;

public class DestroyBall : MonoBehaviour
{
    void Update()
    {
        // ボールがZ方向に20以上進んだら削除
        if (transform.position.z >= 20.0f)
        {
            Destroy(gameObject);
        }
    }
}
  • このスクリプトは、ボールの位置を毎フレーム確認し、Z座標が20.0以上になったらボールを消去する仕組みです。

2. ボールを発射するスクリプト

  1. スクリプトを作成する
    • 同じ「Scripts」フォルダ内で右クリックし、「Create」→「C# Script」を選択します。
    • 名前をBallShooterにします。
  2. コードを記述する
    作成したBallShooterスクリプトを開き、以下のコードを記述します。
using UnityEngine;

public class BallShooter : MonoBehaviour
{
    public GameObject prefab; // ボールのプレハブ

    void Update()
    {
        // 左クリックでボールを発射
        if (Input.GetMouseButtonDown(0))
        {
            // ボールを生成
            GameObject obj = GameObject.Instantiate(prefab) as GameObject;

            // クリック位置に基づいて方向を計算
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 dir = ray.direction;

            // ボールに力を加える
            obj.GetComponent<Rigidbody>().AddForce(dir * 3000);
        }
    }
}
  1. このスクリプトは、左クリックを検知してプレハブのボールを生成し、クリック位置の方向に向かって力を加えて発射する仕組みです。

これでスクリプトの準備は完了です。次は、これらのスクリプトを正しいオブジェクトにアタッチして設定する方法を説明します。これにより、ボールが発射され、一定距離で消えるようになります!



スクリプトをアタッチする

スクリプトを作成したら、それぞれの役割に応じて適切なオブジェクトにスクリプトをアタッチしましょう。これにより、ボールの発射と消去の仕組みが動作するようになります。


1. DestroyBallスクリプトをアタッチする

  1. プレハブにアタッチ
    • プロジェクトウィンドウで、先ほど作成した「Ball」プレハブをクリックします。
    • 作成したDestroyBallスクリプトをドラッグ&ドロップして、インスペクター(Inspector)ウィンドウに追加します。
  2. 確認
    • インスペクターにDestroyBallスクリプトが追加されていることを確認してください。

2. BallShooterスクリプトをアタッチする

  1. 空のゲームオブジェクトにアタッチ
    • ヒエラルキー(Hierarchy)ウィンドウで作成した「BallShooter」という空のゲームオブジェクトを選択します。
    • 作成したBallShooterスクリプトをドラッグ&ドロップしてインスペクターに追加します。
  2. プレハブを設定
    • BallShooterスクリプトにはPrefabというフィールドがあります。
    • インスペクターウィンドウで、このフィールドに「Ball」プレハブをドラッグ&ドロップして設定します。



実行してみよう

準備とスクリプトの設定が完了したら、いよいよ実際に動作を確認してみましょう!以下の手順でUnityエディター内で実行できます。


1. プレイモードを開始する

  1. Unityエディター上部にある「Play」ボタンをクリックします。
  2. シーンビューまたはゲームビューで確認できる状態にしておきましょう。

2. 動作を確認する

  • マウスの左クリックでボールを発射
    • ゲームビュー内でマウスを左クリックしてみてください。
    • ボールがクリックした位置の方向に向かって勢いよく発射されるはずです。
  • ボールが一定の距離で消える
    • 発射されたボールが画面外に向かって進み、Z座標が20.0を超えたタイミングで自動的に消えることを確認しましょう。

3. うまく動作しない場合

もし期待通りに動作しない場合は、以下をチェックしてみてください。

  1. BallShooterスクリプトのPrefabフィールドが設定されているか
    • ボールのプレハブがPrefabフィールドに正しくドラッグ&ドロップされていることを確認してください。
  2. DestroyBallスクリプトがプレハブにアタッチされているか
    • DestroyBallスクリプトがプレハブ(Ball)に正しくアタッチされているかを確認してください。
  3. Rigidbodyが正しく設定されているか
    • プレハブ(Ball)にRigidbodyが追加され、Is Kinematicが無効になっていることを確認してください。
  4. エラーが出ていないか
    • Unityエディター下部のコンソールウィンドウでエラーが出ていないかをチェックしてください。

次は、この仕組みをさらに発展させて、例えばターゲットを作ったり、スコアシステムを追加するなどのカスタマイズを試してみましょう!楽しんでゲーム開発を続けてくださいね!




よくある質問(Q&A)

Q
ボールが発射されません!
A

ボールのプレハブにRigidbodyが正しく追加されているか確認してください。また、Prefabフィールドにボールが設定されているかもチェックしましょう。

Q
ボールが消えません!
A

DestroyBallスクリプトが正しくアタッチされているか、条件文の距離が適切かを確認してください。

Q
発射方向がおかしいです!
A

カメラの向きとクリック位置が正しく計算されているか、スクリプトのRay部分を見直してください。

おすすめのアセット

Merge Cube Shoot 3Dは、カジュアルゲームのテンプレートパックです。このアセットは、プレイヤーがキューブを合体させてシュートする楽しいゲームを簡単に作れるように設計されています。初心者でもすぐにゲーム開発を始められるよう、シンプルな操作とわかりやすいコードが含まれています。

特徴として、視覚的に魅力的な3Dモデル、アニメーション、サウンドエフェクトが揃っており、ゲームを一層魅力的にします。また、スコアシステムやレベルシステムも搭載しているため、すぐに本格的なゲームが完成します。