Пятница, 29 Марта 2024, 12:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Unity 5 извращается с кодом? (вместо rigidbody > GetComponent.<Rigidbody>())
Unity 5 извращается с кодом?
alexsilentДата: Среда, 04 Марта 2015, 06:13 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Ребят, я больше дизайнер, чем программист, скажите мне плиз, не слишком ли это ресурсоёмко использует новый Unity 5 скрипты?

вместо
Код
rigidbody.velocity.y

Юнька всюду во всех кодах поставила
Код
GetComponent.<Rigidbody>().velocity.y

это какая-то анти оптимизация?

у меня просто очень много строк в кодах начинающихся с rigidbody, очень много
и каждый раз он будет GetComponent брать?
и скриптов более 100 штук, я замучаюсь везде подводить под один GetComponent в переменную в скрипте :-?

GetComponent это же слишком хардкорно по ресурсам? Или я ошибаюсь?

Если по скорости rigidbody и GetComponent.<Rigidbody> идентичны, то плевать, буду юзать GetComponent


Сообщение отредактировал alexsilent - Среда, 04 Марта 2015, 07:35
WTALKERДата: Среда, 04 Марта 2015, 09:40 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Может есть типа такого?

Rigidbody MyBody;

MyBody=GetComponent.<Rigidbody>();
...
MyBody.velocity.x=1;
MyBody.position.z=2;
...


Сообщение отредактировал WTALKER - Среда, 04 Марта 2015, 09:40
berilДата: Среда, 04 Марта 2015, 16:42 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Не только rigidbody теперь устарело, но и .rigidBody, .rigidbody2D, .camera, .light, .animation, .constantForce, .renderer, .audio, .networkView, .guiTexture, .collider, .collider2D, .particleSystem, .particleEmitter, .guiText, .hingeJoint biggrin
Написано, что Unity сам будет конвертить старый код в новый )




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)


Сообщение отредактировал beril - Среда, 04 Марта 2015, 16:45
WTALKERДата: Среда, 04 Марта 2015, 17:08 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
тогда надо больше уточнений делать :D

Unity.Uses.ThisCollections.Import.ThisProject.Current.GetComponent.<Rigidbody>().velocity.y
berilДата: Среда, 04 Марта 2015, 18:28 | Сообщение # 5
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Не знаю только, что апгрейдил проект у меня все само заменилось на GetComponent<> cool



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
MANMANAДата: Пятница, 06 Марта 2015, 01:44 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата beril ()
Не знаю только, что апгрейдил проект у меня все само заменилось на GetComponent<>

API update выполняется только для одного проекта или сразу для всех?
а то вот из фразы Unity will automatically upgrade any scripts/assemblies in the Assets folder found using the old API мне лично кажется, что он поменяет скрипты для всех проектов... sad


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
alexsilentДата: Пятница, 06 Марта 2015, 03:20 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата MANMANA ()
API update выполняется только для одного проекта или сразу для всех?

Он теперь меняет скрипт, даже если я в скрипте новом напишу rigidbody просто, он начнёт процедуру замены.
Во всех открытых пятым Юнити он начнёт сию процедуру. Я старые проекты делаю на 4-й, а новые на 5-й


Сообщение отредактировал alexsilent - Пятница, 06 Марта 2015, 03:20
FSProductionДата: Пятница, 06 Марта 2015, 08:43 | Сообщение # 8
частый гость
Сейчас нет на сайте
Цитата MANMANA ()
API update выполняется только для одного проекта или сразу для всех?

MANMANA, только в открытом проекте.
NEBRДата: Пятница, 06 Марта 2015, 11:28 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Сделай кеширование, как советуют в #3 посте, GetComponent будет вызываться только один раз, при старте

King Size #Gamiron12
MANMANAДата: Пятница, 06 Марта 2015, 15:53 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата FSProduction ()
MANMANA, только в открытом проекте.


спс

а при открытии только в открываемом/открывающемся?


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
FSProductionДата: Пятница, 06 Марта 2015, 16:10 | Сообщение # 11
частый гость
Сейчас нет на сайте
Цитата MANMANA ()
а при открытии только в открываемом/открывающемся?

Да. Какой откроешь, в том и предложит обновить, можешь отказаться и потом из меню вызвать "Run API updater...".
Pashock_RazorДата: Вторник, 10 Марта 2015, 19:37 | Сообщение # 12
был не раз
Сейчас нет на сайте
Мне искренне интересно зачем такое извращение с кодом со стороны разработчиков. Неужели эти исправления как-то повлияют на оптимизацию, что на мой взгляд сомнительно. Мой проект после всех исправлений вообще отказывается работать с новой версией движка, в то время как с 4 на 4.6 версию переходил без труда.
XakepДата: Вторник, 10 Марта 2015, 19:58 | Сообщение # 13
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Pashock_Razor ()
Мне искренне интересно зачем такое извращение с кодом со стороны разработчиков. Неужели эти исправления как-то повлияют на оптимизацию, что на мой взгляд сомнительно. Мой проект после всех исправлений вообще отказывается работать с новой версией движка, в то время как с 4 на 4.6 версию переходил без труда.

Конечно повлияют на оптимизацию, ты думаешь там дураки сидят чтоли? GetComponent.<Rigidbody>() - это уже метод, который внутри себя может как-то кешировать объекты, а за счет этого собственно и прирост производительности. Когда ты пишешь просто rigidbody.velocity.y то у тебя идет прямой доступ к rigidbody.
XenoGigДата: Вторник, 10 Марта 2015, 20:37 | Сообщение # 14
был не раз
Сейчас нет на сайте
Ошибочка. GetComponent<>() не имеет встроенного кеширования, и каждый раз, когда раньше мы вызывали gameobject.rigidbody, gameobject.camera и т.п., на самом деле при этом делался соответствующий GetComponent(). Каждый раз.
В официальной документации это написано, а также дана рекомендация кешировать компоненты самостоятельно. Только кто ж читает документацию.... sad
Поэтому правильно, что в Unity5 убрали эти поля, теперь большинство разработчиков поймут, что они что-то делали не так smile


Программист. JavaScript, C#. Web-программирование - Node.js, Native JS. Игровые движки - Unity, Phaser.
XakepДата: Вторник, 10 Марта 2015, 21:29 | Сообщение # 15
めちゃくちゃちゃ
Сейчас нет на сайте
ну это была просто догадка ) ну и все равно же лучше один раз вызвать и потом уже пользоваться, чем постоянно вызывать этот метод smile
berilДата: Вторник, 10 Марта 2015, 21:52 | Сообщение # 16
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Unity 5: API changes & automatic script updating



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
RangerДата: Среда, 11 Марта 2015, 08:14 | Сообщение # 17
почти ветеран
Сейчас нет на сайте
Вброшу:
Цитата XenoGig ()
GetComponent<>() не имеет встроенного кеширования, и каждый раз, когда раньше мы вызывали gameobject.rigidbody, gameobject.camera и т.п., на самом деле при этом делался соответствующий GetComponent(). Каждый раз.

Нет.

Код

  void FixedUpdate() {
   for(int i = 0; i < 50000;i++)
   {
    Vector3 deltaRotation;
    switch (type){
    case 0: deltaRotation = rb.angularVelocity; break; // мое кэширование
    case 1: deltaRotation = gameObject.GetComponent<Rigidbody>().angularVelocity;break;
    case 2: deltaRotation = rigidbody.angularVelocity; break;
    }
   }
  }

unity 4.6.3 результаты:
0: 600 fps
1: 20 fps
2: 580 fps


ЛевшаДата: Среда, 11 Марта 2015, 09:33 | Сообщение # 18
почти ветеран
Сейчас нет на сайте
Цитата XenoGig ()
GetComponent<>() не имеет встроенного кеширования

Имеет, вернее имел.
Имел ссылки на некоторый список компонентов, в который например не входил партиклЭмиттер.
Собственно и сейчас есть этот закешированый список, только его значительно сократили. Например Трансформ по прежнему там.
Впрочем это не проблема, все равно самый производительный способ это вручную заиметь прямые ссылки на компоненты. smile


X.cor.R (Prologue)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Unity 5 извращается с кодом? (вместо rigidbody > GetComponent.<Rigidbody>())
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг