XNA는 Xbox 360의 전문 개발에 적합합니까?


16

Xbox 360 용 개발을 시작하고 PC와 Xbox를 모두 대상으로 할 수있는 XNA 프레임 워크에 대해 들었습니다. 클라이언트가 일반 컴퓨터에서도 게임 / 앱을 사용할 수 있기 때문에 매력적인 옵션처럼 들립니다.

그러나 저는 Xbox 장면을 처음 접했습니다. XNA는 애호가 개발에만 해당되며 준 전문 또는 기업 응용 프로그램 개발에는 권장되지 않습니까? XNA에 C ++ 개발 솔루션의 기능이 부족하거나 Xbox에서 실행되는 게임 / 앱의 성능이 크게 저하됩니까?

XNA없이 C #을 사용하여 Xbox를 타겟팅 할 수 있습니까? 장점은 무엇입니까?

저수준 프로그래밍은 C ++에서 DirectX와 직접 작동합니다. 장점은 무엇입니까?

답변:


15

짧은 대답 : .

XNA는 도구 일뿐입니다. 프로세서를 많이 사용하고 그래픽을 많이 사용하는 게임을 제외한 모든 게임에 적합합니다. Xbox 360 게임을 위해 XNA를 고려하고 있다면 여기에 놓칠 내용이 있습니다.

  • 실제로 매우 빠른 CPU 부동 소수점 연산 을 수행하기 위해 SIMD / Vector 장치에 액세스
  • C #보다 약간 빠른 모국어 코드 사용 기능
  • 능력은 일하기 조금 당신은 메모리 할당 방법에 비트 lazier
  • XBLIG 게임은 6 개의 코어 중 4 개에만 액세스 할 수 있습니다 (하지만 여전히 3 개의 CPU를 모두 얻지 만 풀 코어가 아니므로 많이 놓치지 않습니다)-이것이 XBLIG가 아닌 XNA에 적용되는지 확실하지 않음 계략
  • 매우 모호한 그래픽 속임수를위한 완벽한 DirectX 액세스

더있을 수도 있습니다-이것은 내 머리 꼭대기에 있습니다.

당신이 경우 : (추측이 됩니다 에서와 같이 전문 개발자 (하십시오 devkit이)가, 내가 생각하는 당신 같은 Windows에서 P / 호출 등의 네이티브 코드와 XNA를 사용할 수있는 두 세계의 베스트 당신은 마이크로 소프트에게 물어 것입니다... XDK 도 참조하십시오 .)

결론은 XNA 게임이라는 것이다 거의 빨리 네이티브 게임 등과 할 수있는 거의 많은 재료로. 설득력없는 이유를 찾지 않으면 사용하는 것이 좋습니다.

360에 대해 관리되는 DirectX가 있는지 모르겠습니다. SlimDX 가 시작하기에 좋은 곳일 것 입니다.


1
"XBLIG"는 무엇입니까?
Ricket

2
Xbox 라이브 인디 게임
dotminic

코어는 3 개 뿐이며 모든 코어에 액세스 할 수 있습니다. 2 개의 스레드에 액세스 할 수 없습니다. 이러한 스레드 중 하나는 XNA 용이고 다른 하나는 XBOX OS와 마찬가지로 게임을 만들 때 아무도 액세스 할 수없는 스레드입니다.
Olhovsky

1
또한 메모리 할당에 게으르지 않습니다. 매우 간단한 게임을 제외하고 모든 객체 (C ++보다 나쁘지 않은 할당 / 무료 유형 모델 포함)를 풀링하여 세대 별 수집 방식을 사용하는 .NET Compact CLR에서 값 비싼 가비지 수집을 방지해야합니다.
Olhovsky

12

XBOX 또는 Playstation devkit에 $ 10,000를 기꺼이 지불하지 않는 한, 개발할 수있는 유일한 콘솔은 XBOX 360 뿐이며 XNA를 사용하는 유일한 방법입니다.

전문 개발을 위해 XBOX (대부분의 게임, 특히 2D 게임이 필요하지 않음)의 처리 능력을 100 % 얻을 필요가 없다면 실제로 XNA는 개발에 훨씬 좋습니다.

다른 응답자가 저지른 몇 가지 실수 :

XBOX에는 3 개의 코어 만 있습니다. XNA를 사용하여 이들 모두에 액세스 할 수 있습니다.

각 코어에는 하이퍼 스레딩이 있으며 2 개의 하이퍼 스레드를 지원합니다. 4/6 스레드에만 액세스 할 수 있습니다. 이러한 스레드 중 하나는 XNA를위한 것입니다. 다른 하나는 XBOX OS에서 사용되는 게임 개발자가 액세스 할 수없는 스레드입니다.

XBOX의 C #은 Windows의 C #보다 훨씬 느립니다. XBOX는 매우 가볍고 많은 데스크톱 CLR의 최적화 기능이없는 .NET 컴팩트 CLR을 사용합니다. XBOX 보안 기능은 프로그램이 자체 소스 코드를 수정하지 못하게합니다. 이로 인해 .NET 코드를 실행하기가 훨씬 어려워지고 실행 속도가 훨씬 줄어 듭니다 . C ++ 네이티브 코드로 관리 코드의 성능을 경쟁력있게 만드는 요소 중 하나는 CLR이 자체 코드를 수정하여 캐시 일관성을 최적화 할 수 있다는 것입니다. XNA dev 팀은 C #을 XBOX에서 실행하기 위해 꽤 큰 농구 대를 뛰어 넘어야 하며이 농구 대와 관련된 성능 비용이 있습니다.

메모리 할당으로 너무 게으르지 않아야합니다. Windows의 XNA는 관리되는 환경에서 기대하는대로 메모리 할당을 크게 단순화합니다. 그러나 XBOX에서 .NET 컴팩트 CLR은 가비지 수집에 대해 스위프 및 컴팩트 접근 방식을 사용하며 수집으로 인해 게임에서 말더듬을 방지하는 일반적인 방법은 수집을 완전히 피하는 것입니다. 이를 위해서는 클래스에 객체 풀을 사용하고 일반적으로 Windows 환경에서 클래스를 사용하는 작은 객체에 구조체를 사용해야합니다. 객체 풀링은 일반적으로 객체 관리의 할당 / 무료 모델을 필요로하며, 이는 C ++ 메모리 관리보다 나쁘지 않습니다.

그러나 C # / XNA에서의 개발은 DirectX API (XNA 인)가없는 C ++에서의 개발보다 훨씬 빠르고 쉽습니다.

다음은 4 주 동안 작업 한 후 XNA에서하는 게임의 상태입니다.

4 주 개발 후 게임 스크린 샷

이를 통해 XNA 라이브러리 / API를 사용한 개발이 C #과 얼마나 빠른지를 알 수 있습니다.

이 스크린 샷은 XBOX에서 약 65FPS로 렌더링됩니다.

당신이 취미 게임 개발자이고 콘솔 게임을 만들고 싶다면 XNA + XBOX가 유일한 현실적 옵션 일뿐 만 아니라 매우 놀라운 옵션, 재미있는 개발 환경 및 많은 XBOX Live Arcade 게임이되었습니다. XNA로 만들었고 수십만 달러를 벌었습니다. ( 예 : Limbo )


1
XNA dev에 대한 가장 명확한 답변 중 하나입니다. 감사합니다.
keyle

4

XNA는 양날입니다. 비교적 사용하기 쉽지만 확장 성과 사용자 정의가 가능합니다. 문제는 관리되는 언어를 기반으로하고 너무 컴팩트 한 프레임 워크 구현으로 복잡한 게임의 성능을 저하시키는 것이 매우 고통스럽고 실망 스러울 수 있다는 것입니다.

C # / XNA 또는 C ++ / DirectX를 통해서만 Xbox에 배포 할 수 있지만 두 번째 옵션을 사용하려면 XBLA 라이센스를 획득하고 devkit에 대한 비용을 지불해야합니다 (매우 비싸다 (~ 10000 $)).

Xbox는 폐쇄 형 시스템입니다. 직접적인 TCP / IP 상호 작용을 잊어 버리십시오. Xbox Live에있는 다른 콘솔과 만 통신 할 수 있습니다! 원시 HTTP 연결을 수행 할 수 없습니다.

따라서 게임을 생각하고 있다면 XNA에 시도하고 더 많은 힘이 필요하면 devkit으로 이동하십시오. 응용 프로그램을 생각하고 있다면 다른 플랫폼을 타겟팅하십시오.


XNA와 devkit이 어떻게 다른지 궁금합니다.
Spooks

XNA는 고급 C # API입니다. devkit은 C ++ 및 DirectX로 작성된 게임을 배포 할 수있는 특수 콘솔로, 전반적인 액세스 수준이 낮고 성능이 향상되었습니다.
r2d2rigo

너무 .. 완전히 다른
Spooks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.