Unityでクリックされたオブジェクトの名前をカンマ区切りでテキストに順番に表示する方法について解説します。このプロジェクトでは、オブジェクトの名前をクリックごとに取得し、それを1つのテキストフィールドに表示します。
ステップ1: Unityプロジェクトの準備
3Dオブジェクトを配置
- ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」から「Cube」や「Sphere」など、いくつかのオブジェクトをシーンに追加します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-13_211305.png)
ステップ2: UIテキストの追加
- ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「UI」から「Text」を選びます。CanvasとTextが追加されます。
- Textオブジェクトを選択し、インスペクター(Inspector)ウィンドウでアンカーを上に設定し、位置を調整して見やすい場所に配置します。
- このテキストが、クリックしたオブジェクトの名前を表示する場所となります。位置やサイズの設定が終わったらテキストの中身を空にしておきます。
ステップ3: クリック検出用スクリプトの作成
- ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「Create」から「C# Script」を選びます。
- スクリプトの名前を ObjectClickDetectorにします。スクリプトを作成したら、以下のコードを記述してください。
using UnityEngine;
using UnityEngine.UI;
public class ObjectClickDetector : MonoBehaviour
{
public Text objText;
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;
objText.text = objText.text + objectName + ", ";
}
}
}
}
スクリプトの解説
UnityEngine
とUnityEngine.UI
ネームスペースをインポートしています。これにより、Unityの基本的な機能とUIシステムにアクセスできます。ObjectClickDetector
クラスは、MonoBehaviour
から継承されています。これにより、このスクリプトをゲームオブジェクトにアタッチして、Unityのライフサイクルイベント(例えばUpdate
メソッド)を利用できます。public Text objText;
で、クリックされたオブジェクトの名前を表示するためのテキストUIコンポーネントの参照を保持します。UnityエディタからこのフィールドにUIテキストオブジェクトをアサインする必要があります。Update
メソッドは、毎フレーム呼び出されます。このメソッド内で、マウスの左ボタンがクリックされたかどうかをチェックしています。- マウスクリックを検出した場合、
Camera.main.ScreenPointToRay(Input.mousePosition)
を使用して、マウスカーソルの位置からレイを投射し、クリックされたオブジェクトを検出します。 Physics.Raycast(ray, out hit)
を使って、レイが何かに当たったかどうかをチェックします。当たった場合、そのオブジェクトの名前を取得して、objText.text
に追加します。ここで、オブジェクトの名前の後ろにカンマとスペースを付けて、次にクリックされたオブジェクトの名前が追加されるようにしています。
注意点
このスクリプトを使うには、UnityプロジェクトにテキストUIオブジェクトを追加し、そのテキストコンポーネントをobjText
にアサインする必要があります。また、クリック検出を行うには、カメラにPhysics Raycaster
コンポーネントが必要ですし、クリックしたいオブジェクトにはコライダーがアタッチされている必要があります。
ステップ4: スクリプトの適用と設定
- 作成した
ObjectClickHandler
スクリプトをドラッグし、シーン内の任意のオブジェクトにドロップしてアタッチします(例えば、Main Cameraなど)。 - ヒエラルキー(Hierarchy)ウィンドウで ObjectClickDetectorスクリプトをアタッチしたオブジェクトを選択します。
- インスペクター(Inspector)ウィンドウで、ObjectClickDetectorスクリプトの
objText
フィールドに、作成したTextオブジェクトをドラッグしてリンクします。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-13_211500.png)
ステップ5:テスト
シーンを再生して、3Dオブジェクトをクリックすると、クリックされたオブジェクトの名前が順番にテキストフィールドに表示されることを確認してください。
これで、クリックされたオブジェクトの名前をカンマ区切りで表示する機能が完成しました。初心者でも簡単に試せるので、ぜひ挑戦してみてください!
おすすめのアセット
NGUI: Next-Gen UIは、Unityのための強力なGUIツールです。これを使うと、ゲームやアプリケーションのUIを簡単に作成できます。ドラッグ&ドロップで直感的に操作でき、カスタマイズも豊富。クロスプラットフォーム対応で、さまざまなデバイスに適用可能です。