Seach メソッド内の処理は LINQ の機能を利用することにより、処理の簡略記述出来ます。
private GameObject Search()
{
GameObject[] objs = GameObject.FindGameObjectsWithTag(tagName);
GameObject searchTargetObj = objs
.OrderBy(obj => Vector3.Distance(obj.transform.position, transform.position))
.FirstOrDefault();
return searchTargetObj;
}
このリファクタリングでは、LINQのOrderByメソッドを使用して、オブジェクトを距離の昇順でソートし、
FirstOrDefaultメソッドで最初のオブジェクトを取得しています。
これにより、コードが簡潔になり、最も近いオブジェクトを検索する処理がより明示的になりました。
処理が正しく読み解けるようになってきたら、さらなる簡略化が可能です。
private GameObject Search()
{
return GameObject.FindGameObjectsWithTag(tagName)
.OrderBy(obj => Vector3.Distance(obj.transform.position, transform.position))
.FirstOrDefault();
}
いずれも戻り値の値を利用した、メソッドチェーンによる記法です。