프로그래머가 아닌 사람을위한 XNA 게임 배포 촉진


12

저는 현재 XNA의 RPG 스타터 키트를 기본으로 사용하여 RPG를 작업하고 있습니다. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) 저는 소규모 팀 (두 명의 디자이너와 한 명의 음악 / 사운드 아티스트)과 함께 일하고 있습니다. 프로그램 제작자. 현재, 우리는 다음과 같은 (지속 불가능한) 시스템으로 작업하고 있습니다 : 팀은 게임에 추가하기 위해 새로운 사진 / 사운드를 생성하거나 기존의 사운드 / 픽스를 수정 한 다음 현재 빌드를 유지하는 저장소에 작업을 커밋합니다. 모든 것. (코드, 이미지, 사운드 등) 매일 매일 새로운 이미지, 코드 변경 및 사운드를 반영하여 새 설치 관리자를 만들고 모든 사람이 설치합니다.

내 문제는 이것입니다 : 예를 들어 나머지 팀이 전투 소리를 대체 할 수있는 시스템을 만들고 싶습니다. 내가 구축하기를 기다리지 않고 변경 사항을 즉시 볼 수 있습니다. XNA의 설정 방식은 게시하면 모든 이미지와 사운드 파일을 인코딩하므로 팀이 "핫 스왑"할 수 없습니다. 모든 사람의 컴퓨터에 Microsoft VS를 설치하고 신속하게 게시하는 방법을 보여줄 수 있지만 더 간단한 방법이 있는지 알고 싶었습니다.

XNA를 사용하는 팀과 함께 작업 할 때이 문제에 대해 다른 사람이 있습니까?


2
모든 이미지와 사운드 파일을 XNA로 인코딩한다는 것은 XNA 콘텐츠 파이프 라인에 의해 만들어지고 .xnb 파일로 변환되었음을 의미합니까?
David Gouveia

정확한 확장명을 기억할 수는 없지만 표준 파이프 라인을 통과합니다.
Sal

답변:


12

우선, 매번 설치 프로그램을 게시하고 만들어야 할 필요는 없다고 생각합니다. 프로젝트를 빌드하고 출력 파일 (예 : EXE 및 Content 폴더와 사용중인 DLL 종속성)을 리포지토리에 저장하면 XNA Redist가 설치되어있는 한 컴퓨터에서도 실행됩니다.

귀하의 질문에 관해서는 두 가지 솔루션을 생각할 수 있습니다. 그중 하나는 컴퓨터에 Visual Studio를 설치하고 다른 하나는 게임을 약간 변경하는 것과 관련이 있습니다.

  • Visual Studio를 설치하고 XNA 콘텐츠 파이프 라인을 통해 자산을 전달하도록 지시합니다. 컨텐츠 파이프 라인 프로젝트를 작성하고 파일을 끌어서 빌드하면됩니다. 그런 다음 결과 XNB 파일을 프로젝트 폴더의 파일과 교체하고 EXE를 실행하여 변경 사항을 볼 수 있습니다.

  • Windows 용으로 개발하는 경우 콘텐츠 파이프 라인을 거치지 않고 런타임에 자산을 원래 형식으로로드하도록 코드를 변경할 수 있습니다. 이미지를로드 할 때 Texture2D.FromStream( 이 예제같이 ) 사용할 수 있으며 오디오를 위해 가장 좋은 해결책은 FMOD API를 대신 사용하는 것입니다 ( 이 예제 와 같이 ). 그런 다음 자산을 직접 교환하고 게임을 실행할 수 있습니다.

더 나아 가기 위해 게임을 최대한 데이터 중심으로 만들려고 할 수도 있습니다. 이는 기본적으로 캐릭터 클래스 통계, 사용중인 이미지 및 사운드 파일의 경로와 같이 쉽게 변경할 수있는 모든 것을 코드에서 꺼내 외부 텍스트 파일에 배치해야 함을 의미합니다. (예 : XML, JSON, INI). 그런 다음 텍스트 편집기에서 해당 파일을 편집하기 만하면 게임의 변경 사항을 볼 수 있으며 다시 빌드 할 필요가 없습니다.


1
빠른 답변 감사합니다. 두 번째 솔루션을 좋아하고 그로부터 제기 된 질문이 있습니다 .VS에서 #IF DEBUG와 비슷한 스타일의 플래그를 만드는 방법이 있습니까? #IF NON_PRODUCTION_MODE, 그렇게하면이 비 프로덕션 호출에서 모든 FromStream () 호출을 래핑 할 수 있습니다. 마지막으로 게임을 프로덕션으로 보낼 준비가되면 모드를 쉽게 전환하고 사운드 파일을 다시 인코딩 할 수 있습니다.
Sal

1
@ 살 네, 당신은 그냥 할 수 있습니다. 여기에서 설명서를 확인 하십시오 .
David Gouveia

1
@Sal 기본적으로 Visual Studio는 디버그 및 릴리스라는 두 가지 빌드 프로필을 만듭니다. 에서 둘 사이를 교환 할 수 있습니다 Build->Configuration Manager. 기본적으로 디버그 빌드에는 DEBUG컴파일 기호가 정의되어 있습니다. 즉, 릴리스되지 않은 코드를로 랩핑 할 수 있습니다 #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif.
Cypher

1
@Sal 또한 저장소에 bin / * 디렉토리를 포함하는 것이 훨씬 쉬웠으며 디자이너 / 아티스트 / qa가 bin 폴더를 체크 아웃하여 최신 및 가장 큰 파일을 실행할 수 있도록했습니다. 그렇게함으로써 모든 의존성, 질감, 오디오 등을 모두 얻을 수 있습니다. 그리고 매일 그들이해야 할 일은 svn update작업 디렉토리에 있었고 속도에 달렸습니다.
Cypher

4

파티에 조금 늦었지만 여기 내 아이디어가 있습니다.

나는 이미 존재하는 코드베이스를 수정하는 것과 같은 것을 포함하지 않는 세 번째 가능성과 함께 갈 것입니다. 출력 디렉토리 어딘가에 바이너리 (실제 게임 .exe 및 컴파일 된 관련 .dll)를 커밋 (및 복사)하는 경우 (예 : 빌드 후 스크립트)에 효과적입니다. 앞으로 Visual Studio 2010 및 XNA Game Studio 4.0에 대해 이야기하고 있다고 가정합니다 (이 절차는 다른 버전과 매우 유사하므로 숫자를 바꿔야합니다)

따라서 아이디어는 다음 단계를 사용하여 .sln 솔루션이있는 프로젝트 루트에 스크립트 (.cmd)를 작성하는 것입니다.

  1. "Visual Studio 2010 명령 프롬프트"를 호출하십시오.

    "C : \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat"x86 호출

    이는 스크립트가 XNA 라이브러리와 필요한 모든 도구 및 바이너리를 찾을 수 있도록하기위한 것입니다.

  2. 컨텐츠 프로젝트 (.contentproj)에서 MSBuild 태스크를 호출하십시오.

    msbuild / property : XNAContentPipelineTargetPlatform = Windows /property:XNAContentPipelineTargetProfile=mygame.content/projectfile.contentproj에 도달

    지정된 다른 플랫폼 / 프로필로 속성을 수정할 수 있습니다. 한 번에 더 많은 플랫폼 (Windows Phone, Xbox 360 또는 Windows)을위한 컨텐츠를 구축 할 수도 있습니다. 프로필은 다음과 같습니다. Reach 또는 HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. 바이너리 + 실제 게임이 저장소에 저장된 폴더에 출력을 재귀 적으로 복사하십시오.

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

    플래그에 대한 자세한 내용은 명령 프롬프트에서 호출 할 수 있습니다 xcopy /?. 중요한 것은 다음과 같습니다. /d, 수정 된 파일 만 복사-많은 자산이있는 경우 기존 및 수정되지 않은 파일을 반복해서 복사하지 않는 것이 유용합니다. /y기존 파일을 자동으로 덮어 써서 최신 버전으로 업데이트 할 수 있습니다. 내가 아는 한 xcopy노멀 copy이 재귀 적으로 폴더를 복사 할 수 없기 때문에 사용 했으며 아마도 폴더와 하위 폴더의 내용을 구성하고있을 것입니다. 또한 정상보다 좋습니다 copy(많은 다른 플래그).

  4. pause스크립트가 사용자 입력을 기다리도록 호출 하십시오. 빌드가 양호하고 오류가 없는지 확인하는 데 유용합니다.

이제 컨텐츠 파일을 수정하는 아티스트 (또는 누구나)는 .cmd 스크립트를 두 번 클릭하기 만하면 새 컨텐츠가 빌드되고 커미트 된 아티팩트를 테스트 할 준비가 된 출력 디렉토리에 복사됩니다.

그러나 David의 포스트의 첫 번째 요점으로 넘어 가야 할 작은 문제가 있습니다. 아티스트가 파일을 추가 / 제거 / 이동하여 컨텐츠 프로젝트를 수정하려면 파일을 열어야합니다. Visual Studio에서 프로젝트 (또는 수동으로 프로젝트 파일을 편집하면 누구나 할 수 있습니다). 내가 말했듯이, 이것은 저장소에서 새 파일을 커밋 할 수 있기 때문에 작은 문제입니다. 코더는 코드를 처리하기 위해 파일을 처리 할 때 파일을 콘텐츠 프로젝트에 포함시킵니다.

이 아이디어에서 Shawn Hargreaveas는 명령 줄에서 msbuild 및 콘텐츠 프로젝트 작성에 대한 내용을 게시했습니다. http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx 그의 해결책은 새 파일을 만드는 것이었지만 기존 프로젝트 파일을 직접 사용하는 것이 더 쉽고 유지 관리가 쉽다고 생각합니다.

추신 : 긴 게시물 xD에 대해 죄송합니다

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