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

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

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

Сообщение Syberex 14 июл 2012, 00:41

BANNERTM писал(а):Сделал через триггеры - стало лучше. Но все равно при около 40 пушек и около 60 целей фпс заметно падает.

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

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

Сообщение BANNERTM 14 июл 2012, 10:23

Syberex писал(а):
BANNERTM писал(а):Сделал через триггеры - стало лучше. Но все равно при около 40 пушек и около 60 целей фпс заметно падает.

А что изменилось в скриптах? :) Триггеры теперь на пулях чтоли?

Сделал через OnTriggerEnter
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

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

Сообщение AndreyMust19 14 июл 2012, 11:56

Может код в Update / FixedUpdate занимает слишком много процессорного времени? Проверьте загруженность проца в момент тормозов.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

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

Сообщение BANNERTM 14 июл 2012, 12:18

AndreyMust19 писал(а):Может код в Update / FixedUpdate занимает слишком много процессорного времени? Проверьте загруженность проца в момент тормозов.

Ну конечно FixedUpdate занимает много процессорного времени!!! А как еще?! И большая часть уходит на поиск цели
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

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

Сообщение AndreyMust19 14 июл 2012, 12:23

Движок не может приказать видеокарте рендерить след. кадр пока не вернулось управление из всех Update. Надо оптимизировать. Показывайте код.
Самый простой вариант - отключать скрипты турелей, к-е находятся достаточно далеко.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

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

Сообщение BANNERTM 14 июл 2012, 20:29

AndreyMust19 писал(а):Движок не может приказать видеокарте рендерить след. кадр пока не вернулось управление из всех Update. Надо оптимизировать. Показывайте код.
Самый простой вариант - отключать скрипты турелей, к-е находятся достаточно далеко.

Вот мой код(извиняюсь за нечитабельность)

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
public class cannon : MonoBehaviour {
       
 Transform target; // цель
public Transform sp;//spawn point (спавн пулей)
public Transform bullet;//пуля
public float attackRange = 30.0f;
public float shootAngleDistance = 10.0f;
public float gundamag = 30;    
int speed=5;
int tim = 0;   

LayerMask LMSK=4;      
       
float _time = 5.0f;
double t = 0.3f;//число для счетчика выстрелов

       
       
float delta;   
       
       
float objectdefault_y_position = 21.55736f;    
 
  void FindClosestEnemy()
    {

       
               
       
               
          //gos = Physics.OverlapSphere(transform.position,20);
       
               
               
                //foreach(var enemy in gos){
                       
                        //if(enemy.gameObject.tag=="Player")
                        //target=enemy.gameObject.transform;
               
                       
                //}
               
    }


       
       
void Awake(){
       
       
       
               
}
       
       
       
void Start(){
       
       
       
        }

void FixedUpdate(){
               
               
               
               

               
               
               
                       
        //print (target);      
                       
        /*      GameObject closest=null;
                float distance = 500f; 
               
               
               
                foreach(var enemy in Enemy_test_Scrpt.AllEnemies){

               
                var diff=(enemy.transform.position-transform.position);
                       
                var curDistance=diff.sqrMagnitude;     
                if(curDistance<distance)
                        {
                                closest=enemy;
                                distance=curDistance;
                               
                        }
                       
               
                       
                       
                       
  }    
               
        target=closest.transform;       */

               
                       
               
                       
               
               
               
               
               
               
               
               
               
               
               
        }
       
       
  void OnTriggerEnter(Collider other) {
       
                if(other.gameObject.tag=="Player")
                        target=other.gameObject.transform;
        }
                       
        void OnTriggerExit(Collider other){
       
                if(other.gameObject.transform==target)
                        target=null;
        }              
                       
       
               
               
   
       
void Update(){

               
        //FindClosestEnemy();
               
               
               
               
               
               
               
//Пушка ищет ближайшую цель
               
               
               
       
if (target == null) //если не нашла то ретурн
return;
 
        transform.LookAt(target);              
                       
                //var targetRotation = Quaternion.LookRotation(target.transform.position - transform.position);

       

// Smoothly rotate towards the target point.

//transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
       
        //повороачиваем пушку к цели

 /* var targetPoint = target.position;
               
               
               
   var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up);
   transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 4.0f);

   var forward = transform.TransformDirection(Vector3.forward);
   var targetDir = target.position - transform.position;
 ////повороачиваем пушку к цели*/

                       
RaycastHit hit;
               
                       
                       
                       
                       
                       
                       
                       
                       
                       
                       
               
                       
                       
       
               
                if(Physics.Raycast(transform.position,transform.forward,out hit,200f)){//стрельба
                        //Debug.DrawLine( transform.position, target.position, Color.red);
                       
                       
                       
                       
                       
                       
                               
                       
                        Pause ();//пауза  
                               
                               
                        if(t>=0.5){//ждем пока счетчик обнулится       
                       
                        if(hit.transform.gameObject.layer!=4){ 
               
                       
                               
                                                       
                                                       
                                hit.transform.gameObject.GetComponent<Enemy_test_Scrpt>().target_health-=gundamag;
                               
                                               
                                               
                                                       
                                               
                                        }
                       
                       
                       
                       
                               
                       
                               
                        t=0.3;//счетчик выстрела обнуляем       
                               
                               
                               
                        }
                       
                       
                       
               
               
               
                }//DrawScript
                       
               
       
        }


       
       
       
               
               
void Pause(){//пауза
               
if(t<0.5){
t+=Time.deltaTime*(1.0/_time); 
}
               
               
               
               
               
        }
       

       
       
       
}
 
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

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

Сообщение DobrijZmej 14 июл 2012, 20:38

AndreyMust19 писал(а):Движок не может приказать видеокарте рендерить след. кадр пока не вернулось управление из всех Update. Надо оптимизировать. Показывайте код.
Самый простой вариант - отключать скрипты турелей, к-е находятся достаточно далеко.

как минимум, перенести поиск в коротину...
Аватара пользователя
DobrijZmej
UNIт
 
Сообщения: 146
Зарегистрирован: 03 июл 2012, 20:38

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

Сообщение AndreyMust19 14 июл 2012, 21:44

Пускайте луч только в момент выстрела. Сейчас вы проверяете факт попадания только если можно произвести выстрел. В результате б0льшая часть райкастов тратится впустую.
Попробуйте так:

Синтаксис:
Используется csharp
Enemy_test_Scrpt targetScript;

void OnTriggerEnter(Collider other) {
        if (other.gameObject.tag == "Player") {
                target = other.gameObject.transform;
                targetScript = target.gameObject.GetComponent<Enemy_test_Scrpt>();
        }
}
                       
void OnTriggerExit(Collider other) {
        if(other.gameObject.transform==target) target = targetScript = null;
}

void Update() {
        if (target == null) return;
        Pause();
        if (t >= 0.5 && Physics.Raycast(transform.position,transform.forward,out hit,200f)) {
                transform.LookAt(target);
                if (target == hit.transform && hit.transform.gameObject.layer != 4)
                        targetScript.target_health -= gundamag;
                }
                t = 0.3f;
        }
}


Надеюсь target_health - это свойство, а не поле?
И поправьте форматирование, самому потом будет проще.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

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

Сообщение Syberex 16 июл 2012, 06:53

На странице 3 повторили все то, что и на 1-2 ... Только автор корутин и очередей видимо не хочет :-?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

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

Сообщение Jakobs 17 июл 2012, 05:22

Начал разбирать возможные варианты на ноуте... получил маленький фпс что с Очередями что с Корутинами
вопрос остался не решенным... и интересным =)

з.ы. кстате не используй ригид-боди, физика снижает по фпс...
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

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

Сообщение Syberex 17 июл 2012, 08:03

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

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

Сообщение Jakobs 17 июл 2012, 16:21

Syberex писал(а):Не использовать ригидбоди, это все равно, что сказать парикмахеру - не использовать ножниц :D ...


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

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

Сообщение BANNERTM 20 июл 2012, 17:57

Jakobs писал(а):
Syberex писал(а):Не использовать ригидбоди, это все равно, что сказать парикмахеру - не использовать ножниц :D ...


1000 объектов с ригидбоди понижают ФПС больше чем, 1000 объектов которые каждый фрейм обрабатывают 1000 целей для поиска ближайшего
Для работы с таким количеством объектов надо забыть о физике...

На сцене вообще нет ригидбадти!
Блин, еще есть идеи? :((
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

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

Сообщение Syberex 20 июл 2012, 19:32

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

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

Сообщение BlackMamba 26 июл 2012, 10:20

все не читал, но хочу сказать, что у вас есть массив врагов, даже если их 1000, перебрать всех простейшими методами не должно сильно грузить комп, может быть проблема не в этом скрипте?
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Пред.След.

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

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

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