12. Rakion의 게임 오브젝트는..
이미 서비스중인 게임인 만큼, 굉장히 많이 만들어져 있었고, 컴포넌트 기반 게임오브젝트의 거의 모
든 강연에서 나온 계층구조 설계의 거의 모든 문제점들이 발생하고 있는 상황이었습니다.
KASA2008, 김성헌님의 C++ Component System GDC2009, Game Object Component Architecture
38. 플레이어 캐릭터
플레이어 캐릭터는 유저의 컨트롤(실제 입력, 네트워크)과 시나리오의 흐름에 영향을 받고, 검과 총 두 가지
의 무기를 사용하여 몬스터를 사냥합니다. 따라서 무기를 체인지하면 행동패턴이 달라집니다.
UserInputControl ScenarioControl RemoteControl
Local인 경우 Remote인 경우
검 Actor 총 Actor
활성화
39. 플레이어 캐릭터
플레이어 캐릭터는 유저의 컨트롤(실제 입력, 네트워크)과 시나리오의 흐름에 영향을 받고, 검과 총 두 가지
의 무기를 사용하여 몬스터를 사냥합니다. 따라서 무기를 체인지하면 행동패턴이 달라집니다.
UserInputControl ScenarioControl RemoteControl
Local인 경우 Remote인 경우
검 Actor 총 Actor
활성화
40. 회의 중
좀비는 왜 느 그래도 좀비는
린게 컨셉이 걸어서 다가오
지? 무섭지 않 는게 매력이
자나! 있다구!
41. 회의 중
그럼 뛰어다니 그럼 처음엔
게 만들면 되 걷다가 특정
지! 그런 좀비 조건이 만족되
영화 많자나! 면 뛰자!
42. 좀비 몬스터
처음에는 느리게 걸어 다니면서 몽둥이를 휘두르지만, 데미지를 받아 HP가 30% 이하가 되고 특정 조건이 만
족되면 다리가 떨어지면서 팔로 엄청 빠르게 이동을 하고 점프를 하여 입으로 물어뜯는 공격을 합니다.
AIControl
몬스터기본공격 몬스터기본이동
Actor
공격 이동
데이터1 데이터2 Model1 Model2
변신 전
43. 좀비 몬스터
처음에는 느리게 걸어 다니면서 몽둥이를 휘두르지만, 데미지를 받아 HP가 30% 이하가 되고 특정 조건이 만
족되면 다리가 떨어지면서 팔로 엄청 빠르게 이동을 하고 점프를 하여 입으로 물어뜯는 공격을 합니다.
AIControl
Actor
공격 이동
좀비상체이동
좀비물어뜯기공격
데이터1 데이터2 Model1 Model2
변신 후
51. 컴포넌트 기반 게임 오브젝트의 형태
게임 오브젝트는 기본적인 데이터만을 가지고 있고, 모든 데이터와 기능은 컴포넌트로 만들어서 게임오브젝
트에 붙이는 형태입니다. 오브젝트의 형태별로 필요한 기능만을 가질 수 있도록 설계된 방식입니다.
ModelComponent
MotionTreeComponent HealthComponent
오브젝
TouchComponent AIComponent
트
MoveableComponent PhysicsComponent
TargetableComponent
85. 입력 X
실행 중 액션 X UserInputController
Idle 명령
ModelComponent
오브젝트
ActionTable ActionLayer
Idle - CharacterIdle
86. 입력 X
실행 중 액션 X UserInputController
Idle 명령
ModelComponent
오브젝트
Idle 명령에
연결된 액션 검색
ActionTable ActionLayer
Idle - CharacterIdle
87. 입력 X
실행 중 액션 X UserInputController
Idle 명령
ModelComponent
오브젝트
Idle 명령에
연결된 액션 검색
ActionTable ActionLayer
CharacterIdle 실행
Idle - CharacterIdle
88. 입력 X
실행 중 액션 X UserInputController
Idle 명령
ModelComponent
오브젝트
Idle 명령에
연결된 액션 검색
ActionTable ActionLayer
CharacterIdle 실행
Idle - CharacterIdle CharacterIdle
Idle 애니메이션 재생
91. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
ActionTable ActionLayer
Idle - CharacterIdle CharacterIdle
MoveToPosition - CharacterMoveToPosition
92. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
MoveToPosition 명령에
연결된 액션 검색
ActionTable ActionLayer
Idle - CharacterIdle CharacterIdle
MoveToPosition - CharacterMoveToPosition
93. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
MoveToPosition 명령에
연결된 액션 검색
ActionTable ActionLayer
CharacterMoveToPosition
실행
Idle - CharacterIdle CharacterIdle
MoveToPosition - CharacterMoveToPosition
94. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
MoveToPosition 명령에
연결된 액션 검색
ActionTable ActionLayer
CharacterMoveToPosition
실행
Idle - CharacterIdle CharacterIdle
CharacterMoveToPosition
MoveToPosition - CharacterMoveToPosition
95. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
MoveToPosition 명령에
연결된 액션 검색
ActionTable ActionLayer
CharacterMoveToPosition
실행
Idle - CharacterIdle
CharacterMoveToPosition
MoveToPosition - CharacterMoveToPosition
96. 이동할 위치 클릭
UserInputController MoveToPosition 명령
ModelComponent MoveDataComponent
오브젝트
MoveToPosition 명령에
위치 값 설정
연결된 액션 검색
이동속도
ActionTable ActionLayer 참조
CharacterMoveToPosition
실행
Idle - CharacterIdle
CharacterMoveToPosition
MoveToPosition - CharacterMoveToPosition