Unity какие ide поддерживает
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 7 years ago .
The current version of Unity uses the old MonoDevelop 2.8 which is very primitive. Not only that it cannot register compile errors, I am also unable to know which method I can use. Each time I want to use some built-in method (like OnGUI or OnTriggerEnter ) I have to search them manually.
Since I am coming from the world of IntelliJ IDEA or Eclipse or VisualStudio, this is a very primitive way of working.
I tried using the latest Unity with the newest MonoDevelop 4.0, but I did not succeed.
Can you suggest a modern IDE which I can use with Unity, the one where I will enjoy coding?
10. Eclipse
Eclipse is an Integrated Development Environment that supports more than one programming language. For the customization of its environment, it comprises a base workspace and an extensible plugin system.
Features:
- Free and open source
- Good font rendering
- Its customization is easily done
- It supports lots of extensions
JetBrains Rider
Unity support
- Deeper integration with the Unity Editor: if a method/script is used in a scene, prefab, or asset file, navigating from the Find Usages tool window to this usage will highlight the usage right in the Unity Editor.
- Gutter mark icons for classes, methods, and fields that are implicitly used by Unity have been moved to Code Vision.
- Check that a compilation in Unity was successful before running unit tests through Unity Editor in Rider.
Comments: I've been using it for some time already and my impression is very positive. It's faster compared to Visual Studio and has some really awesome hotkey combos, not to mention support for AceJump and a ton of other useful extensions.
What does this feature get me?
What's the difference between Express and Pro?
Unity's VisualStudio integration has two components:
- Unity creating and maintaining VisualStudio project files. Works with Express and with Profesional.
- Unity automatically opening VisualStudio when you doubleclick on a script, or error in Unity. Works with Professional only.
- I've got Visual Studio Express, how do I use it?
- In Unity, select from the menu Assets->Sync VisualStudio Project
- Find the newly created .sln file in your Unity project (one folder up from your Assets folder)
- Open that file with Visual Studio Express.
- You can now edit all your script files, and switch back to Unity to use them.
- I've got Visual Studio Professional, how do I use it?
Note: With Microsoft's Acquisition of SyntaxTree, Visual Studio Tools for Unity (formerly known as UnityVS) has been released free of charge in the Visual Studio gallery.
This replaces the below steps for users of Visual Studio Professional and removes a number of caveats mentioned further below, allowing for debugging within VS, advanced project file integration, a mirrored console window withing VS, and more.
A few things to watch out for:
Unity automatically creates and maintains a Visual Studio .sln and .csproj file. Whenever somebody adds/renames/moves/deletes a file from within Unity, Unity regenerates the .sln and .csproj files. You can add files to your solution from Visual Studio as well. Unity will then import those new files, and the next time Unity creates the project files again, it will create them with this new file included.
Unity does not regenerate the Visual Studio project files after an AssetServer update, or a SVN update. You can manually ask Unity to regenerate the Visual Studio project files trough the menu: Assets->Sync VisualStudio Project
11. Xcode
Xcode, developed by Apple, is simply an Integrated Development Environment exclusively for Mac OS.
Features:
-
is aimed at developing software for macOS, iOS, watchOS, and tvOS
- Freeware with open-source components
7. Vim
Vim is free and opensource software.
It supports a lot of plugins to extend its functionality. Using Vim, you don’t memorize any key combinations before you can perform tasks on it – Vim is designed to be mnemonic.
Features:
- Cross-platform
- Highly extensible
- Keyboard-based, mouse-free interface
6. Emacs
Emacs is a cross-platform, multilingual editor. Emacs is among the family of text editors that are known for their extensibility.
Features:
- It supports Auto Complete
- It is highly customizable
- It supports the integration of source control
- Emacs does bracket highlighting
Visual Studio Code (Windows, macOS, Linux)
Unity supports opening scripts in Visual Studio Code (VS Code). To open scripts in VS Code, go to Unity > Preferences > External Tools > External Script Editor and select Visual Studio Code. For information on using VS Code with Unity, see Visual Studio’s documentation on Unity Development with VS Code.
Unity is simply a cross-platform game engine. Its development is done by Unity technologies. It now supports close to 25 platforms.
Unity was first introduced in 2005 with the aim of making game development more accessible to developers.
Developers, today, can make good use of Unity in developing three-dimensional, two-dimensional, virtual reality, and augmented reality games.
They may even decide to further use it for simulations and other experiences.
How many Integrated Development Environments do you know can be used in creating games with Unity? This article will be exclusively talking about 12 Best Unity IDE you can use to ease your game development.
1. Visual Studio Code
VS Code is a lightweight, cross-platform editor. It is pretty cool for “wrapped” web-based applications. It comes with many related Unity plugins to help you relate better.
Features:
- Integrated debugging
- Integrated terminal
- It is very powerful and fast
- It supports Windows, Mac OS, and Linux
8. Consulo
Consulo is based on Jet Brains IntelliJ IDE. It is one of the best IDEs for Unity developments. Consulo supports the refactoring of Class/ Variable Names.
Features:
- Unity Integration
- It supports programming languages like Java, JavaScript, Python, Php, and many more!
- It runs well on more than one platform
Conclusion
Any game developer that is in love with Unity will find the well-explained IDEs in this article useful. Each of their distinct characteristics and descriptions is well written in a way to assist readers while going through them.
Что такое AssetPostprocessor и чем Animation отличается от Animator? Почему не стоит доверять OnTriggerExit и зачем вам CanvasGroup? Чем хорош GameObject.Find и как вас спасут Property?
Эта статья родилась из внутреннего доклада для коллег, которые уже достаточно давно занимаются разработкой игр, но только недавно прикоснулись к Unity. Здесь мы собрали фишки и особенности работы с этим игровым движком разной степени капитанскости, почерпнутые из собственного опыта, которые стоит знать, чтобы эффективно им пользоваться и уже никогда ничему не удивляться.
И первое, с чего хотелось бы начать: не обновляйте Unity без крайней необходимости! Всё обязательно сломается. Если вы не решаете этим какую-то важную проблему — просто оставьте его в покое и не обновляйте.
1.1. Самый первый момент при работе с Unity: нужно настроить сериализацию ассетов и префабов в текстовом виде для Git и добавить в игнор всякие системные директории, которые полезны Unity, но не нужны в репозитории. Под нож идут Library, Temp, Logs и obj. Как настроить, чтобы у нас была не бинарная сериализация, а текстовая, показано на скриншоте ниже:
К сожалению, из-за текстовой сериализации ассетов в YAML мёржить будет всё равно больно, но хотя бы репа весить будет меньше.
1.2. Не используйте папку Resources. К сожалению, этому никто не следует, в том числе потому что сама Unity этого не делает. Хотя она пропагандирует использование Asset Bundles, все равно есть такие инструменты, как TextMeshPro, которые будут это игнорировать и использовать папку Resources.
Всё, что находится в этой папке, попадает в билд вне зависимости от того, используете вы эти ассеты или нет. Так в билд обычно прилетает много мусора: старых или тестовых ассетов. Всё это занимает лишнее место и увеличивает размер билда. А если вы где-то в бандлах ссылаетесь на эти ассеты, у вас появятся дубли. Словом, возникает немало проблем, так что если у вас есть возможность от нее отказаться, откажитесь.
1.3. Класс AssetPostprocessor — очень полезная вещь для автоматизации обработки ассетов, но ей мало кто пользуется. Он позволяет при закидывании новых ассетов в Unity как-то их перемолоть: выставить правильные настройки, создать заранее какие-то компоненты, пресеты — методов у него много. На скриншоте пример, как он работает с Game Objects:
Таким образом, при помощи AssetPostprocessor можно упростить работу с ассетами.
1.4. Важно следить за размером и компрессией текстур. Особенно если вы отдаете работу с текстурными ассетами художникам, в какой-то момент вы можете обнаружить, что и маленькие иконки оружия у вас размером 2048х2048px, и компрессия не настроена или настроена как попало, и атласов нет. AssetPostprocessor может помочь такие вещи найти и заалертить или автоматизировать. Компрессию и формирование атласов тоже можно делать автоматически — по группам объектов, директориям или как-либо еще.
Также стоит обратить внимание на класс AssetImporter, позволяющий создавать свои типы ассетов по расширению файлов.
1.5. Используйте SpriteAtlas. Ввели их сравнительно недавно, но они довольно удобные. Полезный инструмент, чтобы уменьшить количество draw calls. В Unity он работает из коробки, хотя раньше приходилось использовать внешние решения вроде TexturePacker или создавать атласы вручную и потом при импорте руками бить их на спрайты.
1.6. Ещё следует помнить, что десериализация Unity недостаточно быстрая. Особенно это касается старых версий Unity. Поэтому, если вы разрабатываете игру с большим количеством статических данных, имеет смысл подумать над отказом от ScriptableObject.
Мы используем свою систему конфигов на базе бинарного протокола. Некоторые наши проекты создают такие конфиги при билде из тех же ScriptableObject, которые в итоге в билд не попадают. К сожалению, сделать свою более быструю реализацию префабов нам в своё время не удалось: получалось быстрее на больших префабах, но медленнее на мелких из-за особенностей добавления и инициализации компонентов в рантайме. К тому же, в последних версиях Unity был ряд фиксов, связанных с загрузкой ассетов, так что, возможно, оно уже того и не стоит.
2.1. Ещё один довольно очевидный совет: не спавните объекты в корень сцены, делайте контейнеры для разных типов объектов, чтобы не создавать хаос в иерархии. Еще такие контейнеры может быть удобно использовать для пулинга, чтобы не менять родителя.
2.2. Используйте Pooling объектов — это позволит меньше дёргать Garbage Collector. В 2021 году Unity представили свои инструменты для пулинга — UnityEngine.Pool. Но если вы используете более старую версию Unity, вам придётся писать свою реализацию пулов или искать библиотеку в Asset Store. В самом простейшем случае пулинга GameObject — это активация/деактивация заранее инстанцированных из префаба в отдельный контейнер объектов.
Хитрость: при инстанцировании префаба для преспавна имеет смысл его предварительно деактивировать, чтобы объекты создавались выключенными и не дёргали внутренние события Unity, вроде OnEnable.
2.3. Animation vs Animator. Animation — это старый анимационный движок, который помечен как legacy, и использовать его уже не рекомендуют, но всё равно в некоторых случаях он остается довольно полезным. Animator — более громоздкая штука, которая имеет внутри себя стейт-машину с кучей ништяков, вроде блендинга и параметров, но долго инициализируется при активации объекта. Отсюда следует правило, что не нужно использовать Animator для простых анимаций — используйте для этого Animation или твины.
Хитрость: допустим, вы сделали AnimationClip для Animation и поняли, что вам этого недостаточно, и нужен Animator. А переделывать клип не хочется. А они несовместимы. Но если переключиться в Inspection в режим Debug, то там будет скрытый параметр legacy, который можно снять и продолжить работать уже в Animator. Вся несовместимость только на уровне скомпилированного клипа — в редакторе форматы клипов идентичны.
3.1. GameObject в сцене грузятся быстрее, чем инстанцируются из префабов. Соответственно, для их уничтожения тоже стоит просто удалить сцену, в то время как для удаления объекта, инстанцированного из префаба, нужно удалить не только инстансы, но и сам префаб, который занимает место в памяти. Это полезно для больших интерфейсных окон, которые существуют в единственном экземпляре, и нет необходимости тратить время и память на предварительную загрузку префаба. Хотя менеджить такие объекты становится сложнее, и чаще всего никто не заморачивается.
Но если вы решили, что хотите грузить объект через сцену, а сцену хотите удалить, тогда в обычном случае объект тоже удалится. Если вы хотите этого избежать, используйте DontDestroyOnLoad. Тогда Unity создаст системную сцену и переместит такие объекты туда, и они не будут удаляться при смене сцен. Работает даже для объектов, созданных в рантайме или инстанцированных из префабов. Полезно, например, для загрузочного экрана, который никогда не удаляется и показывается/скрывается при необходимости.
3.2. Делайте отдельные Canvas для ваших окон. Проблема, с которой столкнулись мы сами: если все держать в одном Canvas, он будет полностью пересчитываться при каждом изменении объектов внутри канваса. Особенно это касается динамического анимированного интерфейса с партиклами.
3.3. CanvasScaler — самый полезный инструмент для работы с интерфейсами, который помогает настроить скейл вашего интерфейса и как он будет себя вести при разных разрешениях и соотношениях сторон экрана. Это особенно актуально при разработке для мобильных платформ, но и для ПК/консолей решит проблему с настройкой отображения интерфейса.
3.4. Если вы хотите управлять альфой нескольких интерфейсных элементов, как единым объектом, используйте CanvasGroup. У него есть своя альфа, есть свои настройки по прокликиванию мыши. Если вы меняете альфу CanvasGroup, меняются и все ее дочерние графические элементы.
3.5. Layout и ContentSizeFitter. Как сделать так, чтобы ваше окно само увеличилось от размера контента? По логике, вы должны просто добавить компонент ContentSizeFitter, и он все сделает сам. Но в Unity это так не работает. Поэтому, если вам нужно, чтобы размер менял внешний объект, то вам нужна именно связка Layout & ContentSizeFitter. Также по непонятным причинам иногда при добавлении или активации объектов внутри Layout размеры могут не пересчитываться. Тогда приходит на выручку Canvas.ForceUpdateCanvases или LayoutRebuilder.ForceRebuildLayoutImmediate — хотя это грязные хаки, которых нужно стараться избегать.
3.6. Анимация интерфейса, Particle System и 3D-модели — это боль, с которой каждый выкручивается, как может.
Canvas существует в системе рендеринга Unity как некий отдельный объект, внутри которого правила рендеринга другие: здесь он происходит последовательно по иерархии объектов, унаследованных от RectTransform. Объекты, унаследованные от обычного Transform, рендерятся по Sorting Layer. Соответственно, Particle System или любой иной Renderer на объекте с Transform тоже рендерится по Sorting Layer. И научить Unity работать с такими объектами между двумя интерфейсными объектами — довольно проблематичная штука.
Плохой способ: можно сделать два Canvas и поместить Particle System между ними. Но это сильно усложнит иерархию окон, особенно если партиклов нужно несколько или нужно их как-то анимировать совместно с другими объектами интерфейса.
Из коробки нет реализации партиклов для интерфейса. Есть несколько ассетов в Asset Store, но нам ни один не понравился. В итоге мы используем свою реализацию рендера частиц на базе стандартной Particle System (она знакома аниматорам) и MaskableGraphic.OnPopulateMesh с возможностью задать частоту перестройки меша. И даже при редкой перестройке такие партиклы достаточно сильно роняют FPS и напрягают GC, так что стараемся не злоупотреблять ими в интерфейсе.
С анимациями проблема в перестройке канваса каждый кадр, так что тут можно только посоветовать размещать сложные анимации в отдельных сабканвасах.
Для рендеринга внутри интерфейса каких-то сложных игровых объектов — например, 3D-моделей или объектов на базе SpriteRenderer — обычно используют RenderTexture. Отдельной камерой рендерят нужные объекты в текстуру, а её уже используют как источник в RawImage — аналоге Image, рендерящем не спрайты, но текстуры.
В общем, всё это дорого, и лучше стараться этого избегать. Но если очень хочется, то вы теперь знаете, куда копать.
4.1. Не используйте GameObject.Find, FindWithTag и т.д. GameObject.Find занимается тем, что ищет по неким заданным параметрам объекты, которые сейчас есть на сцене. В том числе он может искать среди отключенных объектов, так что это очень долго. Делайте свои кеши объектов по необходимости. Единственное, где GameObject.Find хоть как-то оправдан — редакторские скрипты, где вам не важна скорость работы.
4.2. Забудьте про Invoke и SendMessage у MonoBehaviour. Все это очень медленно и не очень отлажено.
4.3. Не используйте GetComponent в Update. GetComponent — штука дорогая, поэтому лучше кешируйте все необходимые компоненты заранее. Причем в идеале лучше даже кешировать их не на этапе загрузки, а сериализовывать в сам префаб.
4.5. Не двигайте Rigidbody в Update, не двигайте Transform в FixedUpdate. Все равно физика будет обрабатываться в FixedUpdate, а трансформы — в Update. Изменение скорости, применение сил — всё это нужно делать в FixedUpdate.
4.6. Не конкатенируйте строки в Update. Не будите GC, пусть спит. Если вам это нужно для таймера — отсчитывайте секунду и меняйте, не чаще.
4.7. Не доверяйте OnDestroy/OnTriggerExit. Очень неочевидная штука: они попросту могут не вызываться в некоторых случаях. Например, если ваш объект сначала скрыт, а потом удален — тогда OnDestroy и OnTriggerExit не вызовутся. Тут придётся писать (или найти в Интернете) своё решение этой проблемы.
4.8. Используйте «мягкие» ссылки на ассеты (AssetReference или свои аналог). Это тоже одна из главных проблем Unity для крупных проектов. Ведь если вы сошлётесь прямой ссылкой на какой-то префаб или ассет, он потянет за собой все, на что ссылается он. Идея в том, чтобы максимально отдалить момент загрузки при указании ссылки на ассет. Жёсткие ссылки стоит использовать только для указания частей префаба или в качестве исключения для ссылок на ассеты с полным пониманием, к чему это приведёт. Например, это может привести к дублированию ассетов в бандлах.
4.9. Используйте асинхронную загрузку ассетов, если это возможно. Такое размазывание загрузки положительно скажется на плавности вашей игры, открытии интерфейсов, особенно с большими списками. При этом асинхронная загрузка не исключает предзагрузку по необходимости.
4.10. SerializeReference — сравнительно новая система, позволяющая сериализовать данные любых классов по интерфейсу или базовому классу. В Unity долгое время ничего такого не было, кроме кастомной сериализации в префабах. Но есть ряд проблем, которые для некоторых являются блокером для использования этой системы.
Наименьшая проблема: там есть только API, редакторы таких данных нужно писать самостоятельно, хотя на GitHub и в Asset Store есть бесплатные реализации. В целом там ничего сложного нет, редактор пишется за вечер.
Другая проблема, что существует только ссылка на запись: вы можете записать что-то в объект, но читать в редакторском скрипте вы его не сможете. Нужно находить способы это обходить.
Далее идёт проблема с тем, как Unity сериализуют такие данные: всё хранится в одном массиве в конце файла ассета. Индексы могут неконтролируемо меняться, что в дальнейшем может привести к проблеме с мержем таких ассетов.
И последнее: атрибут переименования полей FormerlySerializeAs до сих пор не работает с SerializeReference, а переименование самого класса, сериализованного таким способом, приведёт к исключению при десериализации и невозможности как-то редактировать такой ассет. В остальном система очень удобная и гибкая, и я бы не отказывался от неё — лучше пинать Unity в сторону её улучшения.
4.11. Используйте Non-Allocate версии API. Раньше в Unity было много проблем с аллокациями при вызове стандартных методов движка. В какой-то момент они реализовали методы-саттелиты, не выделяющие память для своей работы. Вам самим придётся позаботится об этом, создав необходимые кеши. Но оно того стоит.
4.12. [Conditional(“define”)] полезен для отключения методов. Мы так отключаем логи.
4.13. В Unity не всё может являться тем, чем кажется. Например, Particle System разбита на модули, и геттеры модулей возвращают структуру, которую можно редактировать для изменения модуля, но нельзя сеттить. Выглядит это примерно так:
В этот момент IDE может немного взбунтоваться. Анализаторы кода предлагают удалить код с неиспользуемой структурой, но всё хорошо, в Unity так можно.
4.14. Используйте Dependency Injection. Как минимум, разберитесь с Zenject — его используют с Unity чаще всего, но можете поискать альтернативные варианты или даже написать свою реализацию, сути это не меняет.
4.15. Unity активно развивается — постоянно добавляются различные крутые штуки. Традиционно на старте всё это очень забагованное, неудобное или просто бессмысленное, но стоит за всем этим следить и присматривать на будущее полезные для вашей работы инструменты, например:
- Memory Profiler;
- Новая Input System — очень удобна для настройки под разные девайсы;
- Render Pipeline — позволяет довольно глубоко нырнуть в рендеринг и перестроить под себя и оптимизировать его;
- Burst, Jobs, и т. д.
Инструменты и возможности их написания в Unity — одно из главных преимуществ движка по сравнению с тем же Unreal Engine. Но кастомные редакторы не всегда быстро работают, поэтому не стоит злоупотреблять большими списками сложных данных, сложных контролов в Inspector и т.д.
Самый популярный инструмент для работы с редакторами — Odin Inspector. Он сильно упрощает жизнь, но использует те же инструменты Unity для работы с редакторами, поэтому на больших данных работает также очень медленно.
Editor — кастомное окно, где можно производить рендеринг от простых элементов интерфейса до более сложных контролов. Пример окна редактора:
А это пример редактора диалогов:
Есть готовые библиотеки для быстрого создания специализированных редакторов. Например, xNode позволяет создавать редакторы на базе нод.
Helpers Property — для форматирования в инспекторе, создания контекстных меню и прочего.
Пример меню для создания ScriptableObject в одну строчку:
[CreateAssetMenu(menuName = "Gameplay/GameEvents/Game Event", fileName = "gameEvent.asset")] public class GameEventConfig : ConfigBase < // . >// . public class ConfigBase : ScriptableObject < /* . */ >
Также стоит присмотреться к HideInInspector, Header, Space, Min, Area, ContextMenu, ExecuteInEditMode, RequireComponent, RuntimeInitializeOnLoadMethod и т. д.
PropertyDrawer — для написания своих атрибутов и их кастомного рендера.
Пример рисования строкового поля для ключа локализации с кнопкой копирования и просмотром локализации:
На этом я заканчиваю свой материал, но напоследок хочу оставить пару ссылок, которые дадут еще больше информации по теме:
А также можно ознакомиться со списком вакансий в нашей студии: делай игры с нами, делай игры, как мы, делай игры лучше нас.
Ещё один довольно очевидный совет: не спавните объекты в корень сцены, делаите контеинеры для разных типов объектов, чтобы не создавать хаос в иерархии. Еще такие контейнеры может быть удобно использовать для пулинга, чтобы не менять родителя.
Не очевидный, т. к. слишком большая вложенность и иерархия объектов бьёт по перфомансу (:
Но если вы используете более старую версию Unity, вам придётся писать свою реализацию пулов или искать библиотеку в Asset Store.
Если Zenject используется, то можно ещё оттуда пулы взять.
Делаите отдельные Canvas для ваших окон. Проблема, с которой столкнулись мы сами: если все держать в одном Canvas, он будет полностью пересчитываться при каждом изменении объектов внутри канваса. Особенно это касается динамического анимированного интерфейса с партиклами.
И не только с этим могут быть проблемы. У нас был неприятный баг, когда вся гуятина тупо пропадала в какой-то момент, т. к. много всего в одном кенвасе было. Разнесли по нескольким, проблема исчезла.
Используйте Dependency Injection. Как минимум, разберитесь с Zenject — его используют с Unity чаще всего, но можете поискать альтернативные варианты или даже написать свою реализацию, сути это не меняет.
На относительно крупных проекты с этим могут быть проблемы. В итоге минусов становится больше, чем плюсов. Нужно с осторожностью втаскивать в проект.
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. Unity Scripting API для дополнительной информации.
Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент Rigidbody к объекту GameObject — он начнет падать, добавите компонент Light — GameObject начнет излучать свет. Все остальное также подчиняется этой простой логике.
При этом система компонентов создана на основе объектно-ориентированной платформы, что создает сложности для разработчиков при работе с кэшем и памятью развивающегося оборудования.
Для решения этих проблем мы начали перерабатывать базовые системы Unity на основе высокопроизводительного, многопоточного стека информационно-ориентированных технологий или DOTS (в настоящее время в статусе предварительной версии).
DOTS позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:
ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом можно узнать из статьи «О DOTS: Entity Component System».
Многопоточные системы DOTS помогают создавать игры для самых разных устройств и разрабатывать богатые игровые миры с большим числом элементов и сложными симуляциями. Производительный код, в свою очередь, снижает тепловыделение и продлевает время автономной работы мобильных устройств. Переход от объектно-ориентированного к информационно-ориентированному подходу упрощает вам многократное использование кода, а другим позволяет легче понять и дополнить его при необходимости.
Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.
Настройка и отладка в Unity эффективна, потому что все переменные игрового процесса отображаются непосредственно в процессе игры, что позволяет менять их на лету без дополнительного программирования. Игру можно приостановить в любой момент или переходить от одного оператора к другому по очереди.
Вот несколько полезных ресурсов по оптимизации в Unity:
Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)
Инструменты Unity помогают программистам любого уровня создавать увлекательные и высокопроизводительные интерактивные приложения для более чем 20 платформ.
10% программистов по всему миру используют Unity
Более 50% игр созданы на базе Unity
Профессия разработчика Unity занимает седьмое место по росту востребованности
5. MonoDevelop
MonoDevelop is free to be downloaded and used by all but it has been deprecated since 2018.
Features:
- It supports Windows and Mac OS
- It is no longer supported
2. Project Rider
Project Rider is also similar to the VS Code in terms of it being a cross-platform.
Although it has a trial version but the developer didn’t make free to you. Students are allowed to use it without obtaining commercially.
Features:
12. SharpDevelop
Features:
4. Atom
Choosing Atom as an IDE for Unity means you have chosen an IDE that is easy to install and simple to use. Its execution is rapid.
Features:
- It is a Cross-platform IDE: Windows, Mac OS, and Linux
- It is highly customizable
- It comes with a package manager and an extensive list of packages
3. Visual Studio
Visual Studio is known as one of the most feature-rich IDEs around us today. This IDE is developed by Microsoft.
Features:
- It runs on Windows and Mac OS
- It supports languages like C, Java, Ruby, and Python
- Cloud storage
- Git integration
9. VSCodium
VSCodium is simply an open-source version of the Virtual Studio Code without telemetry. It is also exactly the same as VS Code but there is a difference in the fact that it doesn’t track users’ usage data.
Features:
- It is just a clone of the famous Visual Studio Code editor developed by Microsoft
- Git Integration
- Cross-platform
- IntelliSense and smart code completion
3 Answers 3
Updated 02/08/2022
В чем преимущества Unity?
Ускоряйте работу, используя удобную для вас интегрированную среду разработки
Воспользуйтесь инструментами для повышения производительности в интегрированных средах разработки, например Visual Studio или Rider. Пишите код и выполняйте его отладку, чтобы совершенствовать свой проект или редактор Unity, проводите аналитику качества и производительности и многое другое.
Достигайте большего, используя редактор Unity
Помогайте дизайнерам и художникам творить в Unity. Ускорьте выполнение рутинных операций (таких как изменение значений или интеграция ассетов) и расширьте редактор в соответствии с вашими потребностями.
Улучшайте качество кода
Выявляйте проблемы и оптимизируйте код, используя профилировщики и инструменты Unity для тестирования. Backtrace для Unity позволяет автоматически отслеживать ошибки и сбои на каждой платформе. С легкостью выпускайте обновления с помощью облачной системы доставки контента.
«Система Addressable Asset System от Unity очень нам помогла. Она оперативно устранила проблемы с памятью. Без этого мы не смогли бы так быстро создать игру для платформы Switch», — Макс Макгуайр (Max McGuire), технический директор Unknown Worlds
Платформа Unity предлагает множество инструментов, которые помогают управлять кодами и ассетами проектов для достижения максимальной производительности. Например, пакет Addressables снижает ресурсоемкость системы управления ассетами и упрощает создание и развертывание контента. Объекты ScriptableObjects идеально подходят для проектов, в которых нужно управлять большими объемами данных, меняющихся в ходе разработки.
«Plastic открыла ранее недоступный нам уровень детального контроля веток. Она легко поддается парсингу, удобна в работе с проектами и не нарушает их структуру», — Салим Даббуа, директор студии KO_OP
Plastic SCM — это лучшая система контроля версий для разработчиков Unity, которая великолепно подходит для обработки крупных двоичных файлов и создания быстрых рабочих процессов. Кроме того, в системе есть упрощенный интерфейс для участников команды, которые не занимаются программированием. Редактор также интегрируется с Perforce или вы можете выбрать любое другое решение, например Git.
«Благодаря Unity наши художники больше не так сильно зависят от программистов. Когда мы использовали предыдущий движок, программистам приходилось проводить большую часть работ по интеграции визуальных элементов. Теперь же у художников появилось значительно больше возможностей. Я заметила, что просьб передвинуть два пикселя влево или сделать что-то в этом духе стало намного меньше», — Катрин Барбо (Catherine Barbeau), технический директор Ludia
Возможности Unity не ограничиваются управлением значениями и ассетами через код. Программист с легкостью может настроить интерфейс редактора так, чтобы художники и дизайнеры могли менять игровой процесс и создавать сцены с помощью движка. Теперь, если дизайнер хочет что-то изменить, он может просто убрать флажок, а не просить вас полностью переписать код.
«Для Arena of Valor нам требовалась поддержка многочисленных конфигураций оборудования в различных странах, и Unity облегчает задачу получения ожидаемой нами постоянной производительности», — Мэллоу Ю (Mellow Yue), технический директор Tencent Games.
Unity поддерживает тесные партнерские отношения со всеми основными платформами. Вы можете добиться максимальной производительности от каждого из 20+ доступных вариантов развертывания, не переживая о совместимости с новыми устройствами. Система ввода Unity позволяет настраивать элементы управления в одном месте, для всех платформ и устройств без дополнительных инструментов.
Вы создаете отличные игры, а Unity делает их работу быстрой и стабильной. Редактор Unity содержит профилировщики и инструменты для оптимизации. Они помогут максимально эффективно использовать ресурсы на вашей целевой платформе.
Инструмент Unity Profiler предоставляет данные о производительности приложения, а профайлер памяти позволяет снизить потребление памяти. Инструмент Unity Test Framework позволяет создавать автоматические тесты, чтобы убедиться, что код работает должным образом. Инструмент Backtrace избавляет от рутинной работы по обработке аварийных завершений и исключений кроссплатформенных приложений, позволяя сосредоточиться на выпуске игры.
Читайте также: