Как правильно сделать update

Общие вопросы о Unity3D

Как правильно сделать update

Сообщение OlegF 25 окт 2011, 14:03

Ситуация такая. Делаю package, в который нужно добавить несколько своих материалов (и соответственно шейдеров). В package есть набор моделей, текстур и этих материалов. Материалам нужно каждый кадр передавать изменяющиеся данные, в частности это векторы камеры, т.е в функции апдейта нужно иметь доступ к текущей камере. Собственно вопросы: 1. как вообще лучше сделать такой update? 2. как засунуть код с апдейтом в package? я так понимаю, что это должно быть что-то вроде невидимого дамми-объекта со скриптом или как?
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: Как правильно сделать update

Сообщение DbIMok 25 окт 2011, 14:13

я бы посмотрел исходники встроенных шейдеров на предмет получения положения камеры в коде шейдера. в бандли код не засунуть.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как правильно сделать update

Сообщение OlegF 25 окт 2011, 15:26

Как это делается во встроенных шейдерах примерно понятно, заданные каким-то образом в модели нормали, вроде float3(1, 1, 0), переводятся из view space в model space и модицицируют там локальный pos. Но к сожалению нужны не только векторы камеры, в скрипте считаются еще какие-то специфичные данные, нужные для специфичных визуальных улучшений, их уже никак иначе, кроме как через скрипт, в шейдер не передать. С бандлом понятно, но в package мы же можем засунуть какие-то скрипты, хотелось бы узнать как это лучше сделать в данной ситуации.
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: Как правильно сделать update

Сообщение gnoblin 25 окт 2011, 15:45

сделать префаб с го-пустышкой на котором висит скрипт - и засунуть его в пакадж.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как правильно сделать update

Сообщение OlegF 25 окт 2011, 17:29

Так можно, однако есть некоторые недостатки - Update() вызывается не каждый кадр в едитор-моде, Camera.current всегда нулевая в едитор-моде, а в некоторых кадрах (в каких именно?) она нулевая и в плей-моде. Я пытался пофиксить это, перенеся код апдейта в OnWillRenderObject(), но тут уже дамми сделать не получится, нужно чтобы у объекта был меш рендерер и чтобы его всегда было видно. Еще такой вопрос - пользователю пакаджа чтобы получить доступ к апдейту придется вручную добавлять этот дамми-объект в сцену или можно как-то автоматически создавать его при экспорте пакаджа?
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: Как правильно сделать update

Сообщение seaman 25 окт 2011, 18:03

Update() вызывается не каждый кадр в едитор-моде,

Это откуда такие сведения?
EditorWindow.Update вызывается 100 раз в секунду на всех открытых окнах.
MonoBehaviour.Update вызывается каждый кадр.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как правильно сделать update

Сообщение OlegF 25 окт 2011, 18:12

Это откуда такие сведения?


void Update() { Debug.Log("in MonoBehaviour.Update"); }

Вот это пишется только при каких-то изменениях в сцене, я что-то не так делаю?
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: Как правильно сделать update

Сообщение gnoblin 25 окт 2011, 18:29

у меня тоже апдейт не вызывается особо в эдитор моде ).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как правильно сделать update

Сообщение seaman 25 окт 2011, 18:30

я что-то не так делаю?

Поподробнее,- что делаете то?
Вешаю этот скрипт на объект в сцене, запускаю игру, вижу сотни сообщений, появляющиеся каждый кадр.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как правильно сделать update

Сообщение OlegF 25 окт 2011, 18:48

Когда я запускаю игру, то тоже вижу сотни сообщений, я про режим редактирования, в котором апдейт вызывается только на какие-то изменения сцены.
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Re: Как правильно сделать update

Сообщение seaman 25 окт 2011, 19:09

EditorWindow.Update вызывается 100 раз в секунду в редакторе.
MonoBehaviour.Update естественно не вызывается - игра ведь не запущена.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как правильно сделать update

Сообщение OlegF 25 окт 2011, 19:37

MonoBehaviour.Update естественно не вызывается - игра ведь не запущена.

Однако если добавить в сцену стандартную систему частиц юнити, MonoBehaviour.Update будет вызываться каждый кадр. В любом случае по-прежнему непонятно как корректно получить текущую камеру где-либо кроме OnWillRenderObject().
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23


Вернуться в Общие вопросы

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

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