У меня есть две системы, которые порождают летающих врагов.Первая система порождает врагов в поле зрения:
distanceFromPlayer = 20;
Ray ray = Camera.main.ScreenPointToRay(new Vector3(UnityEngine.Random.Range((float)leftRange,(float)rightRange), UnityEngine.Random.Range((float)bottomRange,(float)topRange), 0));
screenPosition = ray.GetPoint (distanceFromPlayer);
Вторая система порождает их случайным образом, но с максимальным углом между противником и землей.Посмотрите на это, как если бы была полусфера с игроком в качестве центра, который был перекрыт: враг может появиться на поверхности этой вершины сферы:
float distance = distanceFromPlayer;
float yaw = UnityEngine.Random.Range(0,360);
float pitch = UnityEngine.Random.Range(1,35);
screenPosition = RotationHelper.ConvertYawPitch (Vector3.forward * distance, yaw, pitch);
и
public static class RotationHelper {
public static Vector3 ConvertYawPitch(Vector3 vector, float yaw, float pitch)
{
Quaternion yawRotation = Quaternion.AngleAxis (yaw, Vector3.up);
Vector3 yawedZAxis = yawRotation * Vector3.left;
Quaternion pitchRotation = Quaternion.AngleAxis (pitch, yawedZAxis);
Vector3 yawedVector = yawRotation * vector;
Vector3 position = pitchRotation * yawedVector;
return position;
}
}
Теперь я хочу иметь третью систему для врагов другого типа, которая в основном объединяет две системы.Итак: я хочу, чтобы они появлялись в поле зрения, но не выше определенной высоты, измеренной от земли (или ниже определенного угла, как во второй системе).Так что, если вы посмотрите на небо, оно должно породить врагов ниже поля зрения камеры.
Я пробовал подход, при котором я делаю фиктивную камеру, которая движется вместе с реальной камерой, но не могусмотри с ног на голову, но у меня такое ощущение, что это сильно влияет на мои результаты, и это не самый эффективный способ сделать это.
Любая помощь очень ценится!