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

Программирование на Юнити.

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

Сообщение Jakobs 29 июл 2012, 21:52

BlackMamba писал(а):все не читал, но хочу сказать, что у вас есть массив врагов, даже если их 1000, перебрать всех простейшими методами не должно сильно грузить комп, может быть проблема не в этом скрипте?


одному такой массив не сложно перебрать...
допустим у меня 1000 объектов перебирают 1000 врагов в результате получаем 1 000 000 запросов одновременно, что уже напряжно обрабатывать =(
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

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

Сообщение Multirezonator 30 июл 2012, 07:47

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



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

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

Сообщение jetyb 30 июл 2012, 08:31

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

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

Проблемы возникнут с визуализацией взрывов и пуль от кучи объектов.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

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

Сообщение Guyver 30 июл 2012, 08:54

делить пространство на сектора,
при перемещении объектов ... они сами следят в каком секторе они находятся ...
делать грубую прикидку для секторов ... видит не видит ... если 2 сектора видят друг друга ... то уже обрабатывать объекты внутри секторов .. иначе - забить
размазать всё между кадров .. по очереди .. в 1 кадр 2, 4, 8 секторов .. кол-во секторов подбирать имперически.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

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

Сообщение Multirezonator 30 июл 2012, 13:55

Нарисовал я простенький проект, ищет цели с помощью 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
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

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

Сообщение Jakobs 30 июл 2012, 23:31

Отличный пример, сделал 4000 vs 4000 и фпс 30+ если не смотреть в сторону всего этого действа =)
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

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

Сообщение Syberex 31 июл 2012, 07:05

Интересный пример, но чем он показателен? Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

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

Сообщение seaman 31 июл 2012, 07:34

Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?

А что PhysX - не часть Юнити?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение Multirezonator 31 июл 2012, 07:38

Тем что пример соо
Syberex писал(а):Интересный пример, но чем он показателен? Тем, что PhysX движок хорошо оптимизирован? :-? Или это все же Юнити?

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



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

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

Сообщение Syberex 31 июл 2012, 09:33

Кстати да, а то все время физ-движки тестят на обработку коллизий (падающие бочки ...), а тут вот не менее важный параметр ...
А еще хотелось бы увидеть кусок кода из примера, где используется OverlapSpere :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

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

Сообщение Multirezonator 31 июл 2012, 19:04

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

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



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

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

Сообщение liver9711 01 авг 2012, 09:04

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

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

Сообщение BANNERTM 06 ноя 2012, 13:23

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

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


Извините за нубство, но я не понял когда вызывается функция поиска цели SelectTarget()! Почему когда все объекты уничтожены, а я спавню новый, пушки на него не реагируют?
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

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

Сообщение Ashvar 08 ноя 2012, 13:21

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

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

Сообщение seaman 08 ноя 2012, 14:00

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

Пред.След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9