Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1

Preview:

Citation preview

Creating Game Tool

With Project Anarchy

- Vision Engine을 이용한 Game Tool 만들기 Part 1-

분 류 NHN NEXT 1기 실전프로젝트 산출물

실습 업체 블루홀 스튜디오

프로젝트 팀명 그랜드부다페스트(문진상/신동찬)

작성자 문진상

Created Date 2014-11-15

준비물

• Project Anarchy

• Visual Studio – 2010 + SP1• Visual Studio 2010이 아니면 컴파일이 불가능하다

• 서비스 팩 1 이 없으면 LNK1123 에러가 발생한다

• 2013에서도 2010이 설치되어 있을 때 컴파일 옵션을 2010으로 두면사용할 수 있지만 2013 한글판에서만 된다

준비 – Project Anarchyhttp://www.projectanarchy.com/ko

다운로드 페이지로 이동

준비 – Project Anarchyhttp://www.projectanarchy.com/ko/download

운영체제에 맞는 프로젝트를 받으면 된다

어차피 Visual Studio로 개발해야 할 것이다

다운로드 받은 파일을 실행해서 설치한다

Wrapper

Tool 기본 구조

•크게 Client(C++) – Engine Wrapper(CLI) – Tool(C#) 형태

Vision Engine

ClientTool

Tool 기본 구조게임 툴

클라이언트

Wrapper

클라이언트는 VAppImpl 클래스를 상속받아 만들어진다.

하지만 VAppImpl은 C#과 호환성이 없다.

따라서 툴에서 사용하기 위해서는 VisionApp_cl를 이용한다.

Tool 기본 구조

C# 툴은 CLI를 참조

Tool 기본 구조

툴을 .NET Framework 4로 설정하는 것이 좋다.Vision Engine에 미리 만들어져 있는 Managed dll은 모두 .NET Framework 4까지만 지원한다.혹시 저 dll들을 쓰게 될지도 모르므로 4로 설정한다

CLI 클래스의 property sheet 설정

•매우 귀찮은 부분이다

•가장 큰 문제가 발생하는 부분은 Vision Engine 에서 사용하는함수들의 calling convention이 clr 형식과 맞지 않다는 것이다

CLI 클래스의 property sheet 설정

• msdn 에서• /Gd, /Gr, /Gv and /Gz are not compatible with /clr:safe or /clr:pure.

•라고 /clr은 빠져 있기 때문에 /clr로 설정하면 될 것 같지만• … 잘 안 된다

•이 부분은 이미 설정이 완료된 property sheet를 가져다 쓰는것을 권장

CLI 클래스의 property sheet 설정

•참고할 만한 property sheet는 vision engine 프로젝트 안에 들어있는, 이미 배포되어 검증된 property sheet

AnarchySDK\Workspace\Win32_VS2010_anarchy_DX9_C++

CLI 클래스의 property sheet 설정

•적절한 Lib 파일의 위치도 정해줘야 하고• Debug, release lib가 따로 있다

•헤더 파일을 쉽게 include 할 수 있도록 경로를 추가한다

Tool은 GameEngine을 감싸고 있다

Display비어있는 Control의 Handle을 넘겨받아 해당 핸들에화면을 뿌려준다

Tool은 GameEngine을 감싸고 있다

Wrapper 화면을 표시할 창의 핸들 및 크기를 넘겨받아

VisAppConfig_cl 클래스에 할당하고, 이 클래스로 엔진을 초기화 한다

Tool은 GameEngine을 감싸고 있다

Tool

Tool 에서는 StartEngine 메소드를 불러오면서 차례대로 화면의 핸들, 넓이, 높이를 넘겨주면 된다

위 코드에서는 PictureBox 클래스인 scene_viewer 의 핸들과 크기를 넘겨주고 있다

이 부분

Tool은 GameEngine을 감싸고 있다

앞서 말한 대로 VisionApp_cl

Wrapper

반드시 해 줘야 하는 부분인데중대한 문제가 있다. 다음 페이지에…

StartEngine() 함수 내부

vForge

Plugin을 로드하려고 하면 이런 메시지가 뜨면서 프로그램이 종료된다.

즉 vForge를 실행한 상태에서만 Vision Engine을 쓸 수 있다는 것. 엔진 정책에 관한 문제라고 한다.

LoadAllEnginePlugin() 함수는 소스코드로 제공되는 것이 아니라서 vForge 실행 요구를 우회하기 힘들다

순순히 vForge를 실행한 다음 툴을 실행하도록 하자

Run()

왼쪽 화면처럼 엔진이 구동되게 하려면?

Vision Engine의 Run() 함수를 매 프레임호출해주면 된다

Run()

이 함수를 주기적으로 부르면 된다

Vision::GetApplication()->Run(); 함수는씬을 업데이트하고 화면을 갱신하는 모든 동작을 포함하고 있다.

Wrapper

물론 이렇게 마구 부르면 안 좋습니다.

Run()

• Run() 을 하더라도 카메라, 조명, 오브젝트가 없다면 화면은 검게 나올 뿐이다.

• Tool 기능을 제대로 하기 위해서는 오브젝트를 생성, 제거하고위치정보 등을 파일로 만들 수 있어야 한다.• 그래야 클라이언트에서 읽어서 쓸 수 있다.

•이 부분은 Part 2 에서 계속…