質問: 1; return (float)Mathf.Acos(a); } } unityバージョン 2018,2,1f1
回答: ``` target = GameObject.Find("Enemy").transform; ``` まずいのは、この部分ですね おそらく、敵は複数配置すると思いますが、どの敵を指定したのか、という部分が抜けています。 これでは、どの敵に飛んでいくかわかりません。 また、Findはとても遅い関数なので、Update内で呼んではいけません。 タグをつけて、FindGameObjectsWithTagを呼ぶことが推奨されています。 まとめると、「FindGameObjectsWithTagを使って、すべての敵の中からplayerに一番近い敵を探す」 という処理が必要になります。 ``` /* 敵にEnemyのタグをつけること */ var enemys = GameObject.FindGameObjectsWithTag("Enemy"); if (enemys.Length == 0) return; Transform player; //プレイヤーの位置 var nearenemy = enemys .Select(n => new { t = n, sqm = (player.position - n.transform.position).sqrMagnitude }) .Aggregate((min, n) => (min.sqm < n.sqm ? min : n)).t; ``` あと、nullチェックをしていないのも気になります。 敵がいないときにホーミング弾を発射したり、 ホーミング中に敵が倒されたり逃げたりして消滅してしまった場合に、nullのエラーが出ます。