행동 기반 게임오브젝트

101
행행 행행 행행행행행행 (action based game object) 행행행 ([email protected])

Upload: kgun86

Post on 24-Jun-2015

6.168 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: 행동 기반 게임오브젝트

행동 기반 게임오브젝트(action based game object)

박성준([email protected])

Page 2: 행동 기반 게임오브젝트

주제를 시작하기 전에 ..

Page 3: 행동 기반 게임오브젝트

대단하고 화려하고 멋진 설계

Page 4: 행동 기반 게임오브젝트

이런것을 소개하려는 것이 아닙니다 .

Page 5: 행동 기반 게임오브젝트

소개하려는 것은 ..

저는 이렇게 만들었습니다 ..

Page 6: 행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

게임 오브젝트 설계의 중요성

행동 기반 게임오브젝트의 개념

컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

Page 7: 행동 기반 게임오브젝트

• 컴포넌트 기반 게임오브젝트의 일종

• 기존 컴포넌트를 컴포넌트 , 컨트롤러 , 액션으로 나누어 구현

• 컴포넌트끼리의 의존도↓ , 코드의 재활용↑

• 여러 컴포넌트에 접근해야 하는 복잡한 처리도 간단하게 구현

행동 기반 게임오브젝트란 ?

일단 포장부터 ...

Page 8: 행동 기반 게임오브젝트

그 중에서도 가장 중요한 것은

행동 기반 게임오브젝트 = 기본적으로 컴포넌트 기반

Page 9: 행동 기반 게임오브젝트

아주 조금 다를 뿐입니다 .

기존의 컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

Page 10: 행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

게임 오브젝트 설계의 중요성

행동 기반 게임오브젝트의 개념

컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

게임 오브젝트 설계의 중요성

Page 11: 행동 기반 게임오브젝트

처음 다닌 게임회사

그리고 첫 게임

Softnyx( 특히 Rakion 팀 ) 는 쾌적하고 깨끗하고 밝은 분위기의 좋은 회사입니다 .

Page 12: 행동 기반 게임오브젝트

KASA2008, 김성헌님의 C++ Component System GDC2009, Game Object Component Architecture

Rakion 의 게임 오브젝트는 ..이미 서비스중인 게임인 만큼 , 굉장히 많이 만들어져 있었고 , 컴포넌트 기반 게임오브젝트의 거의 모든 강연에서 나온 계층구조 설계의 거의 모든 문제점들이 발생하고 있는 상황이었습니다 .

Page 13: 행동 기반 게임오브젝트

게임 오브젝트여

당신은 누구시길래 ..

Page 14: 행동 기반 게임오브젝트

오브젝트

캐릭터

지형

프랍

트리거

광원

카메라

발사체

레벨

게임 오브젝트란 ?

• 플레이어 , 몬스터 등 캐릭터• 캐릭터가 서있는 지형• 바위 , 나무 , 건물 등 배경 오브젝트• 함정 , 회복아이템 등 트리거• 미사일 , 수류탄 , 파편 등• 카메라 , 광원 등

Page 15: 행동 기반 게임오브젝트

오브젝트

오브젝트

오브젝트

오브젝트

캐릭터

지형

프랍

트리거

광원

카메라

발사체

레벨

상호작용

게임 오브젝트란 ?

게임 = 게임 오브젝트 사이의 상호작용

Page 16: 행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

게임 오브젝트 설계의 중요성

행동 기반 게임오브젝트의 개념

컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

행동 기반 게임오브젝트의 개념

Page 17: 행동 기반 게임오브젝트

새로운 프로젝트 시작 !방을 만들고 들어가서 다른 유저들과 몬스터를 잡고 노는 MO Action RPG 를 만들게 되었습니다 . 총도 쏘고 칼도 휘두르고 물약도 먹고 같이 공격해주거나 회복시켜주는 기계도 소환하고 ..

Page 18: 행동 기반 게임오브젝트

때가 왔다 !

엑셀은 밟을 수 없어도 핸들만은 놓치지 않겠어 !

Page 19: 행동 기반 게임오브젝트

그래서 게임오브젝트를 ..

엑셀은 밟을 수 없어도 핸들만은 놓치지 않겠어 !

Page 20: 행동 기반 게임오브젝트

사람을 보고 만들었습니다

Page 21: 행동 기반 게임오브젝트

조종

모델

데이터

행동

Page 22: 행동 기반 게임오브젝트

사람 비슷한 것도 ..

Page 23: 행동 기반 게임오브젝트

조종

모델

데이터

행동

Page 24: 행동 기반 게임오브젝트

사람 안 비슷한 것도 ..

Page 25: 행동 기반 게임오브젝트

조종

모델

데이터

행동

Page 26: 행동 기반 게임오브젝트

조종모델

데이터

행동

당시 사용했던 구조컨트롤러에서 게임오브젝트에 명령을 주고 , 게임오브젝트가 명령을 받으면 액션을 실행합니다 . 액션은 모델과 데이터 , 게임오브젝트 ( 위치 , 회전 등 ) 를 조작합니다 .

Page 27: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

Page 28: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

조건 검사

Page 29: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

조건 검사

액션 명령

Page 30: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

조건 검사

액션 명령

다른오브젝트

액션 명령

Page 31: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

조건 검사

액션 명령

명령에 맞는 액션 실행

다른오브젝트

액션 명령

Page 32: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션모델 /데이터

조건 검사

액션 명령

명령에 맞는 액션 실행

데이터 업데이트/ 기능 수행

다른오브젝트

액션 명령

Page 33: 행동 기반 게임오브젝트

오브젝트

엑티브액터

Page 34: 행동 기반 게임오브젝트

오브젝트

엑티브액터

액션 명령

Page 35: 행동 기반 게임오브젝트

오브젝트

엑티브액터

액션 명령

때리다서다 달리다 죽다맞다

명령에 연결된 액션

Page 36: 행동 기반 게임오브젝트

오브젝트

엑티브액터

액션 명령

때리다서다 달리다 죽다맞다

명령에 연결된 액션

Page 37: 행동 기반 게임오브젝트

그래서 게임 오브젝트의 구성은 ..

Page 38: 행동 기반 게임오브젝트

UserInputControl RemoteControl

플레이어 캐릭터플레이어 캐릭터는 유저의 컨트롤 ( 실제 입력 , 네트워크 ) 과 시나리오의 흐름에 영향을 받고 , 검과 총 두 가지의 무기를 사용하여 몬스터를 사냥합니다 . 따라서 무기를 체인지하면 행동패턴이 달라집니다 .

ScenarioControl

Local 인 경우 Remote 인 경우

검 Actor 총 Actor

활성화

Page 39: 행동 기반 게임오브젝트

UserInputControl RemoteControl

플레이어 캐릭터플레이어 캐릭터는 유저의 컨트롤 ( 실제 입력 , 네트워크 ) 과 시나리오의 흐름에 영향을 받고 , 검과 총 두 가지의 무기를 사용하여 몬스터를 사냥합니다 . 따라서 무기를 체인지하면 행동패턴이 달라집니다 .

ScenarioControl

Local 인 경우 Remote 인 경우

검 Actor 총 Actor

활성화

Page 40: 행동 기반 게임오브젝트

회의 중

좀비는 왜 느린게

컨셉이지 ? 무섭지 않자나 !

그래도 좀비는 걸어서

다가오는게 매력이 있다구 !

Page 41: 행동 기반 게임오브젝트

회의 중

그럼 뛰어다니게

만들면 되지 ! 그런 좀비영화

많자나 !

그럼 처음엔 걷다가 특정

조건이 만족되면 뛰자 !

Page 42: 행동 기반 게임오브젝트

Actor

공격 이동

좀비 몬스터처음에는 느리게 걸어 다니면서 몽둥이를 휘두르지만 , 데미지를 받아 HP 가 30% 이하가 되고 특정 조건이 만족되면 다리가 떨어지면서 팔로 엄청 빠르게 이동을 하고 점프를 하여 입으로 물어뜯는 공격을 합니다 .

AIControl

데이터 1 데이터 2 Model1Model2

몬스터기본이동몬스터기본공격

변신 전

Page 43: 행동 기반 게임오브젝트

Actor

공격 이동

좀비 몬스터처음에는 느리게 걸어 다니면서 몽둥이를 휘두르지만 , 데미지를 받아 HP 가 30% 이하가 되고 특정 조건이 만족되면 다리가 떨어지면서 팔로 엄청 빠르게 이동을 하고 점프를 하여 입으로 물어뜯는 공격을 합니다 .

AIControl

데이터 1 데이터 2 Model1Model2

변신 후

좀비물어뜯기공격

좀비상체이동

Page 44: 행동 기반 게임오브젝트

하지만 저는 이때 ..

Page 45: 행동 기반 게임오브젝트

컴포넌트가 뭔지 몰랐습니다 ..

바깥세상은어떤 곳일

까 ..

Page 46: 행동 기반 게임오브젝트

컴포넌트 기반으로게임오브젝트를 만들면 좋데 !

오후 4 시 30 분에 여기에서 발표합니다 . 많이 참석해주세요 !!

컴포넌트 ?!

Page 47: 행동 기반 게임오브젝트

하지만 이미 프로젝트는 마무리 단계 ..

Page 48: 행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

게임 오브젝트 설계의 중요성

행동 기반 게임오브젝트의 개념

컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

컴포넌트 기반 게임오브젝트

Page 49: 행동 기반 게임오브젝트

다시 새로운 프로젝트 시작 !원작의 유명 대전 격투 게임을 RPG 로 재탄생 시킨 사무라이쇼다운 온라인은 Full 3D 타입의 쾌적하고 전략성 있는 전투를 추구하며 원작의 방대한 세계관을 그대로 즐길 수 있는 게임입니다 .

Page 50: 행동 기반 게임오브젝트

지금이다 !!

컴포넌트 ! 나도 이 녀석으로 게임오브젝트를 만들어보자 !

Page 51: 행동 기반 게임오브젝트

오브젝트

ModelComponent

AIComponent

HealthComponent

TargetableComponent

PhysicsComponentMoveableComponent

MotionTreeComponent

TouchComponent

컴포넌트 기반 게임 오브젝트의 형태게임 오브젝트는 기본적인 데이터만을 가지고 있고 , 모든 데이터와 기능은 컴포넌트로 만들어서 게임오브젝트에 붙이는 형태입니다 . 오브젝트의 형태별로 필요한 기능만을 가질 수 있도록 설계된 방식입니다 .

Page 52: 행동 기반 게임오브젝트

하지만 역시 쓰던 것이 편하나 봅니다 ...

Page 53: 행동 기반 게임오브젝트

• 컴포넌트가 다른 컴포넌트를 참조하고 수정하는 경우

잘 알진 못하지만 ..

저는 이런 부분들이 불편했어요

• 하나의 일을 여러 컴포넌트가 복잡적으로 처리해야 하는 경우

• 사실 이렇게 페이지를 하나 쓸 만큼 나쁜 점이 많지 않아요 ..

Page 54: 행동 기반 게임오브젝트

그래서 합쳤습니다 ..

Page 55: 행동 기반 게임오브젝트

행동 기반 게임오브젝트란 ?

게임 오브젝트 설계의 중요성

행동 기반 게임오브젝트의 개념

컴포넌트 기반 게임오브젝트

행동 기반 게임오브젝트

행동 기반 게임오브젝트

Page 56: 행동 기반 게임오브젝트

배경 투명으로 어떻게 만드나요 ..

오브젝트에 액션 명령

오브젝트가 가지고 있는기본적인 기능 / 데이터들

오브젝트가 명령에 따라 취해야 하는 액션

Page 57: 행동 기반 게임오브젝트

배경 투명으로 어떻게 만드나요 ..

오브젝트에 액션 명령

오브젝트가 가지고 있는기본적인 기능 / 데이터들

오브젝트가 명령에 따라 취해야 하는 액션

컨트롤러

컴포넌트

액션

Page 58: 행동 기반 게임오브젝트

오브젝트

UserInputController

AIController RemoteController

MoveDataComponent

ModelComponent HealthComponent

TargetableComponent

Idle

Move

ActionTable

Attack Touch

Struck

Drop

컨트롤러

컴포넌트

액션

Page 59: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

Page 60: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

조건 검사

Page 61: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

조건 검사

액션 명령

Page 62: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

조건 검사

액션 명령

다른오브젝트

액션 명령

Page 63: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

조건 검사

액션 명령

명령에 맞는 액션 실행

다른오브젝트

액션 명령

Page 64: 행동 기반 게임오브젝트

오브젝트

컨트롤러

액션컴포넌트

조건 검사

액션 명령

명령에 맞는 액션 실행

데이터 업데이트/ 기능 수행

다른오브젝트

액션 명령

Page 65: 행동 기반 게임오브젝트

행동 기반 게임오브젝트 구조컨트롤러에서 게임오브젝트에 명령을 주고 , 게임오브젝트가 명령을 받으면 액션을 실행합니다 . 액션은 컴포넌트 , 게임오브젝트 ( 위치 , 회전 등 ) 를 조작합니다 .

Page 66: 행동 기반 게임오브젝트

간단히 표현해보면 ..

Page 67: 행동 기반 게임오브젝트

• 독립적인 하나의 기능

• 어떠한 일을 하기 위해 쓰이는 데이터

• 여러 게임 오브젝트에 붙어 각각의 고유한 기능을 수행

• 다른 컴포넌트나 게임오브젝트를 수정하지 않음

컴포넌트

Page 68: 행동 기반 게임오브젝트

컴포넌트

Page 69: 행동 기반 게임오브젝트

공통

클라이언트

서버

컴포넌트 베이스

Page 70: 행동 기반 게임오브젝트

• 게임 오브젝트에 액션 명령

• 활성화 / 비활성화가 가능

• 컴포넌트나 게임오브젝트를 수정하지 않음

• 게임 오브젝트 자체에서 발생되는 액션을 명령

컨트롤러

Page 71: 행동 기반 게임오브젝트

컨트롤러

Page 72: 행동 기반 게임오브젝트

공통

클라이언트

서버 컨트롤러 베이스

Page 73: 행동 기반 게임오브젝트

• 게임오브젝트가 해야 하는 어떠한 일

• 컴포넌트나 게임오브젝트를 실제로 수정함

• 액션 명령을 받으면 명령에 연결된 액션을 실행

• 게임오브젝트는 한번에 여러 개의 액션 실행 가능

액션

Page 74: 행동 기반 게임오브젝트

액션

Page 75: 행동 기반 게임오브젝트

공통

클라이언트

서버액션 베이스

Page 76: 행동 기반 게임오브젝트

• 액션을 실행시키기 위한 명령

• 게임오브젝트는 액션 명령을 받고 연결된 액션을 실행

• 액션을 실행하는데 사용되는 데이터는 명령에 따라 달라짐

• 액션 명령은 ActionBase 를 직접 상속받은 객체의 RTTI를 이용

액션 명령

Page 77: 행동 기반 게임오브젝트

편의를 위해 매크로를 사용

액션 명령 선언

ActionBase 직접 상속

액션 명령 정의

ActionBase 직접 상속 X

Page 78: 행동 기반 게임오브젝트

액션 명령 ID

데이터

매크로의 형태

RTTI 를 사용

ActionBase 직접 상속만 허용

Page 79: 행동 기반 게임오브젝트

• 게임 오브젝트가 할 수 있는 액션들의 모음

• 액션 명령에 액션을 연결하여 저장

• 게임 오브젝트는 여러 개의 액션 테이블을 가짐

• 액션 테이블에는 레벨이 존재하여 활성화된 액션 테이블 중 레벨이 높은 것부터 액션 명령을 검사

액션 테이블

Page 80: 행동 기반 게임오브젝트

액션 연결

액션 테이블의 형태

활성화 / 비활성화

레벨이 높은 액션 테이블부터 실행할 액션 검사

Page 81: 행동 기반 게임오브젝트

• 게임오브젝트는 액션 레이어를 통해 액션을 실행

• 액션의 시작부터 끝까지를 관리

• 레이어 개념으로 액션을 실행하여 한번에 여러 개의 액션을 실행시킴

액션 레이어

Page 82: 행동 기반 게임오브젝트

액션 레이어의 형태

액션 실행

액션을 실행시킬 레이어

Page 83: 행동 기반 게임오브젝트

게임 오브젝트 구성 예시

플레이어 캐릭터의 이동을 간단하게 만들어 봅시다

Page 84: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

오브젝트

Page 85: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

입력 X 실행 중 액션 XIdle 명령

오브젝트

Page 86: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

입력 X 실행 중 액션 XIdle 명령

Idle 명령에 연결된 액션 검색

오브젝트

Page 87: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

입력 X 실행 중 액션 XIdle 명령

CharacterIdle 실행

Idle 명령에 연결된 액션 검색

오브젝트

Page 88: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

입력 X 실행 중 액션 XIdle 명령

Idle 애니메이션 재생

CharacterIdle 실행

CharacterIdle

Idle 명령에 연결된 액션 검색

오브젝트

Page 89: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

오브젝트

Page 90: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

Page 91: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

Page 92: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

MoveToPosition 명령에연결된 액션 검색

Page 93: 행동 기반 게임오브젝트

CharacterMoveToPosition실행

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

MoveToPosition 명령에연결된 액션 검색

Page 94: 행동 기반 게임오브젝트

CharacterMoveToPosition실행

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

MoveToPosition 명령에연결된 액션 검색

CharacterMoveToPosition

Page 95: 행동 기반 게임오브젝트

CharacterMoveToPosition실행

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

MoveToPosition 명령에연결된 액션 검색

CharacterMoveToPosition

Page 96: 행동 기반 게임오브젝트

CharacterMoveToPosition실행

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

이동할 위치 클릭MoveToPosition 명령

MoveToPosition 명령에연결된 액션 검색

CharacterMoveToPosition

이동속도참조

위치 값 설정

Page 97: 행동 기반 게임오브젝트

UserInputController

ModelComponent

ActionLayerActionTable

Idle - CharacterIdle

MoveToPosition - CharacterMoveToPosition

MoveDataComponent

오브젝트

Page 98: 행동 기반 게임오브젝트

어쨌든 ..

Page 99: 행동 기반 게임오브젝트

게임오브젝트 구성을 쉽게 !!

Page 100: 행동 기반 게임오브젝트

Q&A

Page 101: 행동 기반 게임오브젝트

감사합니다

박성준[email protected]

com