Учебный тренажер водителя трамвая - Страница 2 - Форум - Все для Unity3d

Все для Unity3d> Учебный тренажер водителя трамвая - Страница 2 - Форум>
Страница 2 из 2«12
Форум » Разработка » В стадии разработки » Учебный тренажер водителя трамвая (Проект предназначен для обучения первичным навыкам управлени)
Учебный тренажер водителя трамвая
devpilgrimДата: Пятница, 13.06.2014, 17:05 | Сообщение # 16
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата astat ()
А вот тут момент, для меня, не очень понятный.
Что конкретно не понятно? Предусматривается ли режим редактора в игре? Естественно нет.
Тут еще момент, проверяйте почаще свои решения в сборках. Бывает некоторые накалываются на том, что используют в коде игры инструкции редактора (очень часто именно при загрузках объектов, текстур и т.д.), а потом оказывается, что вдруг не перерисовывается динамическая текстура, ибо задать тип чтения текстур можно только на этапе редактирования, а в игре уже никак, не грузятся ресурсы и т.д.
То, что запустилось в игровом режиме редактора, еще не говорит о том что будет работать в билде smile
Ну и производительность соответственно разная, в собранной игре и в режиме редактора.


Готов работать за деньги, или за очень большие деньги.
 
astatДата: Суббота, 14.06.2014, 00:30 | Сообщение # 17
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline
Цитата
Использование загрузки объекта как реализовано сейчас у Вас, будет напрягать
процессор и память в несколько раз сильнее, чем просто собрать уровни
без динамической подгрузки и расстановки объектов.
Вот этот момент не понятен.

Рассуждаю...поправляйте где не так.
Смотрим пристально на GO(Clone).

Transform - создается новый экземпляр, иначе бы все клоны становились в позицию оригинала , без этого никак.

MashFilter - сам MeshFilter новый, но mesh это указатель на меш оригинала а оригинал, кто бы он ни был, взял ссылку на этот мешь из ресурсов подгруженных движком т.е. тут мы память лишний раз не выделяем.

Mesh Renderer - тоже самое материал и текстура - при создании клона и на материал, и на текстуру ссылается указатель уже подгруженных граф. движком ресурсов, как я понимаю.

Получается что в первом варианте, что во втором - клон получается одинаковый.

Код
mGoInstance = (GameObject)Instantiate(Resources.Load(objectName, typeof(GameObject)));
Вот эта загрузка используется лишь в едитор тайм для отображения объекта в превью, так же mGoInstance является оригиналом для клонов. Далее клоны попадают в окно иерархии сцены (как я понимаю, из него и будут браться префабы для билда). Как только заканчиваем работать с объектом, текущий mGoInstance удаляем.
Вроде в билд ничего лишнего просочиться не должно.

Не подумайте, что я хочу настоять на выбранном варианте загрузки объектов - просто хочу разобраться в деталях, а более опытного, на данную тему, собеседника у меня нет. happy


Сообщение отредактировал astat - Суббота, 14.06.2014, 00:41
 
devpilgrimДата: Суббота, 14.06.2014, 03:51 | Сообщение # 18
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Нет, тут все правильно :), не правильно в другом. В билд ничего лишнего не идет, тут тоже верно. Но вот то, как работает с динамически загруженными объектами движок, а так-же сборщик мусора - совсем другое дело.
Вот тебе несколько наводящих вопросов smile (динамические объекты - имеется в виду загружаемые скриптами, статические - загружаемые вместе со сценой.)
1. В какой очередности происходит загрузка сцены, какие процессы по мимо загрузки при этом работают?
2. Все ли объекты сцены загружаются сразу?
3. Как реализована загрузка и удаление клонов, что происходит с базовым объектом когда удалены все клоны.
4. Как происходит загрузка динамических объектов.
5. Время жизни динамического объекта и его клонов.
6. Остаются ли в памяти объекты сцены при загрузке следующей сцены.
7. Можно ли заставить unity оставить динамический объект в памяти при загрузке следующей сцены.
8. Чем обрабатывается загрузка динамических объектов, и чем статических.

По идее в этих вопросах и есть 50% ответ smile
Кстати, хочешь получить более менее нормальную картину, проведи опыт:
Создай объект, кинь на него скрипт в котором определи массив объектов класса в котором будут содержаться поля данных и поля ссылочного типа, заполни массив, создай из объекта префаб. Добавь еще несколько элементов в массив, но уже в префабе. Перегрузи Unity, помести префаб на сцену, посмотри что получится...
По идее, лучше если ссылки будут на элементы массива данных висящих на другом объекте, так нагляднее будет...
Сразу предупреждаю, эксперимент проводи в отсутствии женщин и детей.
Вот здесь можешь взять исходники которые как раз и иллюстрируют данную фичу префабов smile


Готов работать за деньги, или за очень большие деньги.

Сообщение отредактировал devpilgrim - Суббота, 14.06.2014, 03:55
 
astatДата: Суббота, 14.06.2014, 09:38 | Сообщение # 19
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline
surprised  Интересненько, благлдарствую, буду разбираться smile .
 
devpilgrimДата: Воскресенье, 15.06.2014, 09:31 | Сообщение # 20
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата astat ()
 Интересненько, благлдарствую, буду разбираться
Ну как успехи?


Готов работать за деньги, или за очень большие деньги.
 
astatДата: Воскресенье, 15.06.2014, 21:28 | Сообщение # 21
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline

Цитата
Ну как успехи?
Даже не знаю wink

Опыт провел (во время эксперимента женщины и дети не пострадали biggrin ), поведение префаба оказалось ожидаемо, т.е. с помощью префаба можно настроить начальное состояние GameObjectов сцены. Преимущество использования префабов неоспоримо. Самое ценное, если под конец проекта окажется, что необходимо всем объектам сцены добавить какой то компонент(или поменять начальные условия в скриптах) - добавляем его в префаб и всего делов.

Странное поведение обнаружил, если динамически подгружать префаб, выглядит он как будто не префаб - не подсвечивается синим в иерархии и не имеет поля:

что это значит не знаю.

В моём случае *.FBX модель - законченный ресурс, и ни какие компоненты добавляться на него не будут.
И вот в этом конкретном случае я не нашел отличий динамической загрузки модели от динамической загрузки префаба с моделью.
Конечно же в проекте будут префабы - в основном составные объекты и объекты со сценарием.

Разбираюсь дальше т.к. не на все вопросы нашел ответы.


Сообщение отредактировал astat - Воскресенье, 15.06.2014, 21:30
 
devpilgrimДата: Понедельник, 16.06.2014, 08:05 | Сообщение # 22
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата astat ()
что это значит не знаю.
Это значит что он находится в области памяти доступной для сборщика мусора, ибо динамический. И еще, при создании с него клонов, это будут не ссылки, а экземпляры.
Тогда как префаб уже установленный на сцену будет висеть в памяти и выгружаться не будет.
В моем примере как раз это и можно увидеть, там поля ссылки на данные превращаются в поля данных.
Вот это поведение у меня и вызвало по первой бурную реакцию (женщины и дети правда тоже не пострадали).
Короче, чтобы было понятнее, напишу ответы на вопросы:

1. В какой очередности происходит загрузка сцены, какие процессы по мимо загрузки при этом работают?
Все объекты сцены грузятся до запуска каких либо скриптовых функций. После загрузки уровня запускается главный игровой цикл.
2. Все ли объекты сцены загружаются сразу?
Только установленные на сцену в редакторе.
3. Как реализована загрузка и удаление клонов, что происходит с базовым объектом когда удалены все клоны.
Клонируются только объекты загруженные во время загрузки сцены, клоны удаляются на следующей итерации главного игрового цикла, базовый объект остается в памяти.
4. Как происходит загрузка динамических объектов.
Динамические объекты загружаются в момент вызова скриптовой функции.
5. Время жизни динамического объекта и его клонов.
У динамического объекта не обрабатываемого в главном игровом цикле время жизни до первого прохода сборщика мусора
У экземпляров с него скопированных - так-же.
6. Остаются ли в памяти объекты сцены при загрузке следующей сцены.
Да, если это указать явно.
7. Можно ли заставить unity оставить динамический объект в памяти при загрузке следующей сцены.
Нет.
8. Чем обрабатывается загрузка динамических объектов, и чем статических.
Загрузка статически загружаемых объектов проходит на уровне UnityEngine.
Загрузка динамически загружаемых объектов проходит на уровне абстракции скриптовой функции. (то-есть как минимум на 3 уровня абстракции выше)
Отсюда и очень интересные особенности поведения smile


Готов работать за деньги, или за очень большие деньги.
 
astatДата: Понедельник, 16.06.2014, 21:55 | Сообщение # 23
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline
2. Все ли объекты сцены загружаются сразу? Только установленные на сцену в редакторе.
Вот это меня и сбивало с толку (хотя в мануал указано), и еще вот это
8. Чем обрабатывается загрузка динамических объектов, и чем статических
Почемуто и в голову не прихоило, что есть разница.

Помозгую пока, как поступить теперь.


Сообщение отредактировал astat - Понедельник, 16.06.2014, 22:37
 
devpilgrimДата: Понедельник, 16.06.2014, 22:48 | Сообщение # 24
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата astat ()
Странно,  зачем тогда делать вид что загрузка (Object.Instantiate) на уровне движка
Хм, так сам посуди, как Object.Instantiate может быть на уровне движка, когда она реализована на уровне скриптов, а это самый последний уровень абстракции в игре...
Цитата astat ()
Помозгую пока, как поступить теперь.

Цитата astat ()
Можно было бы подгружать все временные объекты, расставить их чтоб не мозолили глаза и делать копии, но как то мне это не оч. нравиться.

Только не подгружать, а накидать в сцену, а потом клонировать...


Готов работать за деньги, или за очень большие деньги.
 
astatДата: Вторник, 17.06.2014, 00:17 | Сообщение # 25
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline

Цитата
Хм, так сам посуди, как Object.Instantiate может быть на уровне движка

Глупость, согласен.

Намозговалась такие идеи:

Подготовка:
1. Делаю со всех моделек префабы.
2. Делаю GO под каждую категорию объектов, и вкладываю в них префабы.
3. Префабы делаю Deactivates, и мечу тегом EditorOnly.

Должно получиться следующее:
1. Имена категорий есть - вытаскиваю, при старте едитора, списки указателей из каждой категории.
2. При выборе объекта - делаю его Activates для показа в превью.

3. Если устанавливаем объект - клонируем, если нет - делаем Deactivates.

Как то так вырисовывается, на днях попробую.


Сообщение отредактировал astat - Вторник, 17.06.2014, 00:19
 
devpilgrimДата: Вторник, 17.06.2014, 01:52 | Сообщение # 26
Начинающий писатель
Группа: Проверенные
Сообщений: 196
Статус: Offline
Цитата astat ()
Как то так вырисовывается, на днях попробую.

В принципе нормально, пробуй, потом я тебе еще идейку подкину, она правда из разряда "не стандартных", но достаточно интересная...


Готов работать за деньги, или за очень большие деньги.

Сообщение отредактировал devpilgrim - Вторник, 17.06.2014, 02:00
 
astatДата: Воскресенье, 19.04.2015, 00:26 | Сообщение # 27
Новый писатель
Группа: Пользователи
Сообщений: 33
Статус: Offline
Оки happy .

Добавлено (01.11.2014, 20:32)
---------------------------------------------
Думал что освобожусь быстрее, но нет. Проект приостановлен в связи с загруженностью на основной работе и временном отсутствии моделеров.

Добавлено (19.04.2015, 00:26)
---------------------------------------------
Разгребся немного с работой. Продолжаю проект. Так как с моделлером напряг, продолжать проект буду в сторону ж.д. (уж очень большой обьем моделирования города)
Работа не стояла на месте, и было решено начать разработку заново, почему? Потому что все описаное выше, было сделано галопом и без малейшего планирования, модель данных никуда не годится и если продолжить - дальше пойдут костыли.
Зачем я это пишу? Возможно мой опыт поможет кому-то вовремя начать грамотно проект, или вовремя остановиться и начать сначала. Продолжение разработки будет в другой теме.


Сообщение отредактировал astat - Понедельник, 20.04.2015, 01:41
 
Форум » Разработка » В стадии разработки » Учебный тренажер водителя трамвая (Проект предназначен для обучения первичным навыкам управлени)
Страница 2 из 2«12
Поиск:
Свернуть
Развернуть
Необходима авторизация
0
ТОП-5 САЙТА
НОВЫЕ ИГРЫ
ГОРЯЧИЕ ТЕМЫ
СЛУЧАЙНЫЕ ФАЙЛЫ