Search Unity

Улучшения процесса производства

, Февраль 17, 2015

Предстоящий релиз Unity 5.0 имеет множество новых функций. Он также включает в себя ряд улучшений технологических процессов и производства, особенно при работе в команде.

Конфликты сцен

Одна из больших неудобств при работе в команде – конфликты в файлах сцен. Это может произойти, когда несколько человек одновременно работают над одной и той же сценой. Чаще всего это происходит потому, что до Unity 5.0 все объекты, которые содержатся в экземплярах префабов, добавляются в файл сцены. Простое открытие сцены и повторное сохранение ее без изменения ничего не даст, Unity запишет все экземпляры объектов из префабов в файл сцены, которые, безусловно, создадут конфликты, если кто-то сделал то же самое.

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

Дело в том, что на самом деле не нужно писать все объекты экземпляров префабов в файл сцены, но так исторически сложилось, что до Unity 5.0 мы этого не меняли.

В Unity 5.0 в файл сцены больше не записываются все объекты экземпляра, только объект префаба, содержащий изменения экземпляров, и объекты, ссылки на которые могут быть записаны в сцене. Экземпляр объекта, на который ссылаются, записан в упрощенной форме для обеспечения постоянного идентификатора ссылки.

StrippedPrefabInstances

Click to see full image.

Это показано на рисунке слева. Здесь я создал простую сцену в Unity 4,6, содержащую префаб, в котором находятся куб, сфера и капсула. Слева вы видите, как все объекты экземпляра записаны в сцену, справа – только объект префаба с изменениями, которые хранятся в файле сцены.

Единственный конфликт, связанный с префабами, теперь будет в модификации префаба, когда два человека модифицируют экземпляр префаба в сцене. Это решить намного проще.

Вторая причина конфликтов при работе в команде – лайтмаппинг.

В Unity 4.6 свойства лайтмаппинга, такие как смещение и масштабирование карты освещения, хранятся в каждом Renderer, который включен в карту освещения. Это означает, что эти свойства сохраняются в файле сцены. Если два художника редактируют одну и ту же сцену и делают лайтмаппинг, все эти свойства, вероятно, будут конфликтовать. В результате чего появятся много крошечных конфликтов по всему файлу сцены, даже если изменения в игровых объектах не конфликтуют. Там может быть много конфликтов, и вы не можете просто решить использовать одно из обновлений в файле сцены, потому что вы можете потерять работу, которая была сделана в другом обновлении. Но вам, вероятно, придется сделать этот выбор и повторно выполнить некоторую работу. Это может занять даже больше времени, так как нужно будет принимать решения по каждому конфликту.

Все значения свойств, связанные с лайтмаппингом, такие как смещение UV, масштаб UV и индексы карт освещения, в Unity 5.0 хранятся в отдельном ассете. Если два человека изменят сцену, а затем запекут лайтмаппинг, то в ассете лайтмаппинга, конечно, будет конфликт, но есть вероятность, что изменения в файле сцены не будут конфликтовать и, если они сделают это, должно быть намного легче решить это. Лайтмаппинг все равно нужно будет перезапекать, но это займет меньше времени, чем попытки разрешить конфликт или вернуть изменения в сцене.

Инструмент слияния сцены

Конечно, еще будут ситуации, когда файлы сцен будут конфликтовать, но эти конфликты в основном будут связаны с фактическими изменениями, внесенными художниками, и их разрешение должно быть намного проще. Чтобы сделать разрешение этих конфликтов еще проще, мы разработали инструмент слияния сцены, который знает семантику файла сцены и способен объединять файлы сцены на основе объектов, не на простом сравнении текста. Инструмент работает в качестве предварительного слияния, а значит, вы можете настроить систему управления версиями, чтобы сделать слияние сцены перед запуском инструмента трехстороннего слияния. Или если вы используете встроенную в Unity поддержку VCS, можно включить инструмент слияния сцены через настройки редактора.

Конечно, все это будет работать только тогда, когда вы используете текстовую сериализацию. Если вы храните сцены и другие двоичные файлы в двоичном формате, конфликт не может быть решен, и сцены не могут быть объединены.

 Отслеживание изменений сцены

Раздражают не только сами конфликты, но и постоянные просьбы сохранить сцену, даже если вы не сделали никаких изменений. Такие вещи, как изменение позиции окна или проверки определенных ассетов, может сделать сцену «измененной», хотя очевидно, что вы ничего в сцене не поменяли. Косвенные изменения в сцене, например, повторное запекание в лайтмаппинге также сделает сцену «измененной». Для Unity 4.6 это было правильным поведением, но так как все данные связанные с лайтмаппингом были перенесены в ассет, Unity больше не будет требовать, чтобы вы сохраняли сцену снова.

Чтобы решить проблему ложной маркировки сцены как «измененная», мы перенесли отслеживание состояния изменения сцены в систему отмены. Все, что касается сцен в редакторе, возможно отменить. Когда новый элемент добавляется в стек отмены, UndoManager будет проверять, с чем связаны изменения – со сценой или с ассетом. Если это связано со сценой, UndoManager увеличит значение изменений сцены. Когда вы выполните отмену, значение изменений сцены будет уменьшено, так что вы можете сделать кучу изменений в вашей сцене, отменить их все, и сцена больше не будет помечена как «измененная». Конечно, переделки сделают сцену снова «измененной».

Но и это еще не все

Выбор в окне иерархии и в окне сцены были сильно оптимизированы, что делает Unity более отзывчивым при работе с большими сценами.

AudioClip теперь поддерживает мультиредактирование, так что вам больше не придется изменять одно и то же свойство на всех клипах по одному. Просто выберите все клипы, которые вы хотите изменить, и установите свойство для всех сразу.

При первом импорте FBX файлов теперь учитываются настройки масштабирования в файле. Больше не требуется, чтобы вы импортировали FBX, изменяли масштаб, а затем повторно импортировали его. Если параметры масштабирования в файле установлены правильно, модель должна выглядеть правильно после первого импорта.

И последнее, но не менее важное, что я хочу упомянуть. Редактор переходит на 64-бит на всех платформах. Это означает, что работа с проектами, у которых раньше были проблемы из-за нехватки памяти, должна стать более приятной.

Надеюсь, что изменения, упомянутые выше, сделают вашу работу с Unity еще более продуктивной и гладкой.

Комментарии закрыты.

  1. I am using the latest patch release of the Unity 5.0.0 P2 but I can’t find the scene merging tool in the Editor settings?

  2. This is awesome. Scene conflicts was the single biggest issue our team was facing.

    However, there is still another pain point. When I animate a material, it changes the actual material in disk, but only in the editor. This means that every time I hit play, it modifies the material, which causes superfluous vcs commits and conflicts. It causes the game to behave different in the editor and other players. Also it is not consistent, because objects in the scene don’t have this issue.

    I did file a bug with this, but it got closed as «by design». To me a design that modifies source code every time you run it is a terrible design.

  3. «On first import of FBX files, the scaling settings in the file are now taken in to account, so the work flow no longer requires you to import an FBX, change the scaling and then reimport it. If the scale settings in the file are setup correctly, the model should look the way you intended it to look after the first import.»

    Wooow, finally.
    It took only how many, 8-10 years to ‘implement’? Let’s make a calculation, saying that one Unity user spends 1 hour in a year with applying scale parameters and reimport an asset in every year (depending on the projects it could be far-far more).

    Unity has 600.000 active (and millions of temporarely active) users.

    It means that 600.000 hours per year, 4.800.000 hours overall (for 8 years).
    One year = 8760 hours.
    4.800.000 hours = 547 years the users spent with tweaking a badly implemented feature.
    Then calculate the cost of this and think, how happy we should be with this extra care we got here as a «workflow enhancement» on FBX import.

    Sorry for being sarcastic, but I think I’m right. I hope some other enhancements will arrive, but with a more reasonable ‘development time’, like it happened in the ‘old Unity times’.

  4. Hello,

    I see there is a bug report for this, but I wanted to know if the Unity team is working on fixing the bug on Lightmap generation for Intel HD graphic cards on Mac. I would like to experiment with some scenes in Unity 5, but the Lightmapping generation is broken as it creates surfaces shimmering with multi-colored noise. This happens also with a basic unwrapped cube in an empty scene.

    1. That is fixed in RC3 as far as I know.

  5. Sounds cool ! Looking forward to the scene merger

  6. Hi, can anybody tell me is UNET ready and how to use it :) ??

    1. I guess that would be more appropriate to ask in the forums … but … I don’t think the Unity Networking will come with Unity 5.0 because it’s not even in the beta / release candidates, yet. I think the announcements were all «in 5.x»

      1. Ohhh … gives us editing powers please ;-) … not «I don’t think the Unity Networking will come» of course, but «I don’t think *that* Unity Networking will come» … [hides]

  7. I love workflow improvements like these!

    I still do have one related bug open, though: Case 664751 — Scene isn’t dirtied when making a prefab …

    And I’m filing another bug report right now with a scene that always gets dirtied … so that’s (Case 673337) Scene AStartmenu is always dirtied

  8. Any news on multi-scene editing?

  9. The scene conflicts are a huge problem for teams. Really glad this is being tackled in the next version.

  10. descargar dino unter

  11. This is why I love Unity.

  12. We also suffer from having scene conflicts all the time, which is quite frustrating. Good to hear you fixed it!

  13. Like where U5 is headed. Just wanted to know if the Editor will be 64bit only in unity5 or will you support a 32bit verions as well? Keep up the good work.

    1. Both 64 and 32 bit on Windows; 64 bit only on Mac (based on our data, there are virtually no 32 bit Macs left in use).

  14. Will nested prefabs be part of this workflow, if not now, maybe in the near future? Being able to nest prefabs would be a way for some team members to work on prefabs rather than scenes and avoid modifying the scene in the first place. e.g., artists changing the visual aspects of prefabs, designers tweaking parameters.

  15. Thank you! These are the exact kind of pain points that have been driving me crazy!

    Please make an option to have the scene save on play. I’ve lost a days work before by having Unity fully crash due to a simple infinite loop in a behavior before.

  16. I would REALLY like a way to «undirty» a scene. For instance, there’s many plug-ins that make changes to a scene which are computational only and not reflected in the saved state. I need a way to get these changes done without the editor thinking it needs to resave the scene. Case in point: Angry Bots demo does this constantly. My plug-in (Advanced Additive Scenes — an implementation of your upcoming Multi-Scene Editing feature) needs to flip the HideFlags a few times during the save process, which really shouldn’t dirty the scene.

    1. This is already solved in 5.0 with above changes.

      Scenes are only dirtied if you register an undo command.
      If you don’t support undo then it will not be dirtied at all. Our goal is to apply this technique to all changes, like assets / materials etc in 5.x.

      In case registering an undo operation is not possible you can use:
      http://docs.unity3d.com/500/Documentation/ScriptReference/EditorApplication.MarkSceneDirty.html

  17. will any of these changes on how lightmapping assets are handled be rolled down into a 4.6.x release?

  18. This is awesome news, congrats on the improvements!

  19. Unity 5 is looking to be an awesome update :D

  20. I know I’m asking a question that can’t be answered, but, when is unity 5 supposed to come out? Within a month or two, or the end of the year? Or next year?

    1. Since we’re in «release candidate 2» right now… that would mean it’s not very far away.

      1. Awesome, thanks! These blog posts are getting me more and more excited about using it. So, thanks for the info :)

  21. «AudioClip now supports multi selection and editing»

    Awesome! Why wasn’t that a thing from the start?

    1. Short answer: because features don’t implement themselves :)

      Longer answer: because old audio code was causing a lot of data to be read into memory when an audio asset was selected. Selecting multiple of them + 32 bit editor would have meant «out of memory» in pretty much all cases. Or something like that.

      1. Every day we can delete a workaround editor script from our projects is a good day :D

  22. Much appreciated changes, how wonderful life is — when you just make your game and engine improvements show up like birds in the window while you eat your breakfest :)