📘

【Unity】1番近くにあるGameObjectを取得するFindWithTag

2022/01/21に公開

概要

1番近くにあるオブジェクトのGameObjectを取得するFindWithTagが欲しかったので、簡易的に実装しました。

※ 2022/01/21 追記
公式リファレンスの2番目の例に該当の実装例があるそうです。
https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html

コード

        // 1番近いオブジェクトを取得する
        // (プレイヤーのMonoBehaviourにアタッチされている前提)
        private Transform FetchNearObjectWithTag(string tagName)
        {
            // 該当タグが1つしか無い場合はそれを返す
            var targets = GameObject.FindGameObjectsWithTag(tagName);
            if (targets.Length == 1) return targets[0].transform;

            GameObject result = null;
            var minTargetDistance = float.MaxValue;
            foreach (var target in targets)
            {
                // 前回計測したオブジェクトよりも近くにあれば記録
                var targetDistance = Vector3.Distance(transform.position, target.transform.position);
                if (!(targetDistance < minTargetDistance)) continue;
                minTargetDistance = targetDistance;
                result = target.transform.gameObject;
            }

            // 最後に記録されたオブジェクトを返す
            return result?.transform;
        }

Discussion