見出し画像

Unity で今選択されているオブジェクトを取得したい。

いつものようにプロジェクトファイルはこちら

Unity には EventSystem というものがあり,Button などの UI 部品の選択状況などを管理してくれます。

現在選択中のオブジェクトを取得できると何かと便利なのでサンプルコードを書きました。

シーン中では選択中のボタンの情報を引っこ抜いて,テキストデータを変化させています。

<CurrentSelected.cs>

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class CurrentSelected : MonoBehaviour {

    // eventSystemを取得するための変数宣言
    [SerializeField] EventSystem eventSystem;

    [SerializeField] Text text;
    GameObject selectedObj;

	// Update is called once per frame
	void Update () {

        // クリックされたタイミングで判定する
        if (Input.GetMouseButton(0))
        {
            // TryCatch文でNull回避
            try
            {
                // 子供のコンポーネントにアクセスしたいのでいったん変数に格納
                selectedObj = eventSystem.currentSelectedGameObject.gameObject;
                // ボタンの子供のTextコンポーネントからtextデータを取得
                text.text = selectedObj.GetComponentInChildren<Text>().text ;
            }
            // 例外処理的なやつ
            catch (NullReferenceException ex)
            {
                // なにも選択されない場合に
                text.text = "どれや";
            }
        }
	}
}

Hierarchy などはこんな感じ

解説

キモは eventSystem.currentSelectedGameObject です。
シーン内にあるEventSystemを参照すれば .currentSelecctedGameObject で簡単に取得可能です。

ほかに説明することは特にありません。

単純にテキストの内容を変更したいだけならもっと楽で軽い実装方法があると思います。ボタンのクリックイベントを使うとか。

質問などはコメントに!!

GitHubにプロジェクトファイル上げたほうがいいよね...

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
note.user.nickname || note.user.urlname

最後まで読んでもらえて嬉しいです。よければフォローもお待ちしています。いただいたサポートはゲームの開発費として使用します。

そういうあなたがスキです!
4
日常をたのしく生きるためのアレコレを書いていきます。

こちらでもピックアップされています

UnityTips
UnityTips
  • 8本

できるだけ単純なコードで用途別にUnityのことをまとめていきます。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。