c#으로 게임 엔진 만들기(2)

20
C# 으으 으으 으으 으으으 (2) 으으으 NHN NEXT

Upload: -

Post on 19-Jun-2015

1.199 views

Category:

Software


4 download

TRANSCRIPT

Page 1: C#으로 게임 엔진 만들기(2)

C# 으로 게임 엔진 만들기 (2)

김지환NHN NEXT

Page 2: C#으로 게임 엔진 만들기(2)

목표

• C# 에서 Native C++ 연동하기 . ( C++/CLI 이용 )

• DirectX Sample 으로 Core Lib 만들기

Page 3: C#으로 게임 엔진 만들기(2)

C++/CLI

• C++ 프로젝트에서 Static Library ( .lib ) 를 생성• 생성한 Lib 를 C++/CLI 로 Wrapping 해서 DLL

생성• C# 에서 생성한 DLL 사용

http://topnanis.tistory.com/97

Page 4: C#으로 게임 엔진 만들기(2)

C++/CLI

저번 PPT 에 자세히 적어놨기 때문에 자세한 설명은 생략하겠습니다 .

새 솔루션을 만들고 C# 프로젝트를 추가합니다 .

Page 5: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

이번엔 프로젝트가 하나 더 추가되었습니다 .

1. C++2. C++/CLI3. C#

총 3 개의 프로젝트를 관리하게 됩니다 .

Page 6: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

그리고 이번엔 C++ Project 를 생성할 때DLL 이 아니라 정적 라이브러리를 선택합니다 .

Page 7: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

이렇게 프로젝트가 생성되었으면 성공입니다 .

그리고 모든 프로젝트의 Project Output 을

..\Bin 으로 설정해주세요 .

Page 8: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

Core Project ( C++ ) 의 소스입니다 .

Page 9: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

CLI Project ( C++/CLI ) 의 소스입니다 .

Page 10: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

마지막으로Tool Project ( C# ) 의 소스입니다 .

Page 11: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

지난 PPT 와 똑같이 Add ( 1, 2 ) 의 결과값인 3 이 출력됩니다 .

Page 12: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

• C++/CLI 는 C++ 과 C# 의 문법을 둘 다 사용할 수 있습니다 . ( 전부는 아님 )

• 그래서 메인 로직은 C++ 로 만들고 C++/CLI 에선 C# 에서 사용할 수 있도록 C++ 로직에 껍데기를 씌우는 것입니다 .

Page 13: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

CLI 의 코드를 보면WrapTest 클래스는 Test 클래스의 메소드를호출하는 껍데기 역할 (Wrapping) 을 하고 있습니다 .

Page 14: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

DirectX Sample Browser 의 한 예제를 C# 에서 사용한 결과입니다 .

Page 15: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

Core Project ( C++ ) 의 클래스 헤더파일입니다 .DirectX Sample 을 그냥 클래스로 묶은거라 별 차이는 없습니다 .나중에 프로젝트 다운로드 받으셔서 뜯어보세요 .

Page 16: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

Tool Project ( C# ) 의 코드입니다 .

처음 보는 키워드가 많이 있는데 간단히 설명하겠습니다 .

Page 17: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기Core.Init( this.Handle.ToInte32() )CLI Project 에서 선언한 Core Class 의 Init 메소드를 호출합니다 .Init 메소드에서 필요한 인자는 Handle 인데여기서는 현재 Form 의 핸들을 넘깁니다 .

Page 18: C#으로 게임 엔진 만들기(2)

C# 에서 NATIVE C++ 연동하기

Async, await비동기 (async) 작업을 실행하겠다는 의미입니다 .Await 를 만나기 전까진 동기적으로 실행되다가 await 를 만나면 메소드의 제어가 호출자에게 넘어갑니다 .

그냥 쉽게 말하면 프로그램이 끝날 때까지 Render() 가 실행되는데 Render 뿐만 아니라 다른 함수도 같이 실행될 수 있도록 하는 것입니다 .

C++ 에선 MsgProc 함수에 의해 계속 Render() 가 호출될 수 있습니다 .C# 에선 여러 방법이 있지만 저는 이 방법으로 꾸준히 Render() 를 호출하였습니다 .

Page 19: C#으로 게임 엔진 만들기(2)

DirectX Sample Project 를 Lib 로 만들어 C# 에 적용해 보았습니다 .

다음 PPT 엔 C++/CLI 의 기본 문법과 연동하기 위해 사용된 C# 문법에 대해 알아보겠습니다 .

사용했던 프로젝트https://github.com/jihwankim/CS_PPT

Page 20: C#으로 게임 엔진 만들기(2)

END