System.Diagnostics

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

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 18:00

Моя задача в двух словах: мне нужно загрузить сцену из файла, сделать некие изменения в объектах сцены, а потом сохранить изменения, чтобы получился такой же файл, как и входной, только с изменёнными параметрами.
С загрузкой проблем нет. Я добавляю элементы через Application.LoadLevelAdditive(), изменяю их как мне нужно...но вот только не знаю, как теперь сохранить изменения в файл.
Причём ещё интересный для меня вопрос: т.к. скрипты, изменяющие объекты, прилеплены к какому-то GameObject-у, то просто загружать сцену через LoadLevel нельзя, нужно именно через LoadLevelAdditive. И проблема в том, что даже если мне удастся сохранить сцену в тот же файл, то сцена содержит тот лишний объект, к которому прикреплён скрипт изменения загруженных файлов. А его записывать в файл мне как раз не нужно, нужно записать только то, что я загрузил из файла.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение discouraged_one 24 янв 2011, 18:02

Unity Technologies
Аватара пользователя
discouraged_one
Unity Technologies
 
Сообщения: 197
Зарегистрирован: 19 май 2010, 15:56

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 18:03

Спасибо! Надеюсь это именно то, что мне нужно!
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 18:13

Нет, кажется это не совсем то. Я имел ввиду загрузка и сохранение сцены в режиме Runtime. Т.е. чтобы как бы это в процессе игры происходило.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение discouraged_one 24 янв 2011, 18:20

сцены это вобщем editor-only stuff. И сборка AssetBundle тоже. Вам надо что-то свое придумывать. Или я чего-то не знаю (вполне может быть ;-))
Unity Technologies
Аватара пользователя
discouraged_one
Unity Technologies
 
Сообщения: 197
Зарегистрирован: 19 май 2010, 15:56

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 18:24

Ну так проблема не в этом. Проблема в том, как добиться того же для Windows, как и в WebPlayer - чтобы сцена была записана так, чтобы можно было потом её объекты загрузить.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение DbIMok 24 янв 2011, 18:31

эта песня хороша, начинай сначала :)
когда же вы начнете справку читать?
It is easy to add scene files to the list for multi-scene builds. There are two ways to add them. The first way is to click the Add Current button. You will see the currently open scene appear in the list. The second way to add scene files is to drag them from the Project View to the list.

At this point, notice that each of your scenes has a different index value. Scene 0 is the first scene that will be loaded when you build the game. When you want to load a new scene, use Application.LoadLevel() inside your scripts.

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

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 18:39

Насколько я понимаю, тут говорится о сборке игры, как добавить сцену в лист для сборки. Но это немного другая тема. Мне нужно загрузить сцену в игру, которая вообще лежит где-то там непонятно где на жестком диске.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение DbIMok 24 янв 2011, 18:49

добавить свою сцену в Far Cry? :)
ясно, что ничего непонятно.
пожалуйста, напрягитесь, опишите внятно, что нужно.

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

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 20:01

Есть игра. Она загружает из определённой директории сцены формата unity3d. Раньше я их записывал так:
Синтаксис:
Используется csharp
BuildPipeline.BuildPlayer(new string[] { "Assets/Scenes/ExportScene.unity" }, "C:/123/Scene.unity3d", BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);

Объекты этой сцены добавлялись так:
Синтаксис:
Используется csharp
WWW download = new WWW(URL);
AssetBundle assetBundle = download.assetBundle;
Application.LoadLevelAdditive("ExportScene");

Несмотря на то, что игра написана под винду, а сцена сохраняется под WebPlayer, всё отлично работало!
Но теперь я не могу сохранять сцену с параметром BuildTarget.WebPlayer, потому что, как объяснил товарищ discouraged_one, в WebPlayer-е не поддерживается полный функционал.
И теперь мне нужно как-то сохранять сцену для BuildTarget.StandaloneWindows, чтобы потом я точно так же её загружал и использовал.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение DbIMok 24 янв 2011, 20:23

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

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 20:40

Просто я использую статические классы, которые вызывают дополнительные процессы с жесткого диска. Всё работает нормально, но из-за них не сохраняется сцена.(хотя они и не прилеплены к объектам).

Ошибка происходит по той причине, что я пытаюсь сохранить сцену под WebPlayer, а он потоки не поддерживает.
Но тут у меня появилась идея! Я решил попробовать написать что-то вроде такого:
Синтаксис:
Используется csharp
#if !UNITY_WEBPLAYER
  // код с использованием потоков
#endif
 


По-идее должно получиться т.к. вообще я использую StandaloneWindows, а WebPlayer появляется только при сохранении. И действительно, после этого сцена сохранилась без каких-либо ошибок. Но я не смог проверить, корректно ли она записалась т.к. наткнулся на очередную ошибку:
после сохранения сцены на жесткий диск, почему-то объект WWW не хочет ничего загружать. До сохранения всё работает, но после вызова метода BuildPlayer() и повторного запуска, я получаю ошибку:
"Failed to load asset bundle
UnityEngine.WWW:get_assetBundle()"
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: System.Diagnostics

Сообщение EvgeniyT 24 янв 2011, 20:55

И ещё такой вопрос: я использую скрипт, который вызывает метод BuildPlayer в папке Editor, иначе ничего не получится. Но никакие другие скрипты не видят этот класс (точнее в VS они его видят, но Unity, естественно, ругается, что я обращаюсь к скрипту в этой папке).
Так возможно ли вызывать метод BuildPlayer() не по кнопочке в меню самой Unity, а именно из кода? Например создать свою кнопку по GUI.Button(), и в обработчике клика вызывать метод сохранения.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Пред.

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

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

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