unity - juegos sencillos en c#
¿Viabilidad de C#/. NET como la nueva plataforma estándar de desarrollo de juegos? (13)
Bueno, entre esos también creo que C # / XNA es un claro ganador basado en el soporte de la biblioteca y realmente la madurez dada la experiencia de Microsoft en DirectX. Dicho esto, no veo que C # / XNA reemplace a C ++ como la lengua franca de la programación de juegos en 3D (es decir, por grandes casas de desarrollo) durante mucho tiempo, si es que alguna vez lo hizo.
Durante mucho tiempo, C ++ ha sido el lenguaje de desarrollo del juego dominante. Muchos motores 3D de calidad AAA están disponibles para ajustarse a cualquier presupuesto.
Mi pregunta es, con el auge de XNA, ¿C # y el .NET Framework se han posicionado lo suficientemente bien para tomar el control como la nueva plataforma de desarrollo de juegos estándar? Obviamente, la naturaleza inherente de la plataforma cruzada de XNA (Windows, Xbox, Zune) tiene sus beneficios, pero ¿son esos beneficios lo suficientemente buenos como para atraer a los grandes desarrolladores de juegos a cambiar de rumbo?
Personalmente, estoy dividido entre usar C # / XNA para un nuevo proyecto y usar Java a través de jMonkeyEngine. Tengo un gran deseo de que mi juego sea portátil para múltiples plataformas, y los únicos idiomas que conozco lo suficientemente bien para lograrlo son C # y Java. Me encantaría ver una implementación de la base de código XNA que funciona con OpenGL y se ejecutará en Mono, pero creo que eso es solo una ilusión en este punto.
Tengo curiosidad por escuchar lo que otros han experimentado al construir juegos 3D en algo que no sea C ++.
Creo que hay una especie de elitismo BS que sucede cuando la gente habla de XNA o frameworks de juegos java o pygame o lo que sea. Sí, las casas de juego profesionales usarán C ++ durante mucho, mucho tiempo. Pero Atmospherian está preguntando algo sobre su propio proyecto, así que voy a suponer que es un aficionado (si fuera el CEO de Epic o algo que dudo que publicara en SO)
De todos modos, solo porque no puedas codificar FarCry no significa que sea un marco sin valor. Los juegos de mayor nivel de estudio requieren millones de dólares y docenas de personas, pero XNA / Java / pygame / etc han permitido a los aficionados hacer cosas increíbles. Los juegos amateur y los juegos de estudio principal son dos bestias diferentes y requieren dos juegos diferentes de herramientas.
Para responder a sus preguntas, Atmosférico:
-Sí, XNA puede hacer algunas cosas geniales y la gente lo ha usado para hacer algunos juegos geniales.
-Si quieres que XNA sea multiplataforma y funcione con mono, creo que es técnicamente posible, pero no aguantaría la respiración.
-Si quieres terminar con un trabajo en la industria de los juegos, vas a necesitar aprender C ++.
-Creo que el camino de menor resistencia para obtener un motor de juego multiplataforma en funcionamiento actualmente está en pyglet . La facilidad de uso puede competir con la velocidad en comparación con Java o C ++.
Mientras que hace un tiempo se anunció XNA Professional, Microsoft ahora parece enfocarse en la edición Express (aunque perdió el "Expreso" en el nombre), y parece estar dirigida al mercado de aficionados en lugar del mercado comercial. Entre otras cosas, esto beneficia en gran medida a la comunidad XBox 360, porque ahora permiten a los desarrolladores de hobby desarrollar sus juegos para Windows y XBox 360 y luego vender sus juegos en la red Xbox , y eso es algo bueno.
Realmente me encantaría ver a XNA cobrar impulso en el mundo profesional, pero esto no sucederá a menos que esté disponible para las otras plataformas de juegos más importantes (PS3 y Wii). El problema no es solo el XNA framework / API, es el requisito de lenguaje / framework, por lo que ni siquiera puede escribir el juego en C # y luego usar XNA en las plataformas de Microsoft y OpenGL en otras plataformas.
El perfil de rendimiento de XNA también está dirigido al mercado de aficionados en lugar de comercial, aunque el rendimiento parece ser bastante bueno y hay impresionantes demos en la naturaleza.
Editar:
Si su pregunta es en realidad "¿Debería usar XNA ahora para mi proyecto con un presupuesto mucho menor que un millón?", Mi respuesta es definitivamente sí. Ve y pruébalo, es gratis. Y es poderoso.
No son solo los estudios a considerar, es la audiencia. Lo más probable es que mientras Sony y Nintendo estén cerca, es poco probable que muevan la plataforma C # / XNA. Al menos para Nintendo, cuando tengas el atractivo del mercado masivo que tienen actualmente, seguirán dictando su plataforma de desarrollo.
Me encanta XNA, ya que ahora puedo escribir aplicaciones para mi Zune, pero C ++ para una plataforma de desarrollo de amplia base va a estar disponible por mucho tiempo. Puede haber una afluencia de nuevos desarrolladores independientes para dispositivos de Microsoft, pero estamos muy lejos de ver que XNA se use en todos los ámbitos, si es que lo hace alguna vez.
Simplemente agregue a la conversación ... C # / .NET está ciertamente disponible en otras plataformas que no sean de Microsoft.
Entre esos dos allí, puedes apuntar a Linux, Mac, Wii ... Estoy seguro de que si hubiera suficiente financiación / interés en él, también pueden hacer que Mono funcione con una ps3. En ese punto, podrás escribir para todas las principales plataformas de juegos usando C # (aunque probablemente no con XNA per-se).
Además, para cualquiera que se pregunte sobre el rendimiento ... se están preparando muchas cosas geniales, como el nuevo soporte de Mono para matemática de punto flotante rápido usando sus extensiones SIMD (x86 solo por ahora, por supuesto): http://tirania.org /blog/archive/2008/Nov-03.html
Sorprendido, nadie ha mencionado las posibilidades de un juego móvil. No veo ningún código administrado que compita con C ++ en el futuro cercano para Half-Life y Halo, pero para juegos de dispositivos móviles menos intensivos parece que tiene patas.
Trabajé en un lugar llamado Newfire a finales de los 90. Antes de que la financiación se agotara, teníamos un motor que podía ofrecer un mundo inmersivo de 10.000 km2 con una resolución de 10 cm. Puede obtener una gran cantidad de jugadores a la vez y deformar persistentemente el paisaje. Este motor funciona a velocidad de cuadro en un P200 con una tarjeta Voodoo 2.
La mayor parte del motor fue escrito en C ++ cuidadosamente sintonizado. Todo el código del juego fue escrito en C o C ++ o Java. También tenía un prototipo de código que podía definir comportamientos de objetos usando un autómata de empuje hacia abajo que podía hacer IA muy decente. No llevó casi tiempo de CPU. La ejecución de la lógica del juego fue eclipsada por el renderizado.
En un momento, tenía una demostración del Juego de la vida de Conway corriendo en Java usando nuestro procesador de software. Las celdas eran cubos colocados en un plano que aparecía o desaparecía y cambiaba de color a medida que envejecían más generaciones. Mientras el juego se ejecutaba con una tasa de generación fija de 4 generaciones por segundo, la pantalla 3D se estaba ejecutando a 20+ FPS, de nuevo en un P200 con el procesador de software .
Entonces la respuesta no es definitivamente C ++. La respuesta, como cualquier dominio problemático, es el idioma que funciona mejor dentro de ese dominio. C ++ funciona bien en ese dominio para el motor de renderizado, pero para la lógica y las reglas del juego real, muchos idiomas funcionan bien. Python es genial. C # es genial. Java es genial.
Como seguimiento de esta pregunta, comencé a buscar algunos motores 3D basados en OpenGL escritos en C ++ (CrystalSpace, Irrlicht, Panda3D), y todos parecen bastante sólidos. Una nota interesante sobre Panda3D es que está escrito en C ++, pero la forma principal de usarlo es a través de Python. Me parece que el método daría lo mejor de ambos mundos en cuanto a un motor rápido escrito en C ++ combinado con la facilidad de programación en Python. Plantearé otra pregunta para comparar estos motores. Gracias por las respuestas
Como se mencionó en un cartel, XNA actualmente se limita a las plataformas de Microsoft, pero aún puede usar C #, .NET y cualquier lenguaje de programación .NET para desarrollar juegos de forma multiplataforma.
El tiempo de ejecución de Mono proporciona un motor multiplataforma que se puede usar para ejecutar su C # (o código .NET) bajo una variedad de plataformas de escritorio (Windows, MacOS, Linux) y consolas de juego (Wii compatible con Novell, viene la PS3 pronto y Xbox360 "por su cuenta").
También hay una plataforma de juegos comerciales llamada Unity3D que ha hecho maravillas con Mono. Son un juego IDE que supera a XNA como entorno de desarrollo de juegos: física, gráficos, luces, modelos y colisiones se manejan en código C ++ nativo mientras toda la lógica de juegos (AI, control de cámara, vistas, etc.) son manejados por código administrado escrito típicamente en C # o UnityScript (una implementación de Javascript fuertemente tipada que le ofrece lo mejor de ambos mundos: la sintaxis de Javascript, pero tipos fuertes que mejoran el rendimiento).
No soy un desarrollador de juegos (a menos que cuentes el juego Reversi que escribí en lenguaje ensamblador Atari 6502 en ~ 1982), pero tengo mucha experiencia escribiendo software de aplicaciones comerciales en Assembly -> C -> Objective-C (alguien recuerda el siguiente cubo?) -> C ++ -> Java y ahora C #.
No puedo comparar las bibliotecas de juegos, pero tengo algunas ideas sobre C ++ versus C #.
OMI, el argumento para C ++ sobre C # debido al rendimiento no es tan simple como algunos quisieran hacer creer. El software en el que trabajo es de rendimiento crítico. Competimos con productos compilados con código nativo (presumiblemente escrito en C / C ++ / Assembly) y ganamos en rendimiento hasta el punto en que nuestros competidores incluso usan nuestro software para algunas aplicaciones .
¿Cómo puede ser eso si C ++ es más rápido que C #? En mi experiencia, la respuesta es el hecho de que, para cualquier sistema complejo, la arquitectura y los algoritmos son más importantes que el lenguaje (suponiendo que el rendimiento potencial esté en el mismo estadio, lo que sin duda es con C ++ y C #). A pesar de que trabajé como desarrollador de C ++ a tiempo completo durante más años de lo que usé C #, soy mucho más productivo en C # que en C ++. Esto significa que puedo dedicar más tiempo a la refacturación y el perfeccionamiento de mi arquitectura y algoritmos de lo que podía hacerlo anteriormente.
Ahora, a veces tengo que admitir que estoy tentado de volver a escribir el motor central de mi aplicación en C ++ porque sé que puedo hacer que funcione más rápido y use menos memoria. Hasta ahora he resistido el impulso porque creo que la caída en la productividad significa que es solo cuestión de tiempo antes de que mi base de código C ++ sea más lenta de lo que estaría si hubiera estado con C #.
Creo que es solo cuestión de tiempo antes de que el desarrollo del juego transmita a C # y / o Java y / o algún otro lenguaje que sea más productivo que C ++. Después de haber usado Java durante varios años y ahora C # durante varios años, apostaría por C #, pero eso es solo una suposición.
Si hoy comenzara a desarrollar juegos definitivamente apostaría por Silverlight y / o WPF. WPF está basado en Direct3D. Microsoft ya anunció que Silverlight 3 admitirá la renderización 3D asistida por hardware. Silverlight se ejecuta en varios navegadores y Mac. Con Moonlight se ejecuta en Linux. Se ha anunciado para algunas plataformas telefónicas. Gracias al hecho de que Silverlight es esencialmente una versión liviana de WPF (se introdujo inicialmente como "WPF / E", donde "E" significa En todas partes), puedes apuntar a ambos sin un gran esfuerzo extra. Puedes tener una versión liviana (gratuita o compatible con publicidad) de tu juego usando Silverlight en el navegador y el verdadero negocio para jugadores serios que usan WPF y se ejecutan en Windows.
Mejor aún, sea la persona idónea para crear una excelente biblioteca de juegos que permita orientar fácilmente tanto a WPF como a Silverlight 3 (o Silverlight 2 si no necesita representación 3D asistida por hardware).
Si bien no he visto ningún anuncio oficial, es difícil creer que la próxima generación de XBox no sea compatible con Silverlight. Por supuesto, no lo buscaría en sistemas de juegos Sony o Nintendo.
Lua debería ser de su interés, ya que puede incrustarlo en C # y acceder a sus objetos desde LuaScript.
Creo que C ++ pasará de moda en los próximos 10 años del mismo modo que el ensamblaje. Soy un programador de juegos profesional por más de 15 años. A principios de los años 90 mucha gente dijo que C no es lo suficientemente eficiente para los juegos. A fines de la década de los 90, las mismas personas dijeron que C está bien, pero C ++ es demasiado lento para aplicaciones de rendimiento crítico como los juegos. Ahora C ++ es el lenguaje estándar de alto rendimiento y la gente argumenta que otros lenguajes serían demasiado lentos. Mientras tanto, los juegos de hoy utilizan lenguajes de script como Lua, Python o Unrealscript para la lógica del juego, que son diez veces más lentos que C # o Java.
C ++ es mucho más rápido cuando haces matemáticas en tu juego. Hacer álgebra lineal es dolorosamente lento en C # o Java. Sin embargo, esto es solo una parte (10 - 25%) del juego. Cuando se trata del cuello de botella de la lógica del juego, está el acceso a la memoria, por lo que usar otro idioma no reduce el rendimiento significativamente. El lado de la herramienta del juego, que solía ser el 50-80% del código, realmente no requiere ningún C ++. Se ejecuta felizmente en C #, que es lo suficientemente rápido para casi cualquier herramienta.
Uno tampoco debería olvidar que C ++ se deriva de C, que se fabrica a principios de los 70. Entonces C ++ es obsoleto de muchas maneras. Lo más molesto es probablemente el pre-procesador que mata la transparencia y provoca tiempos de compilación terriblemente largos. Un motor de juego C ++ promedio de estado del arte se compila en 30-60 minutos. En ese momento, podría compilar todos los proyectos C # y Java jamás realizados por humanos. La falta de autorreflexión y la creación dinámica de códigos también es un inconveniente. A menudo cuesta mucho tiempo de desarrollo superar estas deficiencias.
Sin embargo, el desarrollo de C ++ cuesta mucho, costará aún más que un estudio de juegos arriesgue una falla al cambiar a una nueva tecnología que aún no se ha probado en el desarrollo de juegos. También es un factor importante que la mayoría de los programadores de juegos experimentados usan solo C / C ++ y no tienen experiencia con otros idiomas, lo que definitivamente aumentaría el riesgo de cambio. Debido a esto, probablemente no verás estudios de juegos en los próximos años cambiando a C #. Sin embargo, es probable que un estudio propiedad de Microsoft haga un gran impacto con un juego C # en los próximos 5 años, lo que convencerá a otros estudios de que es posible hacer títulos AAA en C # y luego verás que cada vez más estudios cambian a DO#.
Por ahora, mi consejo es: si quieres hacer un título multiplataforma AAA, no tienes más opción que C ++ para la parte de tiempo de ejecución del juego. Considere usar C # para el lado de la herramienta. Es un poco complicado conectar eficientemente el código administrado y no administrado, pero a la larga vale la pena el esfuerzo que gastas en él. Si haces un proyecto de hobby o un título B donde el rendimiento es menos importante que el costo / tiempo de desarrollo, entonces olvídate de C ++ y simplemente usa C # para todo y dedica un tiempo extra para optimizar las matemáticas.
Los grandes estudios de juegos probablemente no adopten XNA en el corto plazo. Algunos indies lo están usando, pero definitivamente tiene el potencial de ser finalmente exitoso y dejar atrás C ++.
XNA proporciona muchas clases que puedes utilizar en el desarrollo de juegos, pero muchas otras a menudo eligen usar un motor de juegos completamente desarrollado. Aunque XNA es bastante bueno para los principiantes para aprender si eres nuevo en los juegos de programación.
C # es un buen lenguaje para usar en el desarrollo de juegos. El desarrollo de juegos produce aplicaciones que requieren sonido, gráficos avanzados, inteligencia artificial, física, etc. Todo lo que requiere un entorno de lenguaje potente y bastante rápido. Si bien la mayoría de los juegos de PC y consolas de nivel superior están escritos en C ++, C # tiene una hoja de ruta que probablemente dejará atrás a C ++. Los próximos cambios en C ++ 0x sin duda revitalizarán C ++ por un tiempo, pero C # parece estar a punto de superarlo.
Si realmente quieres ser un desarrollador de juegos, te insto a que al menos aprendas C ++ y escribas tu propio motor de juego. Usar un motor de juego prefabricado es fácil y puedes codificar algo que está "bien" pero te encontrarás con muchas limitaciones que no podrás codificar. De hecho, estará confinado a las capacidades del motor del juego (a menos que tenga acceso a la fuente, que luego podría modificar a su gusto).
Aprenda C ++ y preferiblemente OpenGL :) Una vez que conozca OpenGL, podrá aprender DirectX con bastante facilidad.
C # es pan comido una vez que conoces C ++.