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

20
Creating Game Tool With Project Anarchy - Vision Engine을 이용한 Game Tool 만들기 Part 1- NHN NEXT 1기 실전프로젝트 산출물 실습 업체 블루홀 스튜디오 프로젝트 팀명 그랜드부다페스트(문진상/신동찬) 작성자 문진상 Created Date 2014-11-15
  • Upload

    -
  • Category

    Software

  • view

    237
  • download

    3

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

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

Creating Game Tool

With Project Anarchy

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

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

실습 업체 블루홀 스튜디오

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

작성자 문진상

Created Date 2014-11-15

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

준비물

• Project Anarchy

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

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

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

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

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

다운로드 페이지로 이동

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

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

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

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

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

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

Wrapper

Tool 기본 구조

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

Vision Engine

ClientTool

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

Tool 기본 구조게임 툴

클라이언트

Wrapper

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

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

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

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

Tool 기본 구조

C# 툴은 CLI를 참조

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

Tool 기본 구조

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

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

CLI 클래스의 property sheet 설정

•매우 귀찮은 부분이다

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

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

CLI 클래스의 property sheet 설정

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

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

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

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

CLI 클래스의 property sheet 설정

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

AnarchySDK\Workspace\Win32_VS2010_anarchy_DX9_C++

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

CLI 클래스의 property sheet 설정

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

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

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

Tool은 GameEngine을 감싸고 있다

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

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

Tool은 GameEngine을 감싸고 있다

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

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

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

Tool은 GameEngine을 감싸고 있다

Tool

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

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

이 부분

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

Tool은 GameEngine을 감싸고 있다

앞서 말한 대로 VisionApp_cl

Wrapper

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

StartEngine() 함수 내부

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

vForge

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

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

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

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

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

Run()

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

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

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

Run()

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

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

Wrapper

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

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

Run()

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

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

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