Я пытаюсь построить массив всех пешек игроков, которые находятся в конусе поля зрения игрока. Я бы предпочел не перебирать GetAllActorsofClass в цикле по очевидным причинам производительности. Это будет происходить каждый тик.
UE4 - получить всех игроков в поле зрения
Ответы (2)
GetAllActorsOfClass выполняет итерацию по хеш-таблице вещей этого класса. Даже со 100 игроками это вряд ли будет очень дорого. Я бы предположил, что «получить актеров в пирамиде» просто сделало бы это под капотом.
Если у вас все в порядке, вы можете использовать ConvertWorldLocationToScreenLocation и сравнить это с координатами границ экрана с помощью GetViewportSize.
Единственный метод, о котором я не могу использовать GetAllActorsOfClass, - это вычислить размер прямоугольника на «конце» усеченной вершины, используя гигантскую трассировку с несколькими прямоугольниками и фильтрацию на основе скалярного произведения. Следы дешевы, скалярное произведение дешево. Будет ли это дешевле, чем GetAllActorsOfClass, зависит от вашей игры.
Если производительность действительно является проблемой, лучшим решением будет использование кода. В зависимости от вашей реализации вы можете использовать наивизацию Blueprint, чтобы получить дополнительный импульс, не копаясь в коде.
Используйте MultiSphereTrace от вашего игрока к его направлению FOV и просматривайте результаты попаданий.
Убедитесь, что вы правильно установили слой столкновения, чтобы трасса взаимодействовала только с целевым игроком.
Я делаю это в своей мобильной игре с примерно 10-20 актерами в кадре, и это отлично работает.
GetAllActorsOfClass
- person BenjaFriend   schedule 27.08.2018