📘
【Unity】1番近くにあるGameObjectを取得するFindWithTag
概要
1番近くにあるオブジェクトのGameObjectを取得するFindWithTagが欲しかったので、簡易的に実装しました。
※ 2022/01/21 追記
公式リファレンスの2番目の例に該当の実装例があるそうです。
コード
// 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