UE4 - получить всех игроков в поле зрения

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


person Brian    schedule 24.08.2018    source источник
comment
Итак, вы хотите проверить, какие игроки сейчас находятся в поле зрения игрока? Я думаю, что есть несколько способов сделать это: фильтрация столкновений для использования точечного произведения или коллайдера для обнаружения столкновений. Это определенно будет довольно дорого, но я не думаю, что вам нужно использовать GetAllActorsOfClass   -  person BenjaFriend    schedule 27.08.2018
comment
Технически не просматривается. Они могли быть закупорены или даже отбракованы. Визуализируйте усеченную пирамиду как объем, простирающийся, скажем, на 800 метров. Любая пешка в размере будет возвращена в результате.   -  person Brian    schedule 28.08.2018


Ответы (2)


GetAllActorsOfClass выполняет итерацию по хеш-таблице вещей этого класса. Даже со 100 игроками это вряд ли будет очень дорого. Я бы предположил, что «получить актеров в пирамиде» просто сделало бы это под капотом.

Если у вас все в порядке, вы можете использовать ConvertWorldLocationToScreenLocation и сравнить это с координатами границ экрана с помощью GetViewportSize.

Единственный метод, о котором я не могу использовать GetAllActorsOfClass, - это вычислить размер прямоугольника на «конце» усеченной вершины, используя гигантскую трассировку с несколькими прямоугольниками и фильтрацию на основе скалярного произведения. Следы дешевы, скалярное произведение дешево. Будет ли это дешевле, чем GetAllActorsOfClass, зависит от вашей игры.

Если производительность действительно является проблемой, лучшим решением будет использование кода. В зависимости от вашей реализации вы можете использовать наивизацию Blueprint, чтобы получить дополнительный импульс, не копаясь в коде.

person Rakosman    schedule 21.09.2018

Используйте MultiSphereTrace от вашего игрока к его направлению FOV и просматривайте результаты попаданий.

Убедитесь, что вы правильно установили слой столкновения, чтобы трасса взаимодействовала только с целевым игроком.

Я делаю это в своей мобильной игре с примерно 10-20 актерами в кадре, и это отлично работает.

person VectorX    schedule 07.11.2018