UnityUnityメモ

Unityでレイキャストを使ってクリックしたオブジェクトを削除する方法!初心者向け解説

Unity

はじめに

こんにちは!今日は、Unityでレイキャストを使って、マウスでクリックされたオブジェクトを検出し、シーンから削除する方法をわかりやすく解説します。これは、ゲーム開発でよく使われるテクニックで、例えば敵キャラをクリックして倒す場合などに役立ちますよ。

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



1. レイキャストとは?

レイキャストは、Unityで使える便利な機能のひとつです。カメラや特定のオブジェクトから見えない光線を飛ばして、他のオブジェクトに当たるかどうかを検出する仕組みです。

例えば、ゲームで次のような場面に使われます:

  • プレイヤーが銃を撃つ際に、弾が敵に当たったかどうか判定する。
  • マウスクリックやタッチ操作で、選択されたオブジェクトを特定する。
  • キャラクターが視線の先にある障害物を検知する。

レイキャストの仕組み

レイキャストは、**Ray(光線)**を飛ばしてオブジェクトに当たった情報を取得します。このとき、当たったオブジェクトの位置や表面情報を取得できるため、多様な操作を実現できます。

ポイント:

  • レイキャストを使うには、オブジェクトにColliderが必要です。
  • マウスやタッチ位置を取得する際には、カメラのスクリーン座標を利用します。

Unityでは以下のコードでレイキャストを使用できます:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;

if (Physics.Raycast(ray, out hit))
{
    Debug.Log("光線が " + hit.collider.gameObject.name + " に当たりました!");
}

このコードでは、マウスの位置から発射された光線が何に当たったかをコンソールに表示します。


簡単に言うと、レイキャストは「見えない光線を使って、どのオブジェクトに当たったかを調べるツール」です!次に、これを活用してクリックしたオブジェクトを削除する方法を見ていきましょう。



2. シーンにオブジェクトを配置しよう

レイキャストの実験には、シーンにいくつかのオブジェクトが必要です。ここでは、**Cube(キューブ)**を5個配置してみましょう。

オブジェクトを配置する手順

  1. Unityエディターを開きます
  2. ヒエラルキーウィンドウを右クリックします。
    • 「3D Object」→「Cube」を選択します。
  3. シーンにキューブが配置されます。
  4. 同じ操作を繰り返して、合計で5個のキューブを作成します。

配置を調整しよう

作成したキューブが重ならないように、それぞれの位置を少しずつずらしましょう。以下の手順で簡単に調整できます:

  1. キューブを選択し、インスペクターウィンドウTransformPositionを変更します。
  2. キーボードの移動ショートカット(Wキー)を使って、シーンビューでドラッグして位置を調整することもできます。

シーンの確認

キューブが5つ配置された状態になりましたね!これで、マウスクリックで削除する対象の準備が整いました。

次に進む準備完了! スクリプトを作成して、これらのキューブを削除できる仕組みを作りましょう。



3. スクリプトを作成してアタッチする

次に、レイキャストを使用してキューブを削除するスクリプトを作成し、シーンに適用します!


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

  1. プロジェクトウィンドウで右クリックします。
    • 「Create」→「C# Script」を選択。
  2. スクリプト名を ObjectRemover に変更します。
  3. 作成したスクリプトをダブルクリックして、エディタで開きます。

スクリプトのコード

以下のコードをスクリプトにコピー&ペーストしてください。

using UnityEngine;

public class ObjectRemover : MonoBehaviour
{
    void Update()
    {
        // マウスのスクリーン位置からレイを飛ばす
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        // 左クリックを検知
        if (Input.GetMouseButtonDown(0))
        {
            // レイがオブジェクトに当たった場合
            if (Physics.Raycast(ray, out hit))
            {
                // 当たったオブジェクトを削除
                Destroy(hit.collider.gameObject);
            }
        }
    }
}

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

  1. ヒエラルキーウィンドウで右クリックして、「Create Empty」を選択。
    • 空のゲームオブジェクトが作成されます。
    • 名前を RaycastManager に変更すると分かりやすいです。
  2. プロジェクトウィンドウから ObjectRemover スクリプトをドラッグして、このゲームオブジェクトにドロップします。
    • これでスクリプトがアタッチされました!

確認するポイント

  • RaycastManager がヒエラルキーにあることを確認。
  • スクリプトが正常にアタッチされている場合、インスペクターウィンドウObjectRemover スクリプトが表示されます。

これでスクリプトが適用され、クリックによるオブジェクト削除の準備が整いました!次は、実行して動作を確認しましょう。



4. 実行して確認する

スクリプトがアタッチできたら、実際にプレイモードで動作を確認してみましょう!


実行する手順

  1. Unityエディターの上部にある 再生ボタン(Playボタン) をクリックして、プレイモードに入ります。
  2. シーン内のキューブにマウスカーソルを合わせ、左クリック してみましょう。
  3. キューブがクリックされた瞬間にシーンから削除されるはずです!

正常に動作しない場合のチェックポイント

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

  1. カメラの配置
    • カメラがシーン内のキューブを正しく映しているか確認してください。
    • 必要に応じてカメラを動かして、キューブが画面内に収まるように調整しましょう。
  2. オブジェクトにColliderが付いているか
    • レイキャストはColliderが付いたオブジェクトに対してしか反応しません。
    • ヒエラルキーでキューブを選択し、インスペクターで「Box Collider」コンポーネントが有効になっているか確認してください。
  3. スクリプトが正しくアタッチされているか
    • ヒエラルキーウィンドウで RaycastManager を選択し、インスペクターで ObjectRemover スクリプトが表示されているか確認してください。

改良アイデア

動作が確認できたら、以下のような追加要素を試してみると楽しいですよ:

  • 削除時のエフェクトを追加
    • オブジェクトを削除する前にパーティクルエフェクトを再生する。
  • 削除時にサウンドを再生
    • オブジェクトが消える際に効果音を再生する。

これで「クリックしたオブジェクトを削除する」仕組みの動作確認が完了しました!



よくある質問(Q&A)

Q
レイキャストが効かないのはなぜ?
A

カメラの設定やオブジェクトのレイヤー設定を確認してください。オブジェクトにColliderが付いていないと反応しません。

Q
他のオブジェクトも同様に削除できますか?
A

もちろんです。Cube以外のオブジェクトにも対応しています。ただし、Colliderが必要です。

Q
削除ではなく、別の動作をさせたい場合は?
A

Destroy(hit.collider.gameObject);の部分を別のコードに置き換えることで、さまざまな動作を実現できます。