1. Creating Game Tool
With Project Anarchy
- Vision Engine을 이용한 Game Tool 만들기 Part 1-
분 류 NHN NEXT 1기 실전프로젝트 산출물
실습 업체 블루홀 스튜디오
프로젝트 팀명 그랜드부다페스트(문진상/신동찬)
작성자 문진상
Created Date 2014-11-15
2. 준비물
• Project Anarchy
• Visual Studio – 2010 + SP1
• Visual Studio 2010이 아니면 컴파일이 불가능하다
• 서비스 팩 1 이 없으면 LNK1123 에러가 발생한다
• 2013에서도 2010이 설치되어 있을 때 컴파일 옵션을 2010으로 두면
사용할 수 있지만 2013 한글판에서만 된다
3. 준비 – Project Anarchy
http://www.projectanarchy.com/ko
다운로드 페이지로 이동
4. 준비 – Project Anarchy
http://www.projectanarchy.com/ko/download
운영체제에 맞는 프로젝트를 받으면 된다
어차피 Visual Studio로 개발해야 할 것이다
다운로드 받은 파일을 실행해서 설치한다
5. Wrapper
Tool 기본 구조
• 크게 Client(C++) – Engine Wrapper(CLI) – Tool(C#) 형태
Vision Engine
Client
Tool
6. Tool 기본 구조
게임 툴
클라이언트
Wrapper
클라이언트는 VAppImpl 클래스를 상속받아 만들어진다.
하지만 VAppImpl은 C#과 호환성이 없다.
따라서 툴에서 사용하기 위해서는 VisionApp_cl를 이용한다.
8. Tool 기본 구조
툴을 .NET Framework 4로 설정하는 것이 좋다.
Vision Engine에 미리 만들어져 있는 Managed dll은 모두 .NET Framework 4까지만 지원한다.
혹시 저 dll들을 쓰게 될지도 모르므로 4로 설정한다
9. CLI 클래스의 property sheet 설정
• 매우 귀찮은 부분이다
• 가장 큰 문제가 발생하는 부분은 Vision Engine 에서 사용하는
함수들의 calling convention이 clr 형식과 맞지 않다는 것이다
10. CLI 클래스의 property sheet 설정
• msdn 에서
• /Gd, /Gr, /Gv and /Gz are not compatible with /clr:safe or /clr:pure.
• 라고 /clr은 빠져 있기 때문에 /clr로 설정하면 될 것 같지만
• … 잘 안 된다
• 이 부분은 이미 설정이 완료된 property sheet를 가져다 쓰는
것을 권장
11. CLI 클래스의 property sheet 설정
• 참고할 만한 property sheet는 vision engine 프로젝트 안에 들
어있는, 이미 배포되어 검증된 property sheet
AnarchySDKWorkspaceWin32_VS2010_anarchy_DX9_C++
12. CLI 클래스의 property sheet 설정
• 적절한 Lib 파일의 위치도 정해줘야 하고
• Debug, release lib가 따로 있다
• 헤더 파일을 쉽게 include 할 수 있도록 경로를 추가한다
14. Tool은 GameEngine을 감싸고 있다
Wrapper 화면을 표시할 창의 핸들 및 크기를 넘겨받아
VisAppConfig_cl 클래스에 할당하고, 이 클래스로 엔진을 초기화 한다
15. Tool은 GameEngine을 감싸고 있다
Tool
Tool 에서는 StartEngine 메소드를 불러오면서 차례대로 화면의 핸들, 넓이, 높이를 넘겨주면 된다
위 코드에서는 PictureBox 클래스인 scene_viewer 의 핸들과 크기를 넘겨주고 있다
이 부분
16. Tool은 GameEngine을 감싸고 있다
앞서 말한 대로 VisionApp_cl
Wrapper
반드시 해 줘야 하는 부분인데
중대한 문제가 있다. 다음 페이지에…
StartEngine() 함수 내부
17. vForge
Plugin을 로드하려고 하면 이런 메시지가 뜨면서 프로그램이 종료된다.
즉 vForge를 실행한 상태에서만 Vision Engine을 쓸 수 있다는 것. 엔진 정책에 관한 문제라고 한다.
LoadAllEnginePlugin() 함수는 소스코드로 제공되는 것이 아니라서 vForge 실행 요구를 우회하기 힘들다
순순히 vForge를 실행한 다음 툴을 실행하도록 하자
19. Run()
이 함수를 주기적으로 부르면 된다
Vision::GetApplication()->Run(); 함수는
씬을 업데이트하고 화면을 갱신하는 모든 동작을 포함하고 있다.
Wrapper
물론 이렇게 마구 부르면 안 좋습니다.
20. Run()
• Run() 을 하더라도 카메라, 조명, 오브젝트가 없다면 화면은 검
게 나올 뿐이다.
• Tool 기능을 제대로 하기 위해서는 오브젝트를 생성, 제거하고
위치정보 등을 파일로 만들 수 있어야 한다.
• 그래야 클라이언트에서 읽어서 쓸 수 있다.
• 이 부분은 Part 2 에서 계속…