Спавн в поле зрения, но всегда ниже определенной высоты - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть две системы, которые порождают летающих врагов.Первая система порождает врагов в поле зрения:

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;
    }
}

Теперь я хочу иметь третью систему для врагов другого типа, которая в основном объединяет две системы.Итак: я хочу, чтобы они появлялись в поле зрения, но не выше определенной высоты, измеренной от земли (или ниже определенного угла, как во второй системе).Так что, если вы посмотрите на небо, оно должно породить врагов ниже поля зрения камеры.

Я пробовал подход, при котором я делаю фиктивную камеру, которая движется вместе с реальной камерой, но не могусмотри с ног на голову, но у меня такое ощущение, что это сильно влияет на мои результаты, и это не самый эффективный способ сделать это.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 09 февраля 2019

Я пошел на подход, где я поставил невидимый потолок над игроком, который следует за позицией игрока.Если враг нерестится за этим невидимым потолком, я пересчитываю точку появления.

Я использую ту же технику, чтобы убедиться, что враги не появляются под полом или за объектами.

ЭтоВероятно, это не самый приемлемый для производительности способ, потому что вероятность того, что его нужно пересчитать, довольно высока, поэтому не стесняйтесь делиться другими подходами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...