Когда вы порождаете копов, вы можете хранить их в List<Transform>
копах и удалять их (если это поддерживается для уничтожения или удаления копов из игры). Таким образом, у вас будет позиция игрока и все позиции полицейских.
Используя эти данные, вы можете найти расстояние от полицейского до игрока, используя Vector3.Distance или Vector2.Distance (если вы хотите игнорировать координату z игрока и полицейских ). Используя эти методы, вы можете зациклить список полицейских и найти ближайшего / самого дальнего полицейского от игрока (если вы хотите показать не любого полицейского, но самого близкого - самого последнего порожденного или ближайшего).
После того, как вы нашли полицейский игровой объект, на который указывает стрелка, вы можете повернуть стрелку к этому игровому объекту, используя метод Transform.LookAt . Вызывайте этот метод при каждом вызове Update()
, и вращение вашей стрелки будет следовать выбранному копу.
Обновление :
Для самого дальнего полицейского ваш код может выглядеть так:
private int lastSpawnPos;
[SerializeField]
private Transform[] spawnPos;
//Your arrow
public GameObject Arrow;
//Player
public Transform Player;
//Storing all spawned cops
public List<Transform> Cops;
void SpawnPoliceCar()
{
GameObject policeCar = ObjectPooling.instance.GetPooledObject("PoliceCar");
int r = UnityEngine.Random.Range(0, spawnPos.Length);
//Adding cop to the list when spawned
//TODO: do not forget to remove from the list, when cop is removed (back to the pool)
Cops.Add(policeCar.transform);
while (lastSpawnPos == r)
{
r = UnityEngine.Random.Range(0, spawnPos.Length);
}
Vector3 policeCarPos = policeCar.transform.position;
policeCarPos = new Vector3(spawnPos[r].position.x, 0, spawnPos[r].position.z);
policeCar.SetActive(true);
policeCar.GetComponent<Damage>().DefaultSetting();
lastSpawnPos = r;
currentPoliceCar++;
}
//Call this on update
void PointArrow()
{
Transform farthestCop = null;
float maxDistance = 0.0f;
//Find the farthes cop
foreach (var cop in Cops)
{
var distance = Vector3.Distance(Player.position, cop.position);
if (distance > maxDistance)
{
farthestCop = cop;
maxDistance = distance;
}
}
//If there are no cops - can't point an arrow
if(farthestCop == null) return;
//Point an arrow on the cop
Arrow.transform.LookAt(farthestCop);
}
Я не могу точно сказать, что это то, что вы ищете, не зная полную игру и код. Надеюсь, это поможет