UnityUnityメモ

Unityでクリックしたオブジェクトを破壊して名前を表示する方法【初心者向け解説】

Unity

はじめに

こんにちは!Unityでゲームを作り始めたばかりの方や、もっとインタラクティブな機能を追加したいと思っている方にぴったりの内容です。今回は、マウスでクリックしたオブジェクトを破壊して、そのオブジェクトの名前を画面に表示する方法を解説します。

この機能を実装すると、例えばアイテムを壊してスコアに反映させたり、敵キャラクターをクリックして倒す仕組みを作ることができます。初心者向けに手順を丁寧に説明しますので、Unity初心者でも安心して進められます!

それでは、Unityのプロジェクトを開いて、さっそく始めましょう!

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



手順1: 必要なオブジェクトを配置しよう

まずは、クリックして破壊する対象となるオブジェクトと、名前を表示するためのテキストをシーンに配置していきます。


1. 3Dオブジェクトを配置する

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
    メニューが表示されたら「3D Object」→「Cube」を選びます。
  2. シーンビューにCubeが追加されます。同じ手順でいくつかCubeを追加してみましょう。
    • それぞれのCubeの位置を少しずつずらして配置すると見やすくなります。
    • ヒエラルキー内でCubeを選択し、「名前を変更する」ことで、わかりやすい名前(例: Cube1、Cube2など)を付けておくと便利です。

2. UIテキストを追加する

次に、クリックしたオブジェクトの名前を表示するためのテキストを追加します。

  1. ヒエラルキーウィンドウで右クリックし、「UI」→「Text – Legacy」を選びます。
  2. シーンビューにテキストが表示されるので、テキストの内容を仮に「ここに名前が表示されます」に変更しておきましょう。
    • **インスペクター(Inspector)**でテキストの設定を変更できます。
      • Font Size(フォントサイズ): 24など読みやすい大きさに設定。
      • Alignment(配置): 中央揃え(Center)にすると見栄えが良くなります。

3. 配置の確認

  • シーンビューを確認して、3Dオブジェクト(Cube)が複数配置されていること、UIテキストが見やすい場所に配置されていることを確認します。
  • これで、必要なオブジェクトの準備が完了です!

次はスクリプトを作成して、このオブジェクトにクリックで破壊の機能を追加していきましょう!



手順2: スクリプトを作成しよう

次に、クリックでオブジェクトを破壊し、その名前をUIに表示するスクリプトを作成します。スクリプトはUnityの機能を引き出すために欠かせない重要な部分です。初心者でもわかりやすく解説するので安心してください!


1. スクリプトファイルを作成する

  1. プロジェクトウィンドウで適当なフォルダ(例: Scripts)を右クリックします。
  2. Create」→「C# Script」を選択します。
  3. スクリプト名を「DestroyOnClick」と入力します。

2. スクリプトにコードを記述する

作成したスクリプトをダブルクリックして開きます。Unityのコードエディタ(通常はVisual Studio)が起動するので、以下のコードを貼り付けてください。

using UnityEngine;
using UnityEngine.UI;

public class DestroyOnClick : MonoBehaviour
{
    // UIのTextを保持する変数
    public Text clearText;

    void Update()
    {
        // マウス位置からレイを飛ばす
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        // マウスの左クリックを検知
        if (Input.GetMouseButtonDown(0))
        {
            // レイがオブジェクトにヒットしたかを確認
            if (Physics.Raycast(ray, out hit))
            {
                // ヒットしたオブジェクトの名前を取得
                string objectName = hit.collider.gameObject.name;

                // オブジェクトを破壊
                Destroy(hit.collider.gameObject);

                // UIテキストに名前を表示
                clearText.text = objectName;
            }
        }
    }
}

3. コードの解説

  • Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    マウス位置からレイ(光線)を発射して、何かに当たるか確認します。
  • Physics.Raycast(ray, out hit)
    レイがオブジェクトに当たった場合に、その情報をhitに保存します。
  • Destroy(hit.collider.gameObject);
    ヒットしたオブジェクト(クリックされたオブジェクト)を破壊します。
  • clearText.text = objectName;
    ヒットしたオブジェクトの名前をUIのテキストに表示します。

4. エラーを避けるための注意点

  • スクリプトを保存(Ctrl+S)するのを忘れないようにしましょう。
  • Text型のUI要素を使用するために、using UnityEngine.UI; を必ずコードの冒頭に書いてください。

これでスクリプトの準備が整いました!次は、このスクリプトをシーンに適用する手順を解説します。



手順3: スクリプトをアタッチしよう

スクリプトを作成したら、シーン内のオブジェクトに適用(アタッチ)して機能させる準備をしましょう。このステップでは、スクリプトを設定する方法とUIテキストのリンク手順を説明します。


1. スクリプトをゲームオブジェクトにアタッチする

  1. ヒエラルキー(Hierarchy)で右クリックし、「Create Empty」を選んで空のゲームオブジェクトを作成します。名前は「DestroyManager」に変更すると分かりやすいです。
  2. プロジェクトウィンドウから、先ほど作成したスクリプト(DestroyOnClick.cs)を、この空のゲームオブジェクトにドラッグ&ドロップします。
    • これでスクリプトがDestroyManagerにアタッチされました。

2. UIテキストをスクリプトにリンクする

  1. DestroyManagerをクリックして、インスペクター(Inspector)ウィンドウを表示します。
  2. Clear Text というフィールドが表示されているのを確認します。
  3. ヒエラルキーからUIテキスト(Text )を選択し、インスペクター内の Clear Text フィールドにドラッグ&ドロップしてリンクします。



手順4: 実行してみよう

さあ、これまで準備したスクリプトやオブジェクトが正しく動作するか確認してみましょう!以下の手順で実行方法と確認ポイントを解説します。


1. プレイモードを開始

  1. Unityエディタ上部の「再生ボタン(▶)」をクリックして、プレイモードにします。
  2. ゲームビューがアクティブになり、シーン内のオブジェクトを操作できるようになります。

2. 動作を確認

  1. ゲームビュー内で、マウスカーソルを任意の3Dオブジェクト(例: Cube)に合わせます。
  2. 左クリックすると、次の動作が起こるはずです:
    • クリックしたオブジェクトが破壊される(シーンから消える)。
    • 破壊されたオブジェクトの名前が画面上のUIテキストに表示される。

3. エラーが発生した場合のチェックポイント

もし期待した動作が行われない場合、以下を確認してください。

  1. UIテキストがリンクされているか
    • DestroyManagerのインスペクターで、Clear Text フィールドにUIテキストが設定されているか確認します。
  2. オブジェクトにColliderがあるか
    • クリックするオブジェクト(Cubeなど)にColliderコンポーネントがアタッチされているか確認します。ない場合は、インスペクターで「Add Component」をクリックし、Colliderを追加してください。
  3. スクリプトのエラー
    • スクリプトに赤いエラーが出ていないか確認します。エラーがある場合は、UnityのConsoleウィンドウを開いてメッセージをチェックしてください。
  4. カメラの設定
    • カメラが3Dオブジェクトを正しく捉えているか確認します。特にレイがオブジェクトに届かない位置にカメラがあると、クリックが反応しません。

4. 成功した場合の見栄えを調整

動作が成功したら、以下を試してみるとさらに良くなります。

  • UIテキストの位置やサイズの調整: ゲームビューで見やすい場所に移動します。
  • オブジェクトの種類を増やす: Cube以外の3Dオブジェクトを追加し、それぞれ違う名前を付けて試してみましょう。
  • オブジェクトの名前を工夫: ゲームのテーマに合わせてユニークな名前を付けて、見栄えを良くします。

これで、クリックしたオブジェクトを破壊して名前を表示するシステムの完成です!



よくある質問(Q&A)

Q
オブジェクトが破壊されない場合の対処法は?
A

ヒエラルキー内のオブジェクトに「Collider」コンポーネントが追加されているか確認してください。

Q
テキストが表示されない場合の原因は?
A

UIテキストが Clear Text フィールドにリンクされているか確認してください。

Q
他のオブジェクトも追加して破壊したい場合は?
A

ヒエラルキーで同様に他のオブジェクトを追加すればOKです。