XNAはXbox 360のプロフェッショナルな開発に適していますか?


16

Xbox 360向けの開発を開始したいのですが、PCとXboxの両方をターゲットにできるXNAフレームワークについて聞いたことがあります。クライアントは通常のコンピューターでもゲーム/アプリを使用できるため、これは魅力的なオプションのように思えます。

しかし、私はXboxシーンに非常に新しいです。XNAは愛好家の開発専用であり、セミプロフェッショナルまたは企業のアプリケーション開発には推奨されませんか?XNAにはC ++開発ソリューションの機能が欠けていますか、それともXboxで実行されているゲーム/アプリのパフォーマンスをひどく低下させますか?

XNAなしでC#を使用してXboxをターゲットにすることは可能ですか?利点は何ですか?

低レベルのプログラミングは、DirectXと直接連携するC ++で行われます。利点は何ですか?

回答:


15

簡単な答え:はい

XNAは単なるツールです。ほとんどのプロセッサおよびグラフィックを集中的に使用するゲームを除くすべてのゲームに適しています。Xbox 360ゲームでXNAを検討している場合、見逃すことのできるものは次のとおりです。

  • 非常に高速なCPU浮動小数点演算を行うためのSIMD / Vectorユニットへのアクセス
  • おそらくC#よりも少し高速になるネイティブ言語コードを使用する機能
  • される能力はほとんどあなたがメモリを割り当てる方法とビットlazier
  • XBLIGゲームは6コアのうち4コアのみにアクセスできます(ただし、3つのCPUをすべて取得しますが、フルコアでもないため、多くをお見逃しなく)-これがXBLIG XNA以外に適用されるかどうかはわかりませんゲーム
  • 本当にわかりにくいグラフィカルなトリックを行うための完全なDirectXアクセス

もっとあるかもしれない-これは私の頭の上にある。

(推測:あなたがいる場合プロの開発者である場合(例えば、開発キットを持っている場合)、WindowsでのP / Invokeと同じようにネイティブコードでXNAを使用できると思います。両方の世界で最高です。XDKも参照してください。)

要するに、XNAゲームは としてネイティブゲームとほぼ同じ速度で、ほぼ同じことを実行できます。説得力のある理由がない限り、それを使用することをお勧めします。

360用のマネージDirectXがあるかどうかはわかりません。おそらくSlimDX。は開始するのに適した場所です。


1
「XBLIG」とは何ですか?
リケット

2
Xboxのライブインディーズゲーム
ドットミニク

コアは3つしかなく、すべてのコアにアクセスできます。2つのスレッドにアクセスすることはできません。これらのスレッドの1つはXNA用であり、もう1つはXBOX OS用であるため、ゲームを作成するときに誰もアクセスできないスレッドです。
オルホフスキー

1
また、メモリ割り当てを怠ることはありません。非常に単純なゲームを除いて、すべてのオブジェクトをプールして(割り当て/解放型モデルを含む-C ++を超えない)、世代別コレクションアプローチを使用する.NETコンパクトCLRでの高価なガベージコレクションを防止する必要があります。
-Olhovsky

12

XBOXまたはPlaystation devkitに10,000ドルを支払うつもりがない場合、開発できる唯一のコンソールはXBOX 360であり、XNAを使用する唯一の方法です。

プロの開発では、XBOXの処理能力(ほとんどのゲーム、特に2Dゲームは必要ありません)の100%を実際に取得する必要がない限り、XNAは実際には開発にはるかに適しています。

他の回答者が犯したいくつかの間違い:

XBOXには3つのコアしかありません。XNAでそれらすべてにアクセスできます。

各コアにはハイパースレッディングがあり、2つのハイパースレッドをサポートしています。4/6スレッドのみにアクセスできます。それらのスレッドの1つはXNA用です。もう1つは、XBOX OSで使用されているため、ゲーム開発者がアクセスできないスレッドです。

XBOXのC#は、WindowsのC#よりもはるかに低速です。XBOXは.NETコンパクトCLRを使用します。これは非常に軽量で、デスクトップCLRの最適化の多くが欠けています。XBOXセキュリティ機能は、プログラムが独自のソースコードを変更するのを防ぎます。これにより、.NETコードの実行を許可することさえ非常に難しくなり、高速で実行することははるかに少なくなります。マネージコードのパフォーマンスをC ++ネイティブコードと競合させる理由の1つは、CLRが独自のコードを変更してキャッシュの一貫性を最適化できることです。XNA開発チームは、XboxでC#を実行するために、いくつかの非常に大きなフープをジャンプする必要があり、これらのフープには関連するパフォーマンスコストがあります。

あなたは、メモリの割り当てであまりにも怠getになることはありません。Windows上のXNAは、管理された環境から期待されるように、メモリ割り当てを大幅に簡素化します。ただし、XBOXでは、.NETコンパクトCLRはガベージコレクションにスイープとコンパクトなアプローチを使用し、コレクションによるゲームのst音を防ぐための一般的なアプローチは、コレクションを完全に回避することです。これには、クラスにオブジェクトプールを使用し、通常Windows環境でクラスを使用する小さなオブジェクトに構造体を使用する必要があります。通常、オブジェクトプーリングには、オブジェクト管理の割り当て/解放モデルが必要です。これは、C ++のメモリ管理よりも悪くはありません(おそらく少しは良いかもしれません)。

とはいえ、C#/ XNAでの開発は、DirectX API(XNA)を使用しないC ++での開発よりも何倍も高速で簡単です。

4週間の仕事の後、XNAで作成しているゲームのステータスは次のとおりです。

4週間の開発後のゲームのスクリーンショット。

これにより、XNAライブラリ/ APIを使用した非常に高速な開発がC#とどのように組み合わされているかがわかります。

そのスクリーンショットは、約65FPSのXBOXによってレンダリングされます。

あなたが趣味のゲーム開発者であり、コンソール用のゲームを作りたい場合、XNA + XBOXが唯一の現実的なオプションであるだけでなく、それはかなり驚くべきオプションであり、楽しい開発環境であり、多くのXBOX Live ArcadeゲームはXNAで作成し、それを何十万ドルも行いました。(たとえば、リンボ。)


1
XNA devに関して私が持っていた最も明確な答えの1つ。ありがとうございました。
キール

4

XNAは両刃のブレードです。比較的簡単に使用できますが、非常に拡張可能でカスタマイズ可能です。問題は、マネージ言語に基づいており、Compact Frameworkの実装がかなりあるため、複雑なゲームの一部のパフォーマンスを圧迫するのは非常に苦痛でイライラすることです。

XboxにはC#/ XNAまたはC ++ / DirectXを介してのみ展開できますが、2番目のオプションではXBLAライセンスの資格と開発キットの支払いが必要であり、非常に高価です(〜10000 $)。

Xboxはクローズドシステムであることを忘れないでください。TCP / IPとの直接のやり取りは忘れてください。XboxLiveに存在する他のコンソールとのみ通信できます。ネットワーク、および生のHTTP接続を行うことはできません。

したがって、ゲームを考えている場合は、XNAを試してみて、さらに生のパワーが必要な(そしてお金があれば)開発キットに移行してください。アプリケーションを考えている場合は、別のプラットフォームをターゲットにするだけです。


私は不思議異なるXNAと開発キットは、どのように...
スパイ

XNAは高レベルのC#APIです。開発キットは、C ++およびDirectXで作成されたゲームを展開できる特別なコンソールです。したがって、アクセスレベルが低く、全体的なパフォーマンスが向上します。
r2d2rigo

だから..完全に異なる
スプーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.