Подтвердить что ты не робот

Жизнеспособность С#/.NET как новой стандартной игровой платформы dev?

Долгое время С++ был доминирующим языком разработки игр. Доступны многие 3D-модели AAA для любого бюджета.

Мой вопрос: с ростом XNA, С# и .NET Framework были расположены достаточно хорошо, чтобы взять на себя новую стандартную платформу разработки игр? Очевидно, что присущая кросс-платформенному характеру инфраструктура XNA (Windows, Xbox, Zune) имеет свои преимущества, но являются ли эти выгоды достаточно хорошими, чтобы соблазнить большие игровые студии для переключения передач?

Лично я разрывается между использованием С#/XNA для нового проекта и использованием Java через jMonkeyEngine. У меня есть большое желание, чтобы моя игра была переносимой на несколько платформ, и единственные языки, которые я знаю достаточно хорошо, чтобы выполнить это, - это С# и Java. я бы хотел увидеть реализацию XNA-кода, основанного на OpenGL, и будет работать на Mono, но я думаю, что это просто принятие желаемого за действительное на данный момент.

Мне любопытно узнать, что другие испытали при создании 3D-игр в чем-то отличном от С++.

4b9b3361

Ответ 1

Крупные игровые студии, вероятно, не примут XNA в ближайшее время. Некоторые инди используют его, но, безусловно, потенциально могут быть очень успешными и оставить С++ позади.

XNA предоставляет множество классов, которые вы можете использовать в разработке игр, но многие другие часто предпочитают использовать полноценный игровой движок. Хотя XNA неплохо для новичка, чтобы нарезать зубы, если вы новичок в программировании игр.

С# - хороший язык для разработки игр. Разработка игр создает приложения, требующие звуковой, расширенной графики, AI, физики и т.д. Все это требует мощной и довольно быстрой языковой среды. Хотя большинство ПК и консольных игр верхнего уровня написаны на С++, у С# есть дорожная карта, которая, скорее всего, оставит С++. Ближайшие изменения в С++ 0x, без сомнения, оживят С++ на некоторое время, но С# выглядит уверенным, чтобы догнать его.

Если вы действительно хотите стать разработчиком игр, я бы настоятельно рекомендовал вам по крайней мере научиться С++ и написать свой собственный игровой движок. Использование готового игрового движка легко, и вы можете закодировать что-то, что "хорошо", но вы столкнетесь со многими ограничениями, которые вы не сможете кодировать. Вы будете эффективно ограничены возможностями игрового движка (если у вас нет доступа к источнику, который вы затем можете изменить по своему вкусу).

Изучите С++ и желательно OpenGL:) Как только вы узнаете OpenGL, вы можете легко освоить DirectX.

С# - кусок торта, как только вы знаете С++.

Ответ 2

Я думаю, что С++ выйдет из моды в ближайшие 10 лет точно так же, как сборка. Я профессиональный программист на протяжении более 15 лет. В начале 90-х многие говорили, что C недостаточно эффективен для игр. В конце 90-х люди говорили, что C в порядке, но С++ слишком медленный для приложений с критическими характеристиками, таких как игры. Теперь С++ является стандартным высокопроизводительным языком, и люди утверждают, что другие языки будут слишком медленными. Тем временем в сегодняшних играх используются языки script, такие как Lua, Python или Unrealscript для игровой логики, которые в десять раз медленнее С# или Java.

С++ намного быстрее, когда вы делаете математику в своей игре. Выполнение линейной алгебры болезненно медленное в С# или Java. Однако это только часть (10 - 25%) игры. Когда дело доходит до узкого места в логической игре, это доступ к памяти, поэтому использование другого языка не значительно снижает производительность. Инструментальная сторона игры, которая используется для 50-80% кода, действительно не требует С++. Он успешно работает на С#, который достаточно быстро подходит практически для любого инструмента.

Нельзя также забывать, что С++ является производным от C, созданного в начале 70-х. Таким образом, С++ устарел во многих отношениях. Самая неприятная вещь, вероятно, является предварительным процессором, который убивает прозрачность и вызывает безумно длинное время компиляции. Средний игровой движок С++ для современного искусства составляет 30-60 минут. За это время вы можете скомпилировать каждый проект С# и Java, когда-либо созданный людьми. Недостаток самоанализа и создание динамического кода также является недостатком. Это часто требует больших затрат времени на преодоление этих недостатков.

Тем не менее разработка на С++ стоит дорого, но для игровой студии рискнет неудача, переключившись на новую технологию, которая еще не доказана в разработке игр. Также важным фактором является то, что большинство опытных программистов используют только C/С++, и у них нет опыта работы с другими языками, что, безусловно, увеличивает риск переключения. Из-за этого вы, вероятно, не увидите игровых студий в ближайшие пару лет, перейдя на С#. Тем не менее, вполне вероятно, что студия, принадлежащая Microsoft, сделает большой удар с игрой С# в течение следующих 5 лет, которая убедит другие студии, что возможно сделать названия AAA на С#, а затем вы увидите все больше и больше студий, переключающихся на С#.

На данный момент, мой совет: Если вы хотите создать многоплатформенное название AAA, у вас нет другого выбора, кроме С++ для части выполнения во время выполнения. Рассмотрите возможность использования С# для инструмента. Это немного сложно для эффективного подключения управляемого и неуправляемого кода, но в долгосрочной перспективе стоит усилий, которые вы тратите на него. Если вы выполняете проект хобби или название B, где производительность менее важна, чем стоимость разработки/время, то забудьте С++ и просто используйте С# для всего и потратите дополнительное время на оптимизацию математики.

Ответ 3

Хотя некоторое время назад было объявлено XNA Professional, Microsoft теперь, похоже, сосредоточена на выпуске Express (хотя она потеряла "Экспресс" в названии), и это, похоже, нацелено на рынок любителей, а не на коммерческий рынок. Помимо всего прочего, это в значительной степени приносит пользу сообществу XBox 360, поскольку теперь они позволяют разработчикам хобби разрабатывать свои игры для Windows и XBox 360, а затем продавать свои игры в сети XBox, и это хорошо.

Мне бы очень хотелось увидеть, как XNA набирает обороты в профессиональном мире, но этого не произойдет, если он не будет доступен для других основных игровых платформ (PS3 и Wii). Проблема заключается не только в инфраструктуре XNA/API, но и в требованиях к языку/структуре, поэтому вы даже не можете писать игру на С#, а затем использовать XNA на платформах Microsoft и OpenGL на других платформах.

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

Edit:

Если ваш вопрос на самом деле "должен ли я использовать XNA сейчас для моего проекта с бюджетом гораздо меньше миллиона", мой ответ определенно да. Попробуйте, это бесплатно. И это мощно.

Ответ 4

Я работал в месте под названием Newfire в конце 90-х. До того, как финансирование было сухим, у нас был двигатель, который мог бы сделать погружающийся мир площадью 10 000 кв. Км с разрешением 10 см. Вы могли сразу получить огромное количество игроков и настойчиво деформировать пейзаж. Этот движок работал с частотой кадров на P200 с картой Voodoo 2.

Большая часть движка была написана в тщательно настроенном С++. Весь игровой код был написан на C или С++ или Java. У меня также был прототип кода, который мог бы определять поведение объекта с помощью push-down автоматов, которые могли бы сделать очень приличный AI. Потребовалось почти не процессорное время. Выполнение игровой логики было затмевано рендерингом.

В какой-то момент у меня была демо-версия Conway Game of Life, работающая на Java, с использованием нашего средства визуализации программного обеспечения. Клетки были кубиками, лежащими в плоскости, которые появились или исчезли и изменили цвет, поскольку они в возрасте более поколений. В то время как игра работала с фиксированной скоростью генерации 4 поколения в секунду, 3D-дисплей работал на 20+ FPS, снова на P200 с помощью программного обеспечения.

Так что ответ не определенно С++. Ответ, как и любой проблемный домен, - это язык, который работает лучше всего в этом домене. С++ хорошо работает в этом домене для механизма рендеринга, но для реальной логики игры и правил многие языки работают хорошо. Питон замечательный. С# отлично. Java отлично.

Ответ 5

В качестве упомянутого плаката XNA в настоящее время ограничена платформами Microsoft, но вы все равно можете использовать С#,.NET и любые языки программирования .NET для разработки игр кросс-платформенным способом.

Mono runtime предоставляет кросс-платформенный движок, который можно использовать для запуска вашего С# (или .NET-кода) под различными настольными платформами (Windows, MacOS, Linux), а также игровыми консолями (Wii поддерживается Novell, PS3 скоро и Xbox360 "по своему усмотрению" ).

Существует также коммерческая игровая платформа под названием Unity3D, которая творит чудеса, используя Mono. Это игровая среда IDE, которая превосходит XNA как среду разработки игр: физика, графика, огни, модели, коллизии обрабатываются все в собственном С++-коде, в то время как вся игровая логика (AI, управление камерой, виды и т.д.) Обрабатываются управляемый код, написанный обычно на С# или UnityScript (строго типизированная реализация Javascript, которая дает вам лучшее из обоих: синтаксис Javascript, но сильные типы, повышающие производительность).

Ответ 6

Я не разработчик игр (если вы не считаете игру Reversi, написанную на астральном языке Atari 6502 в 1982 году), но у меня есть большой опыт написания коммерческого прикладного программного обеспечения в Assembly → C → Objective-C (кто-нибудь помнит следующий куб?) → С++ → Java и теперь С#.

Я не могу сравнивать библиотеки игр, но у меня есть некоторые мысли о С++ и С#.

IMO, аргумент для С++ над С# из-за производительности не так прост, как некоторые могли бы вы поверить. Программное обеспечение, над которым я работаю, критично критично. Мы конкурируем с продуктами, скомпилированными с использованием собственного кода (предположительно, написанного на C/С++/Assembly), и мы выигрываем от производительности до такой степени, что наши конкуренты даже используют наше программное обеспечение самостоятельно для определенные приложения.

Как это может быть, если С++ быстрее, чем С#? По моему опыту, ответ заключается в том, что для любой сложной системы архитектура и алгоритмы важнее, чем язык (предполагая, что потенциальная производительность находится в одном и том же шаре, что, конечно же, с С++ и С#). Несмотря на то, что я был разработчиком С++ на полный рабочий день больше лет, чем я использовал С#, я гораздо более продуктивен в С#, чем С++. Это означает, что я могу потратить больше времени на рефакторинг и совершенствование своей архитектуры и алгоритмов, чем раньше.

Теперь, иногда я должен признать, что у меня возникает желание переписать основной движок моего приложения на С++, потому что я знаю, что могу заставить его работать быстрее и использовать меньше памяти. До сих пор я сопротивлялся желанию, потому что я считаю, что падение производительности будет означать, что это только вопрос времени, прежде чем моя кодовая база С++ будет медленнее, чем где бы я была, если бы я остался с С#.

Я считаю, что это только вопрос времени, когда игровое развитие переходит на С# и/или Java и/или какой-либо другой язык, который более продуктивен, чем С++. Используя Java уже несколько лет, а теперь С# в течение нескольких лет я бы поставил на С#, но это просто предположение.

Если бы я начал заниматься разработкой игр сегодня, я бы определенно поставил на Silverlight и/или WPF. WPF построен на Direct3D. Microsoft уже объявила, что Silverlight 3 будет поддерживать 3D-рендеринг с аппаратным обеспечением. Silverlight работает в разных браузерах и Mac. С Moonlight он работает на Linux. Это было объявлено для некоторых телефонных платформ. Благодаря тому, что Silverlight по сути представляет собой легкую версию WPF (она была первоначально представлена ​​как "WPF/E", где "E" означает Everywhere), вы можете ориентироваться на оба без больших усилий. Вы можете иметь облегченную версию (бесплатную или поддерживаемую рекламой) вашей игры с использованием Silverlight в браузере и реальную сделку для серьезных игроков, которая использует WPF и работает в Windows.

Еще лучше, создайте отличную игровую библиотеку, которая позволяет легко настраивать как WPF, так и Silverlight 3 (или Silverlight 2, если вам не нужен 3D-рендеринг с аппаратным обеспечением).

Пока я не видел официального объявления, трудно поверить, что следующее поколение XBox не будет поддерживать Silverlight. Конечно, я бы не стал искать его в игровых системах Sony или Nintendo.

Ответ 7

Я думаю, что существует своего рода BS элитизм, который случается, когда люди говорят о XNA или java игровых фреймах или pygame или что-то еще. Да, профессиональные игровые дома будут использовать С++ долгое время. Но Atmospherian спрашивает о чем-то для своего собственного проекта, поэтому я собираюсь предположить, что он любитель (если он был генеральным директором Epic или что-то, что я сомневаюсь, что он будет размещать на SO)

В любом случае, только потому, что вы не могли кодировать FarCry, это не значит, что это бесполезная инфраструктура. Игры на уровне майора-студии требуют миллионов долларов и десятков людей, но XNA/Java/pygame/etc разрешили любителям делать некоторые потрясающие вещи. Любительские игры и мажоритарные игры - это два разных зверя и призыв к двум различным наборам инструментов.

Чтобы ответить на ваши вопросы, Атмосфер:

-Да, XNA может сделать довольно классный материал, и люди использовали его, чтобы сделать классные игры.

-Если вы хотите, чтобы XNA была кросс-платформой и работала с моно, я думаю, что это технически возможно, но я бы не затаил дыхание.

-Если вы хотите закончить работу в игровой индустрии, вам нужно будет изучить С++.

-Я думаю, что путь наименьшего сопротивления получению рабочего кросс-платформенного игрового движка находится в pyglet. Простота использования может торговаться со скоростью по сравнению с Java или С++.

Ответ 8

Просто добавьте в разговор... С#/. NET, безусловно, доступна на других платформах, отличных от Microsoft.

Между этими двумя там, вы можете настроить таргетинг на linux, mac, wii... Я уверен, что если у вас будет достаточно финансирования/интерес, они могут заставить Mono работать и на ps3. В этот момент вы сможете писать для всех основных игровых платформ, используя С# (хотя, вероятно, не с XNA per-se).

Кроме того, кому-то интересно узнать о производительности... в работе много замечательных вещей, таких как новая поддержка Mono для быстрой математики с плавающей запятой, используя их SIMD-расширения (x86 только сейчас, конечно): http://tirania.org/blog/archive/2008/Nov-03.html

Ответ 9

Удивленный никто не упомянул о возможностях для мобильных игр. Я не вижу никакого управляемого кода, конкурирующего с С++, в ближайшее время для подобных Half-Life и Halo, но для менее интенсивных игр для мобильных устройств кажется, что у него ноги.

Ответ 10

В качестве продолжения этого вопроса я начал изучать некоторые 3D-движки на базе OpenGL, написанные на С++ (CrystalSpace, Irrlicht, Panda3D), и все они выглядят довольно прочными. Интересная заметка о Panda3D заключается в том, что она написана на С++, но основной способ ее использования - через Python. Мне кажется, что этот метод обеспечит лучшее из обоих миров, как быстрый движок, написанный на С++, в сочетании с простотой программирования на Python. Я поставлю еще один вопрос, сравнивающий эти двигатели. Спасибо за ответы.

Ответ 11

Ну, между ними тоже я думаю, что С#/XNA - это явный победитель, основанный на поддержке библиотеки, и действительно зрелость, данная Microsoft в DirectX. Тем не менее, я не вижу, чтобы С#/XNA заменила С++ как лингва-франка серьезных программ 3D-игр (т.е. Крупными домами разработки) в течение очень долгого времени, если когда-либо.

Ответ 12

Не только студии должны рассмотреть, это аудитория. Скорее всего, до тех пор, пока Sony и Nintendo находятся вокруг, они вряд ли переместят платформу С#/XNA. По крайней мере, для Nintendo, когда у вас есть массовое обращение, которое они сейчас делают, они будут продолжать диктовать свою платформу разработки.

Мне нравится XNA, так как теперь я могу писать приложения для своего Zune, но С++ для широкой платформы разработки для игр будет долгое время. Может возникнуть приток новых разработчиков indie для устройств Microsoft, но мы далеки от того, чтобы XNA использоваться по всем направлениям, если когда-либо.

Ответ 13

Lua должен представлять для вас интерес, так как вы можете встроить его в С# и получить доступ к своим объектам из LuaScript.