Каковы плюсы и минусы Unity3D в качестве выбора для создания игр? [закрыто]

64

Мы делаем наш школьный проект с Unity3d, так как они использовали Shiva в прошлом году (что мне кажется ужасным), и я хотел узнать вашу точку зрения на этот инструмент.

Плюсы:

  • мультиплатформенность, я даже слышал, что Google собирается реализовать это в Chrome
  • все что вам нужно здесь
  • языки сценариев делают его хорошим выбором для людей, которые не являются гуру программирования

Минусы:

  • мультиплеер?
  • собственность, вы полностью зависимы от единства и его предела и не можете его расширить
  • это меньше "создание игры с нуля"
  • C ++ был бы крутой вещью

Я действительно думаю, что этот вид инструмента интересен, но стоит ли его использовать в школе для проекта, в котором участвуют более 3 программистов? Что мы действительно изучаем в терминах программирования, используя такой инструмент (я в порядке с python и js, но я ненавижу C #)? Вместо этого мы могли бы использовать Ogre, даже если бы мы изучали прямой х, начиная с января ...

jokoon
источник
Еще один мошенник - вам нужно быть знакомым с 3D-моделированием / дизайном, но еще раз взгляните на сайт, и это не так ... поскольку возможны 2D-игры
Johnny Quest
1
@Johnny Quest Не совсем то, для чего он предназначен, может сделать его неудобным в использовании.
Призраки
7
«C ++ был бы крутой вещью» - серьезно, что? Писать на C ++ сейчас круто? Лично я ненавижу язык (все печатание, Python полностью: p), но это, безусловно, отличная языковая функция и библиотека.
Коммунистическая утка
1
Unity - удивительный движок, но ... Есть несколько минусов, о которых следует знать: 1) Unity имеет тенденцию быть чем-то вроде памяти. Это занимает больше памяти, чем вы думаете; вероятно из-за кеширования таких вещей, как текстуры. Это может вызвать проблемы отладки и даже ошибки OOM на мобильных устройствах. 2) Проблемы с производительностью могут быть трудно найти, устранить и устранить, так как вы имеете дело с черным ящиком (без исходного кода). Внимательно изучите свои шейдеры и посмотрите, как вы управляете сценой.
milkplus
2
@milkplus: вот почему я думаю, что единство - это не то, с чем студент должен учиться. Например: я могу учить студентов программированию, поначалу обучая их питону, но в тот или иной момент вы должны научить их тому, как работает материал уровня, даже основам. Люди должны использовать инструмент, когда они знают все о том, что делает этот инструмент. Если нет, то это катастрофа, ожидающая случиться. Вы не всегда можете оправдать цитату Кнута чем-то таким сложным, как единство.
Jokoon

Ответы:

66

Основным «профи» Uinty3D является то, что он быстро сходит с ума. Я говорю не о производительности, а о скорости разработки. У вас есть:

  • Единый ресурсный трубопровод. Нет необходимости тратить время на подсистему ресурсов, не нужно глючить процедуры импорта для записи и исправления: просто поместите файл в папку, и это работает.
  • Интегрированный редактор уровней. Не нужно тратить время на инструменты уровня: просто перейдите прямо к делу.
  • Отличная поддержка настройки и отладки: все ваши игровые переменные отображаются прямо во время игры и могут быть изменены на лету - и все это без написания ни единой строчки кода. Приостановите игру в любое время или выполните пошаговые инструкции по коду.
  • Довольно обширная библиотека готовых компонентов. Рендеринг, звук, физика, управление - много «стандартного» кода уже написано.
  • Mono как сценарий хоста. В то время как можно спорить о достоинствах C # как языка, библиотека базовых классов Mono предлагает множество функций. Коллекции, ввод / вывод, многопоточность и безумно выразительный LINQ значительно ускоряют разработку.

Кроме того, Unity3d действительно хорош на нескольких платформах. Конечно, вы не можете создать, скажем, игру Windows .exe, а затем волшебно заставить ее «просто работать» на iPhone; но Unity довольно близко подходит к этому. То, что требуется, это «настроить» больше, чем «портировать».

Конечно, в некоторых случаях Unity3D не идеален. Сетевой многопользовательский режим, интегрированный в Unity, подходит для одноранговой игры в локальной сети, но все, что требует центрального сервера, в значительной степени требует написания всего сетевого кода с нуля. Система графического интерфейса Unity довольно причудливая и медленная, поэтому создание сложных внутриигровых графических интерфейсов является проблемой. Тем не менее, все другие игровые графические системы, которые я видел, тоже болезненны, так что в целом система Unity не так уж и плоха.

И, конечно, Unity3D немного менее гибок, чем «игровые движки», такие как OGRE, которые предлагают только библиотеку / исходный код. Его производительность не совсем превосходна, и, поскольку у вас есть только песочница для сценариев, вы не можете использовать некоторые умные низкоуровневые хаки для ее улучшения. Например, если встроенный рендерер дерева Unity по какой-то причине не удовлетворяет вас, вы не можете написать свой собственный (ну, вы могли бы, но он работал бы через сценарии и, скорее всего, был бы слишком медленным и слишком хлопотным). ). Тем не менее, с Unity можно делать практически все, если вы не против потерять производительность.

Самым большим «мошенничеством» в Unity3D является управление исходным кодом. Как уже упоминалось, собственный сервер активов Unity стоит довольно копейки. И это отстой, действительно, очень тяжело. У него даже нет ветвления. Хотя Unity3D теоретически поддерживает сторонние системы SCM, их использование также сопряжено с опасностью. Я видел, что настройки импорта «магическим образом» меняются после SVN-коммита, или параметры всех объектов исчезают после использования Perforce. Все это можно обойти, но в любом случае Unity3D + Source control = боль.

Итак, чтобы на самом деле ответить на ваш вопрос. Я считаю, что Unity3D - один из лучших, если не самый лучший, игровой движок для «маленькой» игры. Особенно в стадии прототипа.

Тем не менее, если мы говорим об образовательном проекте, я рекомендую против этого. Чтобы узнать, как работают игры, лучше написать игру на как можно более низком уровне. Игровые движки - отличный инструмент; но чтобы использовать его для максимальной выгоды, необходимо понимать, как они работают и почему они работают таким образом. И лучший способ научиться этому - написать собственный игровой движок, даже если в итоге он окажется дрянным.

Неважно
источник
3
я процитирую: «Унифицированный конвейер ресурсов. Не нужно тратить время на подсистему ресурсов вообще, не нужно глючить процедуры импорта, чтобы писать и исправлять: просто поместите файл в папку, и это работает».
nkint
7
и "Самым большим" доводом "Unity3D, однако, является контроль источников".
nkint
2
и «Тем не менее, если мы говорим об образовательном проекте, я рекомендую против этого».
nkint
О твоей проблеме "три поколения". Я думаю, что особенно в C #, вы можете написать ген дерева C ++, поместить его в .dll и рассматривать как управляемый c ++. Таким образом, вы можете теоретически получить доступ к своим собственным «исправлениям движка» в единстве.
daemonfire300
Я признаю, что система Unity GUI 2.0 - это не что иное, как система «визуализация прямоугольника с текстом», но она очень легко расширяема. Посмотрите @AffinityUI или другие проекты Unity UI, которые очень легкие, с открытым исходным кодом и стоят UI-системы.
daemonfire300
28

Я начну с комментирования вашего списка:

  • Сценарии - это не просто преимущество для непрограммистов. Быть (хорошим) программистом - это не просто знание языка, это умение разбирать проблемы и мыслить особым образом. Языки сценариев могут позволить программисту использовать эти навыки критического мышления высшего порядка для получения более мощных и интересных результатов за меньшее время, чем ему или ей, возможно, потребуется для получения эквивалентных результатов, а также беспокоиться о деталях более низкого уровня, чем некоторые языки (C ++) приходит в голову) сила в картину.

  • Многопользовательская поддержка (или ее отсутствие) является проблемой, так или иначе, только если она нужна вашему проекту.

  • Я не вижу, как "собственность" является мошенничеством. Если это школьный проект, вы, вероятно, не захотите тратить время на хакерство по поводу источника используемой вами платформы или чего-либо еще. Кроме того, DirectX тоже проприетарный.

  • Нет ничего плохого в использовании высокоуровневых фреймворков или инструментов, таких как Unity. «Создание игры с нуля» - это не достижение - что именно вы считаете «с нуля»? Вы по-прежнему будете использовать чужой графический API. Чья-то другая среда выполнения (даже C требует библиотеку времени выполнения). «Создание игры» - это то, что вызывает уважение, а не «создание игры без использования каких-либо полезных инструментов».

  • C ++, будучи «классной» вещью, немного субъективен. Этот язык очень часто используется профессионалами отрасли, но, вероятно, не по тем причинам, о которых вы думаете. Как язык, он начинает показывать свой возраст и может быть чрезвычайно громоздким по сравнению с более современными вариантами. В любом случае языки - это всего лишь инструменты, и хороший программист должен уметь выбирать новые с относительной легкостью.

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

Недостатком является то, что вы потенциально тратите время на изучение конкретного инструмента, который включает в себя знания, которые могут не передаваться, особенно если вы решаете, что рабочий процесс и среда Unity не для вас, и вы никогда не захотите использовать его снова , Кроме того, Unity не имеет наиболее очевидного 2D- процесса - он очень сосредоточен на 3D-играх, которые, как правило, связаны с чрезмерными затратами в художественных активах. Но я думаю, что для школьного проекта, который вы описываете, Unity - довольно хороший выбор.

Джош
источник
13
я процитирую «Создание игры» - это то, что вызывает уважение, а не «создание игры без использования каких-либо полезных инструментов».
nkint
2
«Нет ничего плохого в использовании высокоуровневых фреймворков или инструментов, таких как Unity.« Создание игры с нуля »- это не достижение - что именно вы считаете« с нуля »? В этом нет абсолютно ничего плохого, но приходит к Имейте в виду, что люди, которые создают новые технологии, переходят на как можно более низкий уровень, например Uncharted 2 даже использовали собственный модифицированный графический API-интерфейс
concept3d
1
Любой разработчик, желающий быть на переднем крае компьютерной графики, должен сосредоточиться на самом низком уровне и создать собственный движок для своей игры; но это примерно 1% от всех разработчиков игр. Если бы компания создавала игру, такую ​​же продвинутую, как Uncharted 1, в то время, когда выходила Uncharted 3, она, вероятно, могла бы использовать какую-то существующую среду (не обязательно Unity). Вопрос в том, создаешь ли ты Uncharted 4?
Katana314
9

Одной из основных проблем с Unity является контроль версий. Если вы не работаете в команде, это не будет иметь большого значения (возможно), но, скорее всего, это не так.

Вы можете использовать Unity Asset Server, но для этого требуется 1) Unity Pro (1500 долларов США) и 2) Лицензия на сервер активов для каждого рабочего места (500 долларов США). Я предполагаю, что вы можете получить какую-то образовательную скидку, но это не бесплатно.

Кроме того, вы можете использовать что-то вроде SVN с Unity. Для правильной поддержки вам все еще нужен Unity Pro.

Вы не можете просто проверить непрофессиональную версию Unity в SVN и ожидать, что она будет работать безупречно. Их механизм привязки GUID к активам и т. Д. Не совсем безопасен для SCM.


Многопользовательская функциональность довольно приличная, хотя, если честно, я не поставлял игру с ней. Теоретически вы просто прикрепляете сетевые представления к вещам и сообщаете им, что вы хотите сериализовать для правильной настройки репликации. Оттуда работает пользовательский интерфейс для подключения к другим узлам и настройки. Хотя в основном это одноранговая сеть. Возможно, вам удастся выполнить клиент-серверное программирование, запустив единое целое в безголовом режиме, но я с этим не сталкивался. Но просто заставить человека А бегать по экрану человека Б довольно легко и быстро.

Также C # является положительным, насколько я понимаю. LINQ супер выразителен. Он имеет надлежащую обработку исключений и сборку мусора. Он имеет гораздо более современные парадигмы, такие как делегаты, лямбды, интерфейсы и лучшую общую поддержку, чем C ++. ( Правка : это, очевидно, противоречиво. Я хочу сказать, что C # вряд ли плохой язык. Я не хочу вдаваться в долгие дебаты о плюсах и минусах языка по сравнению с C ++.)

Однако самым большим плюсом использования Unity является, вероятно, художественный конвейер. Вы можете взять в папку файл PSD или Max (при условии, что у вас установлен 3ds max), и он будет импортирован.

тетрада
источник
3
@DeadMG, да, очень хорошо на самом деле. Да, я знаю о бусте, метапрограммировании шаблонов и т. Д. Но я считаю, что C # - более современный язык.
Тетрад
3
@DeadMG Я думаю, дело в том, что C # чрезвычайно плавный для многих вариантов использования, и C ++ оставляет желать лучшего. Не то, чтобы C ++ не мог делать такие вещи.
Nate
3
Единственной вещью в его списке, с которой я мог бы не согласиться, была «лучшая общая поддержка, чем C ++».
Kylotan
1
@Kylotan "for (vector <vector <int >> :: iterator iterator = scores.begin (); iterator! = Scores.end (); iterator ++) {" VS "foreach (переменная оценка в оценках)" .. Да, я с C #.
Katana314
3
@ Katana314 Конечно, в C ++ for ( auto x : xs ).
Эрик
6

Обновление: теперь Unity предоставляет все эти функции даже в бесплатной версии, поэтому не обращайте внимания на ответ ниже.


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

Михаил Юнкин
источник
1
Это больше не является точным и должно быть обновлено или удалено.
MichaelHouse
@ Byte56 Спасибо. В будущем вы сможете самостоятельно обновлять старые сообщения, не оставляя комментариев.
Михаил Юнкин,
Я отвечал на флаг, чтобы удалить этот ответ, и я не предлагал вам обновить его, чтобы сказать, что он больше не точен. Я предлагал вам обновить его, чтобы он был точным, или удалите его. Этот ответ в настоящее время не отвечает за и против Unity 3D как выбор. Я уверен, что вы можете найти способ сохранить его, хотя. (Вы можете обновить его, чтобы включить все функции, которые теперь предоставляет Unity, и те, которые они не предоставляют бесплатно).
MichaelHouse
3

Ответ Nevermind охватывает вещи довольно тщательно, но просто для того, чтобы обратить внимание на сторону управления исходным кодом, на самом деле, это не так страшно, как только вы научитесь следить за кучкой ошибок:

  • Во-первых, да, Asset Server стоит дорого и довольно ужасен для всех, кроме базового использования. Это главное преимущество - интеграция в Unity, и хотя это полезно для простоты использования и стоит того, чтобы работать с более простыми проектами, для чего-то большего (например, проекты с бюджетом для AS) оно просто недостаточно гибкое.
  • Переходя к внешнему управлению версиями, важно понимать, что метафайлы должны обрабатываться как любой другой ресурс и всегда добавляться / обновляться в управлении версиями. Несоблюдение этого правила, скорее всего, произошло в сценарии исчезновения настроек Nevermind.
  • Наконец, работая с любой системой управления версиями в Unity (включая Asset Server), командная коммуникация становится необходимой при работе с бинарными активами, чтобы не мешать работе друг друга.

Если вы хотите получить более подробную информацию по этим вопросам, я недавно опубликовал статью об использовании git с Unity на основе своего опыта в некоторых довольно крупных проектах Unity: http://goo.gl/ivJVR

FlintZA
источник
Хорошо, вау, извини некропост. Я только заметил, что это спросили (и ответили) в 2011 году! Я добавил к нему , потому что он появился в новостях письме stackexchange Gamedev на этой неделе .
FlintZA
Нет такой вещи как "некро" на SE. Показательный пример, мой комментарий. : P
Cypher
2

Фактически. Мультиплеер поддерживается. Это просто вопрос выбора сервера, на котором вы хотите запустить свою игру.

Самый популярный на рынке сейчас - «Сервер SmartFox», они предлагают несколько разных пакетов, все из которых являются бесплатными (в некоторой степени). Это бесплатно, только если вы планируете иметь определенное количество игроков, так как каждый пакет позволяет определенное количество игроков "бесплатно".

Если вы решили обновить, цена довольно крутая для инди-разработчика. Итак ... В конечном итоге, если на вашем сервере много игроков, вам придется платить за свою игру, а не загружать ее на такие сайты, как Download.com, в качестве бесплатной полной игры. Для некоторых это может и не быть проблемой, но большинство из нас не может позволить себе $ 2500 из своего кармана для сервера.

Например - SmartFox pro позволяет бесплатно 20 игроков. Если вы хотите обновить его, это будет стоить вам 500 евро, что немного больше в США, около 600-700, и это позволяет на 100 подключений.

Следующее обновление для максимального количества игроков 500, и это 1000 евро, но ... Вы не должны платить 1000, вы платите разницу.

Таким образом, вам придется заплатить всего на 500 евро больше, чем целых 1000. Последнее обновление поддерживает неограниченное количество подключений, за 2000 евро. Это почти 3000 долларов США.

Таким образом, если вы обновляете 500 подключений, вы платите 1000 евро, если вы обновляете 100 подключений, вы платите 1500 евро и, конечно же, 2000 евро, чтобы перейти на бесплатное обновление.

Кроме того, этот сервер очень прост в настройке с Unity, и есть множество обучающих видео о том, как сделать это именно на Youtube.

Ambo100
источник
Я много работал с SmartFox Server с 2005 года, и это действительно здорово. Очень стабильный и зрелый.
PippoApps.com