为什么微软不使用C#开发类似Halo的下一代游戏?

Joa*_*nge 14 .net c#

这个问题可能看似主观,但考虑到微软:

  • 拥有Xbox 360平台
  • 拥有Windows平台
  • 拥有自己的游戏工作室(MGS)
  • 拥有其他第三方开发者
  • 是主要的出版商

让我想知道为什么微软不会推动他们的旗舰语言来证明你不仅可以减少大量的开发时间,还可以减少金钱,而且还可以证明你可以发布下一代的标题,实时交互性不会受到影响.

如果微软要这样做一次,我相信很多AAA开发者也会跳上那辆马车.

Jar*_*Par 26

你需要问一个稍微不同的问题.

为什么微软不会用完全不同的语言重写它现有的高度调整的游戏引擎.

希望这是一个更加自我解释的问题.

我对游戏系统代码库几乎一无所知,但我当然不认为它很小.将除了简单应用程序之外的任何东西从C++转换为任何其他托管语言都是一项艰巨的任务.

忘记C#中无法完成的所有语法差异和C++特性/黑客攻击,游戏应用程序在对话前面会遇到一个问题.C#并不慢,但它具有截然不同的性能特征.几乎可以肯定的是,如果直接移植到C#,高度调整的C++游戏代码将不会表现得差不多.必须进行全新的性能调整并且不会便宜.


jal*_*alf 20

首先,XNA不是一个选择.它的目标是消除PC和360之间的差异.高性能游戏不能做到这一点.它必须利用差异.360闪耀的地方,必须利用性能.在糟糕的地方,必须开发变通方法.反之亦然PC.

这也是为什么存在其他DirectX包装器的原因(SlimDX作为一个更直接的D3D包装器而出现).

至于托管代码,一般会想到几个问题:

  • 他们已经拥有了一个他们想继续使用的大型代码库.减少开发时间的方法不是把所有东西都抛到窗外,而是从头开始用另一种语言.
  • 大多数游戏工作室仍然拥有一些自主权,即使它们归微软所有.如果他们更喜欢用C++编写游戏,微软是否可以否决它?这样做会是个好主意吗?它肯定会让开发人员感到烦恼,而开发者生气并不是一件好事.
  • 性能:是的,C#和.NET在PC上运行良好,但在游戏机上,这是一个不同的故事.它使用.NET CF,其中包括一个非常原始的垃圾收集器.它的JIT编译器坦率地说糟透了..NETCF的设计目的不是优于经过良好调优的本机代码.
  • 控制:您通常编写AAA控制台游戏的方式是利用控制台提供的所有功能.每个CPU周期都应该或多或少地考虑内存的每个字节.托管代码简直不太可预测.GC何时运行?在任何给定时间内使用了多少内存?我们不知道.控制台只有非常有限的内存量.(360拥有512MB iirc.这对于现代游戏来说并不多,如果您确切知道谁在使用多少内存,那么只能制作像Halo 3这样的游戏.
  • 360上的大多数功能都不会暴露给.NET.许多硬件功能需要C++互操作或汇编程序才能利用.

说到这一点,使用.NET进行高调的PC游戏会更好.完整的.NET框架具有更好的性能特征,并且PC上的可用硬件无论如何都会发生变化,因此对确切内存使用的严格控制不那么重要.

但最终,他们为什么要这样做呢?这将是一个很大的风险,它需要大量的代码重写,他们究竟想要证明什么?大多数工作室都制作跨平台游戏,对于他们来说,.NET不是一个选择,无论它多么棒.他们希望能够在PS3上运行他们的代码,或Wii,或....


Pau*_*ier 5

很简单,对于像第一人称射击游戏提出的类似实时的性能问题,C#不能胜任这项任务.并不是说它不是一个好的语言,我使用它并喜欢使用它,但事实是垃圾收集在C#中引入的不确定性使它不适合具有高性能要求的游戏.Java也是如此.只有当你达到一定程度,你可以获得一定数量的超额表现才能真正做到这一点; 问题实际上是其他人会采取额外的性能,而不是将其沉入C#(或Java,它会有类似的问题)的运行时要求,他们只会制作一个更好看的游戏.由于消费者并不真正关心游戏开发的技术,他们通常会选择看起来更好看的游戏,这使得任何使用C#开发的游戏(或者像我说的那样,Java)处于显着的劣势.

  • 呃,假设我们还在90年代中期,我会同意你的看法.但是今天,GC根本不是一个问题..NET GC非常好,并且在收集过程中避免明显的暂停非常容易.但这仅适用于完整的.NET框架.Compact Framework使用了一个更原始的垃圾收集器,我绝对不会相信这样的性能敏感项目.但GC的*通常*不一定是个问题. (2认同)
  • 现实是,大多数现代游戏引擎都有自己的垃圾收集器.我认为这几乎不是几年前的问题.我认为你很好,运行时的内存影响将比GC更多地是一个性能障碍(在控制台上).即便如此,内存限制几乎已成为过去,但Wii绝对(96MB?)和PS3(256MB非视频)仍然非常缺乏RAM. (2认同)
  • 是的,GC有开销,但是替代方案没有开销吗?您忘记了不使用GC并不意味着(de)分配是免费的.事实上,我并不是专家,我相信malloc比.NET/Java内存分配慢,如果你想要相同或更好的性能,你需要编写一个自定义内存分配器,一次分配(大)块使用指针算法进行分区.GC已经做了什么. (2认同)
  • 我必须在此同意.当人们谈论垃圾收集时,他们经常忘记(de)分配不是免费的.这并不是说,如果你不使用垃圾收集器,你的内存就会神奇地被清理干净而不会影响性能.无论何时管理内存(或任何I/O),都会对性能产生影响.Jalf是正确的,他提出,在许多分配测试中,由于malloc的开销,C#/ Java /(在这里插入托管语言)在内存管理方面表现得和C++一样好. (2认同)

Ed *_*fer 5

微软有一个这样的平台,叫做XNA,他们在过去三年里一直在开发.对于业余爱好者开发者和AAA工作室,有许多概念证明,入门套件和其他资源.

XNA使各种开发人员能够利用他们现有的C#技能和Xbox 360/Windows的强大功能为这两个平台构建游戏.他们还没有使用该平台开发商业游戏,但已经有很多非常酷的项目已经使用XNA.

看一下使用XNA 创建的一些游戏.

另外,对于有关C#性能的评论,您可能会对该主题的论坛讨论感兴趣.对于很多游戏来说,这绝对够快; 事实上,XNA在Xbox上的执行引擎在游戏开发方案中以多种方式进行了优化,并降低了垃圾收集的成本(我没有引用的来源,但我作为.NET执行引擎的实习生为Xbox 360).


Ser*_*pth 5

实际上,如果你看看事情的方式,MS在游戏工作室的参与度几乎没有.Bungie现在是一个半独立的实体,他们关闭Ensemble(帝国时代,光环战争)谁知道是什么原因......他们关闭飞行模拟器组,他们让他们与Bioware的独家经营(龙腾世纪,Baldurs Gate,NWN) )和Bizarre(Project Gotham Racing)去了,他们关闭了FASA Interactive(Shadowrun).在这一点上,他们真的拥有什么?我能想到的只有......稀有和狮子头.

至于他们为什么不用C#制作AAA冠军.我想其中很大一部分是遗留问题.PGR,Forza,Age of Empires,Halo,Flight Sim,他们制作的每一场比赛都是之前系列的一次迭代,所以本来就已经在现有的基础设施上进行了大量投资.

这离开了第三方.为什么第三方不会使用C#?这很简单,它不适用于Wii或PS3.