언리얼엔진3 to SandBox

언리얼엔진3 소스코드 원본 구조를 현재 프로젝트에 맞는 구조로 변경한 후의 모습을 SandBox 라고 칭한다. 여기선 이 과정에 고려해야 할 사항에 대해 언급한다.

디렉토리 구조

최초 UnrealEngine3 디렉토리 구조 그대로 개발을 진행해도 되지만 약간의 노력을 들이면 더 편하게 개발할 수 있는 구조를 가질 수 있다. 아래 두가지 디렉토리 구조가 있는데 처음 것은 원본 구조이고 다음 것은 수정된 디렉토리 구조이다.

파란색 텍스트는 유저에게 배포될 파일들이고, 빨간색 텍스트는 개발에 필요한 파일이다.

UnrealEngine3

  • Binaries
    • ActorX
    • Android
    • Editor
  • Development
    • Build
    • Builder
    • Documentation
  • Engine
  • ExampleGame
  • MobileGame
  • UDKGame

SandBox

  • Program
    • Client
      • Documentation
      • External
      • Src
      • Tools
    • Server ?
  • Release
    • Client
      • Binaries
      • Engine
      • ExampleGame
    • Server ?

SandBox 레이어를 둠으로써 얻는 이득은 다음과 같다.

  • 개발에 필요한 파일들과 배포에 필요한 파일을 쉽게 구분할 수 있다.
  • 서버 개발에 필요한 파일들도 똑같은 디렉토리 구조로 끼워 넣을 수 있다.
  • 리소스 제작자가 불필요한 디렉토리들을 신경쓸 필요가 없다. (다만 기획 직군은 필요에 따라 Src 하위의 .uc 파일들을 직접 참조해야할 수도 있을 것이다.)
  • 최신 버전의 엔진을 안정적으로 인티그레이션할 수 있는 구조이다.
    • UnrealEngine3 에 적용
    • SandBox 에 적용 후 확인
    • CustomProject 에 적용 후 확인

디렉토리 구조 변경 과정

위 SandBox 디렉토리 구조로 변경하기 위해 필요한 과정

디렉토리 복사

위 디렉토리 구조 중 SandBox (오른쪽) 형태로 디렉토리를 재배치 한다.

디렉토리 경로 교정

디렉토로 재 배치를 하며 생기는 경로 오류를 해결한다.

나는 토탈 커맨더울트라 에디트를 사용하므로 이를 이용하여 손쉽게 변경이 가능했다. 순서는 다음과 같다.

  1. Program/Client 에서 토탈커맨더의 File Files 기능을 이용하여 Search for 에 *.csproj *.vcproj *.vcxproj *.xml *.user *.bat *.cs 를 넣고 Find text 에 정규식으로 \.\.[\\\/]Binaries 를 넣는다.1)
  2. 결과창에 나온 모든 파일들을 울트라에디트로 열어서2) 다음의 정규식 (Perl or Unix 정규식) 으로 replace 한다.
    Src : \.\.([\\\/])Binaries
    Dst : \.\.\1\.\.\1Release\1Client\1Binaries
  3. 1~2 방법으로 Engine, ExampleGame, UDKGame 역시 수행한다.
  4. Src/Launch/Resources/PCLaunch.rc 파일을 열어 경로를 적절하게 조절한다. (ExampleGame, UDKGame)
  5. 일부 파일에 대해 Source 파일에 대한 경로를 수정해준다. (Src 폴더에서 혹은 VisualStudio 상에서 Development[\\\/] 란 정규식으로 검색하면 관련 파일들이 나온다.)
    1. Engine/Config/BaseEngine.ini
      [UnrealEd.EditorEngine]
      EditPackagesInPath=..\..\..\..\Program\Client\Src
    2. Src/Engine/Debugger/WTGlobals.h
      L"..\\..\\Development\\Src\\" -> L"..\..\..\..\Program\\Client\\Src\\"
    3. Src/Engine/Src/Fonix.cpp
      "../../Development/External/GamersSDK/4.2.1/Languages/" -> "../../../../Program/Client/External/GamersSDK/4.2.1/Languages/"
      "../../Development/External/GamersSDK/4.2.1/Languages/" -> "../../../../Program/Client/External/GamersSDK/4.2.1/Languages/" (한군데 더 있음)
    4. Src/Engine/Src/Texture2D.cpp
      TEXT("%s..\\..\\Development\\Src\\Engine\\%s") -> TEXT("%s..\\..\\..\\..\\Program\\Client\\Src\\Engine\\%s")
    5. Src/UnrealEd/Src/UnEdObject.cpp
      TEXT("%sDevelopment\\Src\\%s\\Classes\\%s.uc(%i)") -> TEXT("%s..\\..\\Program\\Client\\Src\\%s\\Classes\\%s.uc(%i)")
    6. Src/UnrealEd/Src/UnScrCom.cpp
      TEXT("%sDevelopment\\Src\\%s\\Classes\\%s.uc(1) : defaultproperties") -> TEXT("%s..\\..\\Program\\Client\\Src\\%s\\Classes\\%s.uc(1) : defaultproperties")
      TEXT("%sDevelopment\\Src\\%s\\Classes\\%s.uc(%i)") -> TEXT("%s..\\..\\Program\\Client\\Src\\%s\\Classes\\%s.uc(%i)")
  6. ExampleGame 빌드를 한번 해본다. 빌드가 성공해야 다음 단계로 넘어갈 수 있다.

불 필요한 파일들 삭제

PC 를 기반으로 하여 개발하는 세팅이므로 모바일, 콘솔 관련 파일들은 모두 지운다.

  • 지원하지 않는 게임 삭제
    • 솔루션 Games/Gears of War 삭제
    • 솔루션 Games/Nano Game 삭제
    • 솔루션 Games/Mobile Game 삭제
    • 솔루션 Games/Nano Mobile Game 삭제
  • 지원하지 않는 플랫폼 삭제
    • 솔루션 Games/Unreal Development Kit/Targets/Console 삭제
    • 솔루션 Games/Unreal Development Kit/UTGame/Ini/IPhone 삭제
    • 솔루션 Games/Unreal Development Kit/UTGame/Ini/PS3 삭제
    • 솔루션 Games/Unreal Development Kit/UTGame/Ini/Tegra 삭제
    • 솔루션 Games/Unreal Development Kit/UTGame/Ini/Xenon 삭제
    • 솔루션 Games/Example Game/Targets/Console and Mobile 삭제
    • 솔루션 Games/Example Game/ExampleGame/Ini/PS3 삭제
    • 솔루션 Games/Example Game/ExampleGame/Ini/Xenon 삭제
    • 솔루션 Platforms/Console 삭제
    • 솔루션 Platforms/Mobile 삭제
    • 솔루션 Platforms/Multiple/OnlineSubsystemGameSpy/PS3 삭제
    • Program/Client/Src/PS3 삭제
    • Program/Client/Src/Xenon 삭제
    • Program/Client/Src/Android 삭제
    • Program/Client/Src/IPhone 삭제
    • Program/Client/Src/OnlineSubsystemGameCenter 삭제
    • Release/Client/Engine/Config/Android 삭제
    • Release/Client/Engine/Config/IPhone 삭제
    • Release/Client/Engine/Config/Mobile 삭제
    • Release/Client/Engine/Config/PS3 삭제
    • Release/Client/Engine/Config/Xenon 삭제
    • Release/Client/Engine/Splash/PS3 삭제
    • Release/Client/Engine/Splash/Xbox360 삭제
    • Release/Client/ExampleGame/Build/IPhone 삭제
    • Release/Client/ExampleGame/Build/PS3 삭제
    • Release/Client/ExampleGame/Config/IPhone 삭제
    • Release/Client/ExampleGame/Config/Mobile 삭제
    • Release/Client/ExampleGame/Config/PS3 삭제
    • Release/Client/ExampleGame/Config/Xenon 삭제
    • Release/Client/UDKGame/Config/PS3 삭제
    • Release/Client/UDKGame/Config/Xenon 삭제

사소한 오류 수정 (선택사항)

known issue 에 대해 언급한다. 원본에도 동일하게 존재하는 오류이므로 이 섹션은 수행하지 않아도 무방하다.

  • :!: 라이센스 획득 미들웨어
    • 솔루션 Unreal Engine/Engine/Bink 하위 파일들은 라이센스 획득하면 얻을 수 있는 파일들. 일단 지우지 말자.
  • :!: 파일 오류?
    • 솔루션 Unreal Editor/UnrealEd/Inc/UIEditor/WxDlgAddCalloutButton.h 파일이 없다. Development 하위를 모두 검색해봐도 없음. 일단 삭제
    • 솔루션 Unreal Engine/Core/Inc/Epic/BaseInclude.h 파일이 없다. 그 밑에 Licensee 폴더가 (Licensee 를 위한) 같은 내용이므로 Epic 폴더는 지운다. Epic 은 아마 내부적으로 사용되는 파일인 듯..
    • 솔루션 Unreal Engine/Engine/NvidiaApex/PxFoundation/windows/PxFile.h 파일이 없다. 일단 유지. (PxFileBuf.h 가 있긴한데..)
    • 솔루션 Unreal Engine/Engine/NvidiaApex/PxFoundation/windows/PxString.h 파일이 없다. 일단 유지. (PxStream.h 가 있긴한데..)
1) 토커는 Unix 정규식을 따른다.
2) 열기전에 모두 ReadOnly 해제