SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Creating Game Tool
With Project Anarchy
- Vision Engine을 이용한 Game Tool 만들기 Part 2-
분 류 NHN NEXT 1기 실전프로젝트 산출물
실습 업체 블루홀 스튜디오
프로젝트 팀명 그랜드부다페스트(문진상/신동찬)
작성자 문진상
Created Date 2015-1-03
지난 줄거리
• 이렇게 생긴 툴을 만들어 볼 것입니다
Wrapper
Vision Engine
Client
Tool
게임 툴
클라이언트
Wrapper
지난 줄거리
• Run() 함수 안에서 일어나는 일들은 엔진이 알아서 한다!
• 하지만 아무것도 안 해도 된다는 뜻은 아니다!
• 아무것도 안 하면 그냥 까만 화면만 나올 뿐…
• 그렇다면 화면을 채울 Entity를 만들어보자
Entity
Vision:: 네임스페이스를 이용해 별도의 선언 없이 Entity를 만드는 것이 가능
만드는 김에 조명도 하나 달아주면?
잘 나온다
Wrapper
참고로 이 함수들은 만들어진 Entity의 포인터를
리턴하기 때문에 Scale, Position 등을 바꿀 때
사용할 수 있다.
Tool에서 Entity가 왜 중요한가?
• Tool 에서 오브젝트를 배치하는 기능은 결국 Entity를 생성하는
기능이다
• 대부분의 게임 프로젝트에서 특성에 맞는 GameObject를 생성
하게 되는데 이때 VisBaseEntity_cl을 상속받아서 구현하는 것이
좋다
• 엔진이 지원하는 기능을 충분히 사용하려면 엔진에서 제공하는 클래스
를 쓰는 것이 좋다.
몬스터와 자원을 배치해보자
• 이제 Entity를 만들 수 있으니 맵에 Entity를 놓을 수 있습니다
• 단, 일을 수월하게 하려면 picking 기능이 필요합니다.
• picking 은 마우스로 화면을 클릭했을 때 어떤 객체를 클릭했고 좌표는
어디인지를 알아내는 기능입니다.
Wrapper
EntityPicking() 함수가 Picking 시도
Picking으로 뭔가를 선택하는 데 성공
해당 좌표에 엔티티 생성
몬스터와 자원을 배치해보자
1. Mouse Mode 메뉴에서 CreateEntity
2. Create Entity 페이지에서 Type을 지정
3. 화면을 클릭하면 생성 시도
순서로 진행하도록 만들었습니다.
몬스터와 자원을 배치해보자
Tool
위 코드는 “좌클릭 이벤트가 발생하고”, “CreateEntity 라디오 버튼이 체크되어 있으면”
RayTraceAndCreateEntity 함수를 호출해서 선택된 타입의 Object를 생성하도록 되어 있다
여기서 잠깐
Wrapper Tool
GameObjectmanagerForTool은 Wrapper 내부에 Native C++ 로 구현된 클래스입니다.
결국 따지고 보면 호출하는 함수는 빨간 화살표 방향으로 가는데 왜 귀찮게 EntityEditor를 거쳐서 갈까요?
여기서 잠깐
Tool
Wrapper(EntityEditor)
Wrapper(GameObjectForTool)
호출 순서를 보면 이렇습니다.
본래 Wrapper 프로젝트의 역할은 Tool(C#)과 게임 로직(C++)
사이를 연결하는 것입니다.
Part 1 (page 5) 참고
여기서 잠깐
Tool
Wrapper(EntityEditor)
Wrapper(GameObjectForTool)
코드의 재사용성을 높이려면, 보통 엔티티 생성 같이 Client와 Tool
모두 사용하는 코드는 Client에 두는 것이 좋습니다.
Tool
Wrapper(EntityEditor)
Client(GameObjectManager)이런 식으로…
왜냐하면 어차피 클라이언트는 C++로 되어 있고, Wrapper가
클라이언트에서 C++로 구현한 기능을 이름 그대로 감싸기만 하면
C#에서도 그대로 쓸 수 있기 때문입니다.
사실 그러려고 Wrapper를 만든 것인데…
여기서 잠깐
Client(GameObjectManager)
Tool
Wrapper(EntityEditor)
Wrapper(GameObjectForTool)
<현재 상태>
=
똑같은 내용이 Wrapper와 Client에 중복해서 존재하는 상황
왜?
여기서 잠깐
• 문제는 Calling Convention
• Client는 ProjectAnarchy에서 기본 제공하는 빈 프로젝트에서
만들기 시작
• 각종 세팅이 기본으로 잡혀있는 반면
• /clr 옵션을 준 Wrapper에서 Client 코드를 불러다 쓰면 에러 발생
• MSDN에 의하면 이 문제를 해결할 수 있긴 한데… 해결책도 만만하지
않습니다
여기서 잠깐
그래서 복사했습니다… 제 의지로….
Client(GameObjectManager)
Tool
Wrapper(EntityEditor)
Wrapper(GameObjectForTool)
Copy & Paste
이러면 Calling Convention 문제가 발생하지 않지만
1. 하지만 코드가 중복되고
2. Wrapper 안에 또 Wrapper가 있어서 수정이 어려워짐
지형은 어떻게 만드나
• ProjectAnarchy 에서 지형과 관련된 클래스는 상당히 많음
• 하지만 대부분 게임 엔진들이 그렇듯이 자체적으로 제공하는
vForge툴로 지형을 생성하는 것을 권장한다
• 당연하지 이게 훨씬 편하니까요
• 코드로 지형을 직접 만드는 예제가 부족하다
• 삽질 끝에 static mesh 를 사용하기로 결정
• 사실 코드로 만들어서 되는 방법을… 아직 이거밖에…
지형은 어떻게 만드나
이 모습을 보기까지 수많은 시행착오가…
지형은 어떻게 만드나
• 큰 흐름은 이렇습니다
• 사용자 정의 Vertex 구조체를 만든다
• 사용자 정의 Vertex 구조체가 어떻게 생겼는지 전달해주는 버텍스 기
술자를 만든다.
• MeshBuffer 를 만든다
• MeshBuffer를 이용해서 StaticMesh를 만든다
• StaticMesh를 이용해서 StaticMeshInstance를 만든다
왜 이렇게 단계가 많지?
• 엔진을 썼으면 엔진 법을 따라야(…)
• 화면에 렌더링 되는 부분을 엔진이 관리해주고
• 마우스 포인터로 Picking 했을 때 확인이 되고
• 메모리 관리까지 해줌
• 사실 MeshBuffer만 있어도 렌더링은 할 수 있다!
• DirectX 예제를 떠올리면 됩니다
• 하지만 내부에 숨어있는 RenderingLoop에 손을 대야 하고
• 제일 큰 문제는 마우스로 picking 했을 때 없는 물체 취급
지형 관련 중요 클래스 생성 흐름
이 단순한 구조체가 지형에 사용할 Vertex입니다
hkvVec3 는 3차원 벡터, hkvVec2는 2차원 벡터입니다
Vertex의 위치와 노말 벡터의 방향, 텍스처의 uv 값을
표현하기 위한 최소한의 멤버만 들고 있습니다
Vertex의 형식은 고정된 것이 아니므로 게임 엔진에게
내가 만든 Vertex 형식을 알려주는 과정이 필요합니다
Vertex 기술자에게 Vertex의 사이즈,
Position 변수가 무엇인지 등등을
알려줘야 합니다
Wrapper
지형 관련 중요 클래스 생성 흐름
MeshBuffer를 만들어 줍니다.
옵션은 INDEXED_TRILIST
MeshBuffer에 락을 잡고
Vertex에 값을 넣어줍니다.
옆의 코드는 평평한 정사각형
Wrapper
지형 관련 중요 클래스 생성 흐름
Static Mesh를 만들고
조금 전에 만든 MeshBuffer를
옵션으로 넣어줍니다
Texture 달기
없어도 동작은 하지만 지형이
하얀 사각형으로 보입니다
Wrapper
지형 관련 중요 클래스 생성 흐름
StaticMesh 에서
Submesh 설정
대망의 StaticMeshInstance. 사실 이 클래스를 만들기 위해 지금까지의 과정이 필요한 것입니다
AssignToVisibilityZones()를 통해 렌더링을 맡길 수 있고 Picking까지 지원됩니다
Wrapper
지형 올리고 내리기
• Picking이 되므로 해당 좌표의 vertex 주변을 같이 올리고 내려
주면 된다
잘 된다. 잘 되는데…
지형 올리고 내리기
• 버그가 있다
• Picking을 할 때 StaticMesh가 가리키고 있는 MeshBuffer가 아
니라 CollisionMesh를 기준으로 계산
• CollisionMesh는 눈에 보이지 않음
• 눈에 보이게 그릴수도 있는데 Debug용 함수라 매 프레임 호출하도록
RenderingLoop를 손대야 함
• 지형을 올리고 내리기 위해 MeshBuffer의 Vertex만 조작하도록
했는데 CollisionMesh는 변화가 없다!
• 아무리 산과 계곡을 만들어도 Picking은 평면만 찍힘
지형 올리고 내리기
• Entity를 만들 때 Picking을 기반으로 하므로 Entity가 산에 파묻
히거나 계곡 위에 떠 있음
• Entity를 만들기 전에 MeshBuffer에 변화가 있으면
CollisionMesh를 재계산 하는 코드를 넣어서 해결(느리다)
Collision Mesh
Picking
Hit!
?
이상한 곳에 맞는다 Mesh Buffer
File I/O
• 지형의 MeshBuffer 및 몬스터, 자원 등 모든 객체의 정보는 메
모리에 올라가 있다
• 이걸 파일에 쭉 쓴 다음 다시 읽어 들여 초기화하는 데 사용하
면 데이터를 저장할 수도 있고 Tool에서 만든 파일을 Client에서
사용할 수도 있음
• 물론 I/O 규약을 정해서 지켜야 함
• 지형처럼 매우 큰 데이터도 주고받을 수 있다
부록 C++/CLI Beginning
Native C++
관리 클래스
위의 클래스는 C#에서는 보이지 않는다.
아래 클래스는 관리 클래스로 C#에서도 불러서 쓸 수 있다.
관리 클래스로 비관리 클래스를 감싸서 C#과 C++사이의 다리가 되는 것이 Wrapper의 역할
부록 C++/CLI Beginning
ref 클래스의 ^는 비관리 클래스의 *에 해당한다.
용법이 포인터와 비슷하다. (엄밀히 말하면 ^는 핸들이다)
만약 new를 쓸 일이 있으면
CommonVector3^ vec3 = gcnew CommonVector3;
하면 마치 C#에서 new 쓰듯 메모리를 관리해준다
C++ 참조자(&)에 해당하는 것은 %이다.

Weitere ähnliche Inhalte

Was ist angesagt?

DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발YEONG-CHEON YOU
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appYEONG-CHEON YOU
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
Unity3D 한국 최초 기술 세미나
Unity3D 한국 최초 기술 세미나Unity3D 한국 최초 기술 세미나
Unity3D 한국 최초 기술 세미나Brandon Chung
 
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서용호 김
 
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」강 민우
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
파견맨 와치앱 개발일지
파견맨 와치앱 개발일지파견맨 와치앱 개발일지
파견맨 와치앱 개발일지Jaeeun Lee
 
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)YOUNGJO CHO
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드강 민우
 
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR강 민우
 

Was ist angesagt? (20)

DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
 
Unity 시작하기
Unity 시작하기Unity 시작하기
Unity 시작하기
 
Kanzi
KanziKanzi
Kanzi
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
Unity시작하기
Unity시작하기Unity시작하기
Unity시작하기
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
Unity3D 한국 최초 기술 세미나
Unity3D 한국 최초 기술 세미나Unity3D 한국 최초 기술 세미나
Unity3D 한국 최초 기술 세미나
 
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서
유니티, 언리얼4 교육 전문기관 스킬트리랩 소개서
 
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
[IGC 2016] Photon 운영사무국 - 실시간 게임의 빠른 개발을 위한 솔루션 「Photon」
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
Visual shock vol.2
Visual shock   vol.2Visual shock   vol.2
Visual shock vol.2
 
파견맨 와치앱 개발일지
파견맨 와치앱 개발일지파견맨 와치앱 개발일지
파견맨 와치앱 개발일지
 
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)PiStage를 활용한  리얼타임 렌더링 워크플로우 (with RTX)
PiStage를 활용한 리얼타임 렌더링 워크플로우 (with RTX)
 
Wecanmakeengine
WecanmakeengineWecanmakeengine
Wecanmakeengine
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
 
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
 

Andere mochten auch

Ccx03.cocos builder
Ccx03.cocos builderCcx03.cocos builder
Ccx03.cocos builder우진 이
 
GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터Mark Choi
 
Dll파일 호출
Dll파일 호출Dll파일 호출
Dll파일 호출abapier
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)SeungIl Choi
 
[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기Sun Park
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)SeongWan Kim
 
4.5부동소수점
4.5부동소수점4.5부동소수점
4.5부동소수점JaeHong Park
 
Dom 생성과정
Dom 생성과정Dom 생성과정
Dom 생성과정abapier
 
게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출hongsungbock
 
Silverlight vs flash
Silverlight vs flashSilverlight vs flash
Silverlight vs flash권 태혁
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2진상 문
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Thisisone Lee
 
GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체Mark Choi
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비SeungMin Yang
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉MinGeun Park
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and renderingJaeHong Park
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 

Andere mochten auch (20)

Ccx03.cocos builder
Ccx03.cocos builderCcx03.cocos builder
Ccx03.cocos builder
 
GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터
 
Dll파일 호출
Dll파일 호출Dll파일 호출
Dll파일 호출
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)
 
[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기
 
투영 공식
투영 공식투영 공식
투영 공식
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)
 
4.5부동소수점
4.5부동소수점4.5부동소수점
4.5부동소수점
 
Dom 생성과정
Dom 생성과정Dom 생성과정
Dom 생성과정
 
게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출
 
Silverlight vs flash
Silverlight vs flashSilverlight vs flash
Silverlight vs flash
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2
 
GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and rendering
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 

Ähnlich wie Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2

Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Dong Chan Shin
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험Lee Sang-Ho
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개진현 조
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍entrylabs
 
[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overviewNAVER D2
 
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례EG Lim
 
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기NAVER D2
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템Jubok Kim
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰승민 백
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.병대 손
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁창규 김
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법SooHwan Ok
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수NAVER Engineering
 

Ähnlich wie Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2 (20)

Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
 
[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview[Naver d2]html5 canvas overview
[Naver d2]html5 canvas overview
 
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
 
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
 
Game Play System
Game Play SystemGame Play System
Game Play System
 
100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법100만 달러짜리 빠른앱 만드는 비법
100만 달러짜리 빠른앱 만드는 비법
 
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
200819 NAVER TECH CONCERT 01_100만 달러짜리 빠른 앱을 만드는 비법 전수
 

Mehr von 진상 문

[C++ beginner] sizeof()
[C++ beginner] sizeof()[C++ beginner] sizeof()
[C++ beginner] sizeof()진상 문
 
Pervasive computing
Pervasive computingPervasive computing
Pervasive computing진상 문
 
ABI란 무엇인가요?
ABI란 무엇인가요?ABI란 무엇인가요?
ABI란 무엇인가요?진상 문
 
Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법진상 문
 
C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기진상 문
 
무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리진상 문
 
Easy gameserver
Easy gameserverEasy gameserver
Easy gameserver진상 문
 
Halo ce anniversary Postmortem
Halo ce anniversary PostmortemHalo ce anniversary Postmortem
Halo ce anniversary Postmortem진상 문
 

Mehr von 진상 문 (8)

[C++ beginner] sizeof()
[C++ beginner] sizeof()[C++ beginner] sizeof()
[C++ beginner] sizeof()
 
Pervasive computing
Pervasive computingPervasive computing
Pervasive computing
 
ABI란 무엇인가요?
ABI란 무엇인가요?ABI란 무엇인가요?
ABI란 무엇인가요?
 
Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법Dll 파일 호출의 2가지 방법
Dll 파일 호출의 2가지 방법
 
C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기
 
무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리무중력 상태에 필요한 기초 물리
무중력 상태에 필요한 기초 물리
 
Easy gameserver
Easy gameserverEasy gameserver
Easy gameserver
 
Halo ce anniversary Postmortem
Halo ce anniversary PostmortemHalo ce anniversary Postmortem
Halo ce anniversary Postmortem
 

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

  • 1. Creating Game Tool With Project Anarchy - Vision Engine을 이용한 Game Tool 만들기 Part 2- 분 류 NHN NEXT 1기 실전프로젝트 산출물 실습 업체 블루홀 스튜디오 프로젝트 팀명 그랜드부다페스트(문진상/신동찬) 작성자 문진상 Created Date 2015-1-03
  • 2. 지난 줄거리 • 이렇게 생긴 툴을 만들어 볼 것입니다 Wrapper Vision Engine Client Tool 게임 툴 클라이언트 Wrapper
  • 3. 지난 줄거리 • Run() 함수 안에서 일어나는 일들은 엔진이 알아서 한다! • 하지만 아무것도 안 해도 된다는 뜻은 아니다! • 아무것도 안 하면 그냥 까만 화면만 나올 뿐… • 그렇다면 화면을 채울 Entity를 만들어보자
  • 4. Entity Vision:: 네임스페이스를 이용해 별도의 선언 없이 Entity를 만드는 것이 가능 만드는 김에 조명도 하나 달아주면? 잘 나온다 Wrapper 참고로 이 함수들은 만들어진 Entity의 포인터를 리턴하기 때문에 Scale, Position 등을 바꿀 때 사용할 수 있다.
  • 5. Tool에서 Entity가 왜 중요한가? • Tool 에서 오브젝트를 배치하는 기능은 결국 Entity를 생성하는 기능이다 • 대부분의 게임 프로젝트에서 특성에 맞는 GameObject를 생성 하게 되는데 이때 VisBaseEntity_cl을 상속받아서 구현하는 것이 좋다 • 엔진이 지원하는 기능을 충분히 사용하려면 엔진에서 제공하는 클래스 를 쓰는 것이 좋다.
  • 6. 몬스터와 자원을 배치해보자 • 이제 Entity를 만들 수 있으니 맵에 Entity를 놓을 수 있습니다 • 단, 일을 수월하게 하려면 picking 기능이 필요합니다. • picking 은 마우스로 화면을 클릭했을 때 어떤 객체를 클릭했고 좌표는 어디인지를 알아내는 기능입니다. Wrapper EntityPicking() 함수가 Picking 시도 Picking으로 뭔가를 선택하는 데 성공 해당 좌표에 엔티티 생성
  • 7. 몬스터와 자원을 배치해보자 1. Mouse Mode 메뉴에서 CreateEntity 2. Create Entity 페이지에서 Type을 지정 3. 화면을 클릭하면 생성 시도 순서로 진행하도록 만들었습니다.
  • 8. 몬스터와 자원을 배치해보자 Tool 위 코드는 “좌클릭 이벤트가 발생하고”, “CreateEntity 라디오 버튼이 체크되어 있으면” RayTraceAndCreateEntity 함수를 호출해서 선택된 타입의 Object를 생성하도록 되어 있다
  • 9. 여기서 잠깐 Wrapper Tool GameObjectmanagerForTool은 Wrapper 내부에 Native C++ 로 구현된 클래스입니다. 결국 따지고 보면 호출하는 함수는 빨간 화살표 방향으로 가는데 왜 귀찮게 EntityEditor를 거쳐서 갈까요?
  • 10. 여기서 잠깐 Tool Wrapper(EntityEditor) Wrapper(GameObjectForTool) 호출 순서를 보면 이렇습니다. 본래 Wrapper 프로젝트의 역할은 Tool(C#)과 게임 로직(C++) 사이를 연결하는 것입니다. Part 1 (page 5) 참고
  • 11. 여기서 잠깐 Tool Wrapper(EntityEditor) Wrapper(GameObjectForTool) 코드의 재사용성을 높이려면, 보통 엔티티 생성 같이 Client와 Tool 모두 사용하는 코드는 Client에 두는 것이 좋습니다. Tool Wrapper(EntityEditor) Client(GameObjectManager)이런 식으로… 왜냐하면 어차피 클라이언트는 C++로 되어 있고, Wrapper가 클라이언트에서 C++로 구현한 기능을 이름 그대로 감싸기만 하면 C#에서도 그대로 쓸 수 있기 때문입니다. 사실 그러려고 Wrapper를 만든 것인데…
  • 13. 여기서 잠깐 • 문제는 Calling Convention • Client는 ProjectAnarchy에서 기본 제공하는 빈 프로젝트에서 만들기 시작 • 각종 세팅이 기본으로 잡혀있는 반면 • /clr 옵션을 준 Wrapper에서 Client 코드를 불러다 쓰면 에러 발생 • MSDN에 의하면 이 문제를 해결할 수 있긴 한데… 해결책도 만만하지 않습니다
  • 14. 여기서 잠깐 그래서 복사했습니다… 제 의지로…. Client(GameObjectManager) Tool Wrapper(EntityEditor) Wrapper(GameObjectForTool) Copy & Paste 이러면 Calling Convention 문제가 발생하지 않지만 1. 하지만 코드가 중복되고 2. Wrapper 안에 또 Wrapper가 있어서 수정이 어려워짐
  • 15. 지형은 어떻게 만드나 • ProjectAnarchy 에서 지형과 관련된 클래스는 상당히 많음 • 하지만 대부분 게임 엔진들이 그렇듯이 자체적으로 제공하는 vForge툴로 지형을 생성하는 것을 권장한다 • 당연하지 이게 훨씬 편하니까요 • 코드로 지형을 직접 만드는 예제가 부족하다 • 삽질 끝에 static mesh 를 사용하기로 결정 • 사실 코드로 만들어서 되는 방법을… 아직 이거밖에…
  • 16. 지형은 어떻게 만드나 이 모습을 보기까지 수많은 시행착오가…
  • 17. 지형은 어떻게 만드나 • 큰 흐름은 이렇습니다 • 사용자 정의 Vertex 구조체를 만든다 • 사용자 정의 Vertex 구조체가 어떻게 생겼는지 전달해주는 버텍스 기 술자를 만든다. • MeshBuffer 를 만든다 • MeshBuffer를 이용해서 StaticMesh를 만든다 • StaticMesh를 이용해서 StaticMeshInstance를 만든다
  • 18. 왜 이렇게 단계가 많지? • 엔진을 썼으면 엔진 법을 따라야(…) • 화면에 렌더링 되는 부분을 엔진이 관리해주고 • 마우스 포인터로 Picking 했을 때 확인이 되고 • 메모리 관리까지 해줌 • 사실 MeshBuffer만 있어도 렌더링은 할 수 있다! • DirectX 예제를 떠올리면 됩니다 • 하지만 내부에 숨어있는 RenderingLoop에 손을 대야 하고 • 제일 큰 문제는 마우스로 picking 했을 때 없는 물체 취급
  • 19. 지형 관련 중요 클래스 생성 흐름 이 단순한 구조체가 지형에 사용할 Vertex입니다 hkvVec3 는 3차원 벡터, hkvVec2는 2차원 벡터입니다 Vertex의 위치와 노말 벡터의 방향, 텍스처의 uv 값을 표현하기 위한 최소한의 멤버만 들고 있습니다 Vertex의 형식은 고정된 것이 아니므로 게임 엔진에게 내가 만든 Vertex 형식을 알려주는 과정이 필요합니다 Vertex 기술자에게 Vertex의 사이즈, Position 변수가 무엇인지 등등을 알려줘야 합니다 Wrapper
  • 20. 지형 관련 중요 클래스 생성 흐름 MeshBuffer를 만들어 줍니다. 옵션은 INDEXED_TRILIST MeshBuffer에 락을 잡고 Vertex에 값을 넣어줍니다. 옆의 코드는 평평한 정사각형 Wrapper
  • 21. 지형 관련 중요 클래스 생성 흐름 Static Mesh를 만들고 조금 전에 만든 MeshBuffer를 옵션으로 넣어줍니다 Texture 달기 없어도 동작은 하지만 지형이 하얀 사각형으로 보입니다 Wrapper
  • 22. 지형 관련 중요 클래스 생성 흐름 StaticMesh 에서 Submesh 설정 대망의 StaticMeshInstance. 사실 이 클래스를 만들기 위해 지금까지의 과정이 필요한 것입니다 AssignToVisibilityZones()를 통해 렌더링을 맡길 수 있고 Picking까지 지원됩니다 Wrapper
  • 23. 지형 올리고 내리기 • Picking이 되므로 해당 좌표의 vertex 주변을 같이 올리고 내려 주면 된다 잘 된다. 잘 되는데…
  • 24. 지형 올리고 내리기 • 버그가 있다 • Picking을 할 때 StaticMesh가 가리키고 있는 MeshBuffer가 아 니라 CollisionMesh를 기준으로 계산 • CollisionMesh는 눈에 보이지 않음 • 눈에 보이게 그릴수도 있는데 Debug용 함수라 매 프레임 호출하도록 RenderingLoop를 손대야 함 • 지형을 올리고 내리기 위해 MeshBuffer의 Vertex만 조작하도록 했는데 CollisionMesh는 변화가 없다! • 아무리 산과 계곡을 만들어도 Picking은 평면만 찍힘
  • 25. 지형 올리고 내리기 • Entity를 만들 때 Picking을 기반으로 하므로 Entity가 산에 파묻 히거나 계곡 위에 떠 있음 • Entity를 만들기 전에 MeshBuffer에 변화가 있으면 CollisionMesh를 재계산 하는 코드를 넣어서 해결(느리다) Collision Mesh Picking Hit! ? 이상한 곳에 맞는다 Mesh Buffer
  • 26. File I/O • 지형의 MeshBuffer 및 몬스터, 자원 등 모든 객체의 정보는 메 모리에 올라가 있다 • 이걸 파일에 쭉 쓴 다음 다시 읽어 들여 초기화하는 데 사용하 면 데이터를 저장할 수도 있고 Tool에서 만든 파일을 Client에서 사용할 수도 있음 • 물론 I/O 규약을 정해서 지켜야 함 • 지형처럼 매우 큰 데이터도 주고받을 수 있다
  • 27. 부록 C++/CLI Beginning Native C++ 관리 클래스 위의 클래스는 C#에서는 보이지 않는다. 아래 클래스는 관리 클래스로 C#에서도 불러서 쓸 수 있다. 관리 클래스로 비관리 클래스를 감싸서 C#과 C++사이의 다리가 되는 것이 Wrapper의 역할
  • 28. 부록 C++/CLI Beginning ref 클래스의 ^는 비관리 클래스의 *에 해당한다. 용법이 포인터와 비슷하다. (엄밀히 말하면 ^는 핸들이다) 만약 new를 쓸 일이 있으면 CommonVector3^ vec3 = gcnew CommonVector3; 하면 마치 C#에서 new 쓰듯 메모리를 관리해준다 C++ 참조자(&)에 해당하는 것은 %이다.