Страница 4 из 5

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 29 июл 2012, 21:52
Jakobs
BlackMamba писал(а):все не читал, но хочу сказать, что у вас есть массив врагов, даже если их 1000, перебрать всех простейшими методами не должно сильно грузить комп, может быть проблема не в этом скрипте?


одному такой массив не сложно перебрать...
допустим у меня 1000 объектов перебирают 1000 врагов в результате получаем 1 000 000 запросов одновременно, что уже напряжно обрабатывать =(

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 30 июл 2012, 07:47
Multirezonator
Интересная задачка, с виду тривиальная, должно быть куча решений, попробую на досуге поэкспериментировать..

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 30 июл 2012, 08:31
jetyb
Совсем необязательно просчитывать ближайшего врага для 1000 целей каждый кадр.
Можно взять цикл по 10 и каждый раз вычислять врага для очередной сотни целей. Стреляют ведь пушки не непрерывно? - так вообще вычислять врага можно с частотой стрельбы.

А лучше вообще захватить одного врага и вести до его убийства\исчезновения. Даже реалистичней поведение получится.

Проблемы возникнут с визуализацией взрывов и пуль от кучи объектов.

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 30 июл 2012, 08:54
Guyver
делить пространство на сектора,
при перемещении объектов ... они сами следят в каком секторе они находятся ...
делать грубую прикидку для секторов ... видит не видит ... если 2 сектора видят друг друга ... то уже обрабатывать объекты внутри секторов .. иначе - забить
размазать всё между кадров .. по очереди .. в 1 кадр 2, 4, 8 секторов .. кол-во секторов подбирать имперически.

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 30 июл 2012, 13:55
Multirezonator
Нарисовал я простенький проект, ищет цели с помощью Physics.OverlapSphere. 1000 врагов и 1000 турелей, которые пытаются стрелять по ближайшей цели.
Посмотреть можно тут
http://dl.dropbox.com/u/26561247/WebPlayer.html
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dl.dropbox.com/u/26561247/WebPlayer.unity3d&w=800&h=600&t=false&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>

скачать отсюда
http://dl.dropbox.com/u/26561247/TurrelTest.unitypackage

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 30 июл 2012, 23:31
Jakobs
Отличный пример, сделал 4000 vs 4000 и фпс 30+ если не смотреть в сторону всего этого действа =)

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 31 июл 2012, 07:05
Syberex
Интересный пример, но чем он показателен? Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 31 июл 2012, 07:34
seaman
Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?

А что PhysX - не часть Юнити?

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 31 июл 2012, 07:38
Multirezonator
Тем что пример соо
Syberex писал(а):Интересный пример, но чем он показателен? Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?

Тем что пример соответствует теме топика, и что все таки FPS достаточно высокий при одновременном поиске целей для 1000 турелей стандартными методами unity3D.

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 31 июл 2012, 09:33
Syberex
Кстати да, а то все время физ-движки тестят на обработку коллизий (падающие бочки ...), а тут вот не менее важный параметр ...
А еще хотелось бы увидеть кусок кода из примера, где используется OverlapSpere :)

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 31 июл 2012, 19:04
Multirezonator
Там же есть ссылка на скачку всего проекта:
Multirezonator писал(а): скачать отсюда
http://dl.dropbox.com/u/26561247/TurrelTest.unitypackage

В проекте всего 4ре скрипта: Turrel , Unit, CameraRotator и Spawner всего в сцене. OverlapSphere, кажется, в скрипте Turrel используется.

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 01 авг 2012, 09:04
liver9711
Свой Update ты зделать можешь (и даже очень примитивным способом):
Синтаксис:
Используется javascript
//Вне всяких функций
InvokeRepeating(0,0.1,"СвойUpdate");//Повторение начинается с нуля, повторяется каждые 0.1 сек и вызывается функция СвойUpdate
function СвойUpdate () {
//Код
}
 

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 06 ноя 2012, 13:23
BANNERTM
Multirezonator писал(а):Там же есть ссылка на скачку всего проекта:
Multirezonator писал(а): скачать отсюда
http://dl.dropbox.com/u/26561247/TurrelTest.unitypackage

В проекте всего 4ре скрипта: Turrel , Unit, CameraRotator и Spawner всего в сцене. OverlapSphere, кажется, в скрипте Turrel используется.


Извините за нубство, но я не понял когда вызывается функция поиска цели SelectTarget()! Почему когда все объекты уничтожены, а я спавню новый, пушки на него не реагируют?

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 08 ноя 2012, 13:21
Ashvar
Ну у меня, кстати, тоже были проблемы с этим. В принципе это можно как-то так оптимизировать:
1.) Сделать список объектов в зоне досягаемости и обновлять раз в секунду (обновление проводить с вызовом OverlapSpere).
2.) Для турели проверять в каждом цикле дистанцию до цели, факт существования цели и возможность в неё попасть. Если цели нет, то выбрать новую цель из списка.
Из вариантов оптимизации добавлю, что можно сделать несколько сфер для OverlapSpere. Наибольшая сфера обновляется с помощью OverlapSpere раз в 10 секунд (к примеру), а потом проверяем все объекты из большой сферы на их вхождение в малую (раз в секунду).
В итоге перебор всех объектов происходит раз в 10 секунд, а не 60 раз в секунду.
Кстати, есть вопрос! А есть аналог OverlapSpere с другими примитивами? в частности с капсулами. И как вообще работает OverlapSpere? не всё же он перебирает, как он оптимизирован?

Re: Падение ФПС из-за скрипта турели)=

СообщениеДобавлено: 08 ноя 2012, 14:00
seaman
Полного аналога нет
Physics.CheckCapsule
Несколько не то. Только касание, если полностью внутри капсулы, не вернет.
Как устроена внутри? Использует физику PhysX Nvidia. Как устроена там? А фиг его знает.
Пересечение двух сфер проверить элементарно. В Юнити проверяется пересечение не со сферой (и не с коллайдером), а с баундинг боксом. Это посложнее. Ну а алгоритмы можно найти в инете:
http://www.google.ru/#q=box+sphere+inte ... _pw.&cad=b