23

長い間、C++が主流のゲーム開発言語でした。多くのAAA品質の3Dエンジンが、あらゆる予算に合わせて利用できます。

私の質問は、XNAの台頭に伴い、C#と.NETフレームワークは、新しい標準のゲーム開発プラットフォームとして引き継ぐのに十分な位置にあるのでしょうか。明らかに、XNAフレームワーク(Windows、Xbox、Zune)に固有のクロスプラットフォームの性質には利点がありますが、これらの利点は、大規模なゲーム開発スタジオにギアを切り替えるように誘うのに十分ですか?

個人的には、新しいプロジェクトにC#/ XNAを使用することと、jMonkeyEngineを介してJavaを使用することとの間で途方に暮れています。私は自分のゲームを複数のプラットフォームに移植できるようにしたいと強く望んでいます。これを実現するのに十分な知識がある言語はC#とJavaだけです。OpenGLを搭載し、Monoで実行されるXNAコードベースの実装を見たいと思いますが、現時点ではそれは単なる希望的観測だと思います。

C++以外で3Dゲームを構築しているときに他の人が経験したことを聞きたいです。

4

13 に答える 13

66

アセンブリと同じように、C++ は今後 10 年以内に時代遅れになると思います。私はプロのゲーム プログラマーとして 15 年以上働いています。90 年代初頭、多くの人が C はゲームには十分に効率的ではないと言いました。90 年代後半、同じ人々が、C は問題ないが、C++ はゲームなどのパフォーマンスが重要なアプリケーションには遅すぎると言いました。現在、C++ は標準の高性能言語であり、人々は他の言語では遅すぎると主張しています。それまでの間、今日のゲームは、C# や Java よりも 10 倍遅いゲーム ロジックに Lua、Python、Unrealscript などのスクリプト言語を使用しています。

ゲームで計算を行う場合、C++ の方がはるかに高速です。C# や Java で線形代数を実行すると、非常に遅くなります。ただし、これはゲームの一部 (10 ~ 25%) にすぎません。ゲーム ロジックのボトルネックはメモリ アクセスであるため、他の言語を使用してもパフォーマンスが大幅に低下することはありません。コードの 50 ~ 80% を占めていたゲームのツール側は、実際には C++ を必要としません。ほぼすべてのツールで十分に高速な C# で実行できます。

また、C++ は 70 年代初頭に作成された C から派生したものであることも忘れてはなりません。そのため、C++ は多くの点で時代遅れです。最も厄介なのは、おそらくプリプロセッサであり、これが透過性を無効にし、非常に長いコンパイル時間を引き起こします。平均的な最先端の C++ ゲーム エンジンは、30 ~ 60 分でコンパイルされます。そのようなときに、これまで人間が作成したすべての C# および Java プロジェクトをコンパイルできます。自己反映と動的コード作成の欠如も欠点です。これらの欠点を克服するには、多くの場合、多くの開発時間がかかります。

それにもかかわらず、C++ 開発には多くの費用がかかります。ゲーム開発でまだ証明されていない新しいテクノロジに切り替えて、ゲーム スタジオが失敗するリスクを冒すと、さらに多くの費用がかかります。また、経験豊富なゲーム プログラマーの大半が C/C++ しか使用しておらず、他の言語の経験がないことも重要な要素です。これらの理由から、ゲーム スタジオが今後数年間で C# に切り替えることはおそらくないでしょう。ただし、Microsoft が所有するスタジオは、今後 5 年以内に C# ゲームで大ヒットする可能性が高く、これにより他のスタジオは C# で AAA タイトルを作成することが可能であると確信し、その後、ますます多くのスタジオが C# に切り替えることになるでしょう。 C#.

今のところ、私のアドバイスは次のとおりです。AAA マルチプラットフォーム タイトルを作成したい場合、ゲームのランタイム部分には C++ 以外の選択肢はありません。ツール側に C# を使用することを検討してください。マネージド コードとアンマネージド コードを効率的に接続するのは少し難しいですが、長い目で見れば、それに費やした労力に見合うだけの価値があります。趣味のプロジェクトや、パフォーマンスが開発コスト/時間よりも重要である B タイトルを行う場合は、C++ を忘れて、すべてに C# を使用し、計算を最適化するために余分な時間を費やしてください。

于 2008-12-17T10:13:04.317 に答える
17

大規模なゲーム スタジオは、おそらくすぐに XNA を採用することはないでしょう。一部のインディーはそれを使用していますが、最終的に大成功を収め、C++ を置き去りにする可能性は間違いなくあります。

XNA は、ゲーム開発で使用できる多くのクラスを提供しますが、他の多くのクラスは、本格的なゲーム エンジンを使用することを選択することがよくあります。XNA は、ゲームのプログラミングに慣れていない場合、初心者が歯を磨くのにはかなり適しています。

C# は、ゲーム開発に使用するのに適した言語です。ゲーム開発では、サウンド、高度なグラフィックス、AI、物理学などを必要とするアプリケーションが作成されます。これらすべてには、強力でかなり高速な言語環境が必要です。一流の PC およびコンソール ゲームのほとんどは C++ で記述されていますが、C# には C++ を置き去りにする可能性が高いロード マップがあります。C++0x の今後の変更により、しばらくの間 C++ が再活性化されることは間違いありませんが、C# はそれを追い抜く態勢を整えているようです。

本当にゲーム開発者になりたいのなら、少なくとも C++ を学び、独自のゲーム エンジンを作成することをお勧めします。既製のゲーム エンジンを使用するのは簡単で、「問題ない」ものをコーディングできますが、コーディングできない多くの制限に遭遇します。ゲーム エンジンの機能に効果的に制限されます (ただし、ソースにアクセスして好みに合わせて変更できる場合を除きます)。

C++ とできれば OpenGL を学びましょう :) OpenGL を理解すれば、DirectX を簡単に学ぶことができます。

C++ を理解すれば、C# は簡単です。

于 2008-12-10T13:52:03.377 に答える
13

少し前にXNAProfessionalが発表されましたが、Microsoftは現在Expressエディションに焦点を合わせているようです(名前の「Express」は失われていますが)。これは、商用市場ではなく趣味の市場を対象としているようです。とりわけ、これはXBox 360コミュニティに大きなメリットをもたらします。これは、愛好家の開発者がWindowsおよびXBox 360用のゲームを開発し、XBoxネットワークでゲームを販売できるようになったためです。これは良いことです。

XNAがプロの世界で勢いを増すのを見たいのですが、他の主要なゲームプラットフォーム(PS3とWii)で利用できない限り、これは起こりません。問題はXNAフレームワーク/APIだけでなく、言語/フレームワークの要件であるため、C#でゲームを作成してから、MicrosoftプラットフォームでXNAを使用し、他のプラットフォームでOpenGLを使用することもできません。

XNAのパフォーマンスプロファイルも、商用ではなくホビー市場を対象としていますが、パフォーマンスは非常に優れているようで、印象的なデモが公開されています。

編集:

あなたの質問が実際に「100万ドルよりはるかに少ない予算で私のプロジェクトに今XNAを使用すべきか」である場合、私の答えは間違いなくイエスです。試してみてください、無料です。そしてそれは強力です。

于 2008-12-10T14:11:22.013 に答える
10

ポスターが述べたように、XNAは現在Microsoftプラットフォームに限定されていますが、C#、. NET、および任意の.NETプログラミング言語を使用して、クロスプラットフォームの方法でゲームを開発できます。

Monoランタイムは、さまざまなデスクトッププラットフォーム(Windows、MacOS、Linux)およびゲームコンソール(NovellでサポートされているWii、PS3が登場)でC#(または.NETコード)を実行するために使用できるクロスプラットフォームエンジンを提供しますすぐにそしてXbox360は「あなた自身で」)。

Unity3Dと呼ばれる商用ゲームプラットフォームもあり、Monoを使用して驚異的な成果を上げています。これらは、ゲーム開発環境としてXNAを超えるゲームIDEです。物理、グラフィック、ライト、モデル、衝突はすべてネイティブC ++コードで処理され、すべてのゲームロジック(AI、カメラコントロール、ビューなど)はによって処理されます。通常、C#またはUnityScriptで記述されたマネージドコード(Javascript構文の両方の長所を提供する、厳密に型指定されたJavascript実装ですが、パフォーマンスを向上させる強力な型)。

于 2009-01-02T07:43:45.227 に答える
10

私は 90 年代後半に Newfire という会社で働いていました。資金が枯渇する前に、10 cm の解像度で 10,000 平方 km の没入型の世界をレンダリングできるエンジンがありました。一度に膨大な数のプレイヤーを参加させ、風景を永続的に変形させることができます。このエンジンは、Voodoo 2 カードを搭載した P200 でフレーム レートで動作しました。

エンジンの大部分は、慎重に調整された C++ で記述されています。すべてのゲーム コードは、C、C++、または Java で記述されています。また、非常にまともな AI を実行できるプッシュ ダウン オートマトンを使用してオブジェクトの動作を定義できるプロトタイプ コードも用意しました。CPU 時間はほとんどかかりませんでした。ゲーム ロジックの実行は、レンダリングによって小さくなりました。

ある時点で、ソフトウェア レンダラーを使用して Java で実行されている Conway の Game of Life のデモを行いました。細胞は平面に置かれた立方体であり、世代を重ねるにつれて現れたり消えたり、色を変えたりしました。ゲームが毎秒 4 生成の固定生成レートで実行されている間、3D ディスプレイは 20+ FPS で実行され、ソフトウェアレンダラーを備えた P200 で再び実行されました。

したがって、答えは間違いなく C++ ではありません。答えは、問題領域と同様に、その領域内で最適に機能する言語です。C++ はレンダリング エンジンのその領域でうまく機能しますが、実際のゲーム ロジックとルールでは、多くの言語がうまく機能します。パイソンは素晴らしいです。C# は素晴らしいです。Javaは素晴らしいです。

于 2008-12-10T14:27:04.413 に答える
9

私はゲーム開発者ではありません (~1982 年に Atari 6502 アセンブリ言語で書いたリバーシ ゲームを数えない限り)、Assembly -> C -> Objective-C で商用アプリケーション ソフトウェアを書いた経験はたくさんあります (誰もが覚えているでしょう)。次のキューブ?) -> C++ -> Java、そして今は C# です。

ゲーム ライブラリを比較することはできませんが、C++ と C# についていくつか考えがあります。

IMO、パフォーマンスによる C# に対する C++ の議論は、一部の人が信じているほど単純ではありません。私が取り組んでいるソフトウェアはパフォーマンスが重要です。ネイティブ コード (おそらく C / C++ / アセンブリで記述) にコンパイルされた製品と競合し、競合他社が特定のアプリケーションで独自のソフトウェアよりも当社のソフトウェアを使用するほどのパフォーマンスで勝利しています。

C++ が C# よりも高速であるとすれば、それはどうしてでしょうか? 私の経験では、その答えは、どのような複雑なシステムでも、言語よりもアーキテクチャとアルゴリズムの方が重要であるという事実です (潜在的なパフォーマンスが同じ球場にあると仮定すると、C++ と C# の場合は確かにそうです)。私はフルタイムの C++ 開発者として C# を使用した年数よりも長い年月を費やしてきましたが、C++ よりも C# の方がはるかに生産的です。これは、以前よりも多くの時間を、アーキテクチャとアルゴリズムのリファクタリングと完成に費やすことができることを意味します。

ときどき、アプリケーションのコア エンジンを C++ で書き直したいという衝動に駆られることを認めざるを得ません。なぜなら、アプリケーションをより高速に実行し、メモリの使用量を削減できることがわかっているからです。これまでのところ、私は衝動に抵抗してきました。なぜなら、生産性の低下は、私の C++ コードベースが、C# にとどまっていた場合よりも遅くなるのは時間の問題だと信じているからです。

ゲーム開発が C# や Java や C++ よりも生産性の高い他の言語に移行するのは時間の問題だと思います。Java を数年間使用し、現在は C# を数年間使用しているので、C# に賭けますが、それは単なる推測です。

私が今日ゲーム開発を始めるとしたら、間違いなく Silverlight や WPF に賭けるでしょう。WPF は Direct3D 上に構築されています。Microsoft は、Silverlight 3 がハードウェア アシスト 3D レンダリングをサポートすることを既に発表しています。Silverlight は、さまざまなブラウザーと Mac で動作します。Moonlight を使用すると、Linux 上で動作します。一部の電話プラットフォーム向けに発表されています。Silverlight は本質的に WPF の軽量バージョンであるという事実のおかげで (最初は "WPF/E" として導入され、"E" は Everywhere を意味します)、多大な労力を費やすことなく両方をターゲットにすることができます。ブラウザーで Silverlight を使用するゲームの軽量バージョン (無料または広告によってサポートされる) と、WPF を使用して Windows 上で実行される本格的なゲーマー向けの本格的なバージョンを用意できます。

さらに良いことに、WPF と Silverlight 3 (またはハードウェア支援の 3D レンダリングが必要ない場合は Silverlight 2) の両方を簡単にターゲットにできる優れたゲーム ライブラリを作成する人になりましょう。

公式の発表は見たことがありませんが、次世代の XBox が Silverlight をサポートしないとは信じがたいです。もちろん、Sony や Nintendo のゲーム システムでは検索しません。

于 2009-02-15T20:45:35.733 に答える
5

人々が XNA や Java ゲーム フレームワーク、pygame などについて話すときに発生する一種の BS エリート主義があると思います。はい、プロのゲーム ハウスは C++ を非常に長い間使用します。しかし、Atmopherian は彼自身のプロジェクトについて何かを尋ねているので、彼はアマチュアであると仮定します (もし彼が Epic の CEO か何かだったら、彼が SO に投稿するとは思えません)。

とにかく、FarCry をコーディングできなかったからといって、FarCry が価値のないフレームワークであるとは限りません。メジャー スタジオ レベルのゲームには数百万ドルと数十人の人員が必要ですが、XNA/Java/pygame/etc により、アマチュアはかなり素晴らしいものを作ることができます。アマチュア ゲームとメジャー スタジオ ゲームは 2 つの異なる獣であり、2 つの異なるツール セットが必要です。

あなたの質問に答えるには、Atmopherian:

-はい、XNA はいくつかの非常に優れた機能を実行でき、人々はそれを使用していくつかの優れたゲームを作成しています。

- XNA をクロス プラットフォームにして mono で動作させたい場合は、技術的には可能だと思いますが、息をのむことはありません。

- ゲーム業界に就職したいなら、C++ を学ぶ必要があります。

-クロスプラットフォームのゲームエンジンを動作させるための最も抵抗の少ない方法は、現在pygletにあると思います。Java や C++ と比較すると、使いやすさは速度とトレードオフになる可能性があります。

于 2008-12-10T14:39:23.190 に答える
5

会話に追加してください... C#/.NET は、Microsoft 以外の他のプラットフォームでも確実に利用できます。

そこにあるこれら2つの間で、Linux、Mac、Wiiをターゲットにすることができます...それに十分な資金/関心があれば、Monoをps3でも実行できると確信しています。その時点で、C# を使用してすべての主要なゲーム プラットフォーム用に記述できるようになります (ただし、XNA 自体を使用することはおそらくできません)。

また、パフォーマンスについて疑問に思っている人へ... Mono の SIMD 拡張機能を使用した高速浮動小数点演算の新しいサポートなど、多くの優れた機能が開発中です (もちろん、現在は x86 のみ): http://tirania.org /ブログ/アーカイブ/2008/Nov-03.html

于 2008-12-10T18:05:47.530 に答える
3

この質問のフォローアップとして、C ++で記述されたOpenGLベースの3Dエンジン(CrystalSpace、Irrlicht、Panda3D)をいくつか調べ始めましたが、それらはすべてかなり堅実に見えます。Panda3Dに関する興味深い注意点は、C ++で記述されていることですが、主な使用方法はPythonを使用することです。この方法は、C ++で記述された高速エンジンと、Pythonでのプログラミングの容易さを組み合わせたものである限り、両方の長所を提供するように思われます。これらのエンジンを比較して別の質問をします。返信ありがとうございます。

于 2008-12-13T15:07:10.360 に答える
3

モバイルゲームの可能性について誰も言及していないことに驚いた. Half-Life や Halo のようなマネージド コードが C++ とすぐに競合することはないと思いますが、それほど集中力のないモバイル デバイス ゲームでは、十分な効果があるようです。

于 2008-12-10T14:44:43.037 に答える
1

それらの中でも、C#/XNA は、ライブラリ サポートと、Microsoft の DirectX での経験を考慮した成熟度に基づいて、明らかに勝者だと思います。そうは言っても、C#/XNA が本格的な 3D ゲーム プログラミング (つまり、大規模な開発会社) の共通語として C++ に取って代わるとは思えません。

于 2008-12-10T13:48:28.923 に答える
1

考慮すべきはスタジオだけではなく、観客です。おそらく、Sony と Nintendo が存在する限り、C#/XNA プラットフォームに移行する可能性は低いでしょう。少なくとも任天堂にとっては、現在のような大衆市場へのアピールがあれば、彼らは引き続き開発プラットフォームを決定するでしょう.

Zune 用のアプリケーションを作成できるようになったので、私は XNA が大好きですが、ゲーム用の広範な開発プラットフォーム用の C++ は、長い間使用される予定です。Microsoft デバイス向けの新しいインディー開発者が流入する可能性はありますが、XNA が全面的に使用されるようになるにはほど遠い状態です。

于 2008-12-10T13:59:35.423 に答える
-1

Luaは、C# に埋め込んで LuaScript からオブジェクトにアクセスできるため、興味があるはずです。

于 2009-02-15T19:43:20.190 に答える