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




                                  박성준
                              (notorz@hotmail.com)
주제를 시작하기 전에..
대단하고 화려하고 멋진 설계
이런것을 소개하려는 것이 아닙니다.
소개하려는 것은..




     저는 이렇게 만들었습니다..
행동 기반 게임오브젝트란?


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

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

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

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




                       일단 포장부터...
그 중에서도 가장 중요한 것은


행동 기반 게임오브젝트
  = 기본적으로 컴포넌트 기반
아주 조금 다를 뿐입니다.

                     행동 기반 게임오브젝트




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




KASA2008, 김성헌님의 C++ Component System   GDC2009, Game Object Component Architecture
게임 오브젝트여

   당신은 누구시길래..
게임 오브젝트란?

                                    캐릭터
• 플레이어, 몬스터 등 캐릭터
                               레벨         지형
• 캐릭터가 서있는 지형
• 바위, 나무, 건물 등 배경 오브젝트
                                    오브젝
                         발사체                    프랍
• 함정, 회복아이템 등 트리거                    트

• 미사일, 수류탄, 파편 등
• 카메라, 광원 등                카메라            트리거

                                    광원
게임 오브젝트란?




             캐릭터

        레벨         지형            오브젝트
                                               상호작용

             오브젝
  발사체                    프랍
              트
                              오브젝트

    카메라            트리거                  오브젝트

             광원




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




엑셀은 밟을 수 없어도 핸들만은 놓치지 않겠어!
그래서 게임오브젝트를..




엑셀은 밟을 수 없어도 핸들만은 놓치지 않겠어!
사람을 보고 만들었습니다
조종
모델
데이터
행동
사람 비슷한 것도..
조종
모델
데이터
행동
사람 안 비슷한 것도..
조종
모델
데이터
행동
당시 사용했던 구조
컨트롤러에서 게임오브젝트에 명령을 주고, 게임오브젝트가 명령을 받으면 액션을 실행합니다. 액션
은 모델과 데이터, 게임오브젝트(위치, 회전 등)를 조작합니다.




모델
                                               조종

데이터

                                               행동
컨트롤
       러


      오브젝
       트
모델/
            액션
데이터
컨트롤
조건 검사
           러


          오브젝
           트
    모델/
                액션
   데이터
컨트롤
조건 검사
           러
                 액션 명령



          오브젝
           트
    모델/
                액션
   데이터
컨트롤
       조건 검사
                  러
                        액션 명령

       액션 명령
 다른
오브젝트             오브젝
                  트
           모델/
                       액션
          데이터
컨트롤
       조건 검사
                  러
                        액션 명령

       액션 명령
 다른
오브젝트             오브젝
                        명령에 맞는 액션 실행
                  트
           모델/
                       액션
          데이터
컨트롤
       조건 검사
                    러
                             액션 명령

       액션 명령
 다른
오브젝트              오브젝
                             명령에 맞는 액션 실행
                    트
           모델/
                            액션
          데이터    데이터 업데이트
                 / 기능 수행
오브젝트




엑티브
액터
오브젝트

       액션 명령

엑티브
액터
오브젝트

                           액션 명령

           엑티브
           액터


                 명령에 연결된 액션

서다   달리다   때리다   맞다   죽다
오브젝트

                           액션 명령

           엑티브
           액터


                 명령에 연결된 액션

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


        UserInputControl   ScenarioControl     RemoteControl


              Local인 경우                      Remote인 경우




        검 Actor                                        총 Actor


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


        UserInputControl   ScenarioControl     RemoteControl


              Local인 경우                      Remote인 경우




        검 Actor                                        총 Actor


                                                        활성화
회의 중

       좀비는 왜 느    그래도 좀비는
       린게 컨셉이     걸어서 다가오
       지? 무섭지 않    는게 매력이
          자나!       있다구!
회의 중

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


             AIControl


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



                                       Actor

                                   공격      이동




데이터1 데이터2       Model1 Model2

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


             AIControl




                                       Actor

                                   공격      이동
                                                 좀비상체이동

                                                좀비물어뜯기공격



데이터1 데이터2       Model1 Model2

                                변신 후
하지만 저는 이때..
바깥세상은
   어떤 곳일
     까..




컴포넌트가 뭔지 몰랐습니다..
컴포넌트 기반으로
게임오브젝트를 만들면 좋데!

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



            컴포넌트?!
하지만 이미 프로젝트는 마무리 단계..
다시 새로운 프로젝트 시작!
원작의 유명 대전 격투 게임을 RPG로 재탄생 시킨 사무라이쇼다운 온라인은 Full 3D타입의 쾌적하
고 전략성 있는 전투를 추구하며 원작의 방대한 세계관을 그대로 즐길 수 있는 게임입니다.
지금이다!!
컴포넌트! 나도 이 녀석으로
게임오브젝트를 만들어보자!
컴포넌트 기반 게임 오브젝트의 형태
게임 오브젝트는 기본적인 데이터만을 가지고 있고, 모든 데이터와 기능은 컴포넌트로 만들어서 게임오브젝
트에 붙이는 형태입니다. 오브젝트의 형태별로 필요한 기능만을 가질 수 있도록 설계된 방식입니다.




                             ModelComponent


      MotionTreeComponent                         HealthComponent

                                  오브젝
        TouchComponent                              AIComponent
                                   트

       MoveableComponent                          PhysicsComponent


                            TargetableComponent
하지만 역시 쓰던 것이 편하나 봅니다...
저는 이런 부분들이 불편했어요


잘 알진 못하지만..

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

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

• 사실 이렇게 페이지를 하나 쓸 만큼 나쁜 점이 많지 않아요..
그래서 합쳤습니다..
오브젝트에 액션 명령




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



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




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



                                   컴포넌트


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



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


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

               AIController          RemoteController


                                                                  컴포넌트
    ModelComponent
                              오브젝            HealthComponent
                               트
MoveDataComponent                                 TargetableComponent


                                                  Drop                  액션
               Idle         ActionTable
                                              Struck
                Move
                            Attack        Touch
컨트롤
       러


      오브젝
       트
컴포넌
            액션
 트
컨트롤
조건 검사
             러


            오브젝
             트
   컴포넌
                  액션
        트
컨트롤
조건 검사
             러
                   액션 명령



            오브젝
             트
   컴포넌
                  액션
        트
컨트롤
       조건 검사
                    러
                          액션 명령

       액션 명령
 다른
오브젝트               오브젝
                    트
          컴포넌
                         액션
               트
컨트롤
       조건 검사
                    러
                          액션 명령

       액션 명령
 다른
오브젝트               오브젝
                          명령에 맞는 액션 실행
                    트
          컴포넌
                         액션
               트
컨트롤
       조건 검사
                      러
                               액션 명령

       액션 명령
 다른
오브젝트                오브젝
                               명령에 맞는 액션 실행
                      트
          컴포넌
                              액션
               트   데이터 업데이트
                   / 기능 수행
행동 기반 게임오브젝트 구조
컨트롤러에서 게임오브젝트에 명령을 주고, 게임오브젝트가 명령을 받으면 액션을 실행합니다. 액션
은 컴포넌트, 게임오브젝트(위치, 회전 등)를 조작합니다.
간단히 표현해보면..
컴포넌트

• 독립적인 하나의 기능

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

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

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




클라이언트



        컴포넌트 베이스




서버
컨트롤러

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

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

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

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




클라이언트




        컨트롤러 베이스
서버
액션

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

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

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

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




클라이언트




서버
        액션 베이스
액션 명령

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

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

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

• 액션 명령은 ActionBase 를 직접 상속받은 객체의 RTTI
  를 이용
편의를 위해 매크로를 사용

                ActionBase 직접 상속



                 액션 명령 선언




                 액션 명령 정의



           ActionBase 직접 상속 X
매크로의 형태


          액션 명령 ID

          데이터




           ActionBase
           직접 상속만 허용
            RTTI를 사용
액션 테이블

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

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

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

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

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



                                   액션 연결




활성화/비활성화
액션 레이어

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

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

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




                 액션 실행




  액션을 실행시킬 레이어
게임 오브젝트 구성 예시


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




ModelComponent
                                 오브젝트


              ActionTable                         ActionLayer



          Idle - CharacterIdle
입력 X
     실행 중 액션 X              UserInputController
     Idle 명령



ModelComponent
                                 오브젝트


              ActionTable                         ActionLayer



          Idle - CharacterIdle
입력 X
     실행 중 액션 X              UserInputController
     Idle 명령



ModelComponent
                                 오브젝트
 Idle 명령에
 연결된 액션 검색

              ActionTable                         ActionLayer



          Idle - CharacterIdle
입력 X
     실행 중 액션 X              UserInputController
     Idle 명령



ModelComponent
                                 오브젝트
 Idle 명령에
 연결된 액션 검색

              ActionTable                         ActionLayer
                             CharacterIdle 실행

          Idle - CharacterIdle
입력 X
     실행 중 액션 X              UserInputController
     Idle 명령



ModelComponent
                                 오브젝트
 Idle 명령에
 연결된 액션 검색

              ActionTable                         ActionLayer
                             CharacterIdle 실행

          Idle - CharacterIdle                    CharacterIdle

                                              Idle 애니메이션 재생
UserInputController




ModelComponent
                                 오브젝트


              ActionTable                         ActionLayer



          Idle - CharacterIdle                    CharacterIdle
UserInputController




ModelComponent                                        MoveDataComponent

                                오브젝트


                ActionTable                         ActionLayer



 Idle - CharacterIdle                               CharacterIdle


 MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                              UserInputController    MoveToPosition 명령




ModelComponent                                        MoveDataComponent

                                오브젝트


                ActionTable                         ActionLayer



 Idle - CharacterIdle                               CharacterIdle


 MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                                 UserInputController    MoveToPosition 명령




   ModelComponent                                        MoveDataComponent

                                   오브젝트
MoveToPosition 명령에
연결된 액션 검색

                   ActionTable                         ActionLayer



    Idle - CharacterIdle                               CharacterIdle


    MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                                 UserInputController    MoveToPosition 명령




   ModelComponent                                        MoveDataComponent

                                   오브젝트
MoveToPosition 명령에
연결된 액션 검색

                   ActionTable                         ActionLayer
                            CharacterMoveToPosition
                                     실행
    Idle - CharacterIdle                               CharacterIdle


    MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                                 UserInputController    MoveToPosition 명령




   ModelComponent                                        MoveDataComponent

                                   오브젝트
MoveToPosition 명령에
연결된 액션 검색

                   ActionTable                         ActionLayer
                            CharacterMoveToPosition
                                     실행
    Idle - CharacterIdle                               CharacterIdle

                                                              CharacterMoveToPosition
    MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                                 UserInputController    MoveToPosition 명령




   ModelComponent                                       MoveDataComponent

                                   오브젝트
MoveToPosition 명령에
연결된 액션 검색

                   ActionTable                         ActionLayer
                            CharacterMoveToPosition
                                     실행
    Idle - CharacterIdle
                                                             CharacterMoveToPosition
    MoveToPosition - CharacterMoveToPosition
이동할 위치 클릭
                                 UserInputController    MoveToPosition 명령




   ModelComponent                                       MoveDataComponent

                                   오브젝트
MoveToPosition 명령에
                                                             위치 값 설정
연결된 액션 검색
                                                                             이동속도
                   ActionTable                         ActionLayer            참조
                            CharacterMoveToPosition
                                     실행
    Idle - CharacterIdle
                                                             CharacterMoveToPosition
    MoveToPosition - CharacterMoveToPosition
UserInputController




ModelComponent                                       MoveDataComponent

                                오브젝트


                ActionTable                         ActionLayer



 Idle - CharacterIdle

 MoveToPosition - CharacterMoveToPosition
어쨌든..
게임오브젝트 구성을 쉽게!!
Q&A
감사합니다




              박성준
        notorz@hotmail.com

행동 기반 게임오브젝트

  • 1.
    행동 기반 게임오브젝트 (action based game object) 박성준 (notorz@hotmail.com)
  • 2.
  • 3.
  • 4.
  • 5.
    소개하려는 것은.. 저는 이렇게 만들었습니다..
  • 7.
    행동 기반 게임오브젝트란? •컴포넌트 기반 게임오브젝트의 일종 • 기존 컴포넌트를 컴포넌트, 컨트롤러, 액션으로 나누어 구현 • 컴포넌트끼리의 의존도↓, 코드의 재활용↑ • 여러 컴포넌트에 접근해야 하는 복잡한 처리도 간단하게 구현 일단 포장부터...
  • 8.
    그 중에서도 가장중요한 것은 행동 기반 게임오브젝트 = 기본적으로 컴포넌트 기반
  • 9.
    아주 조금 다를뿐입니다. 행동 기반 게임오브젝트 기존의 컴포넌트 기반 게임오브젝트
  • 11.
    처음 다닌 게임회사 그리고 첫 게임
  • 12.
    Rakion의 게임 오브젝트는.. 이미 서비스중인 게임인 만큼, 굉장히 많이 만들어져 있었고, 컴포넌트 기반 게임오브젝트의 거의 모 든 강연에서 나온 계층구조 설계의 거의 모든 문제점들이 발생하고 있는 상황이었습니다. KASA2008, 김성헌님의 C++ Component System GDC2009, Game Object Component Architecture
  • 13.
    게임 오브젝트여 당신은 누구시길래..
  • 14.
    게임 오브젝트란? 캐릭터 • 플레이어, 몬스터 등 캐릭터 레벨 지형 • 캐릭터가 서있는 지형 • 바위, 나무, 건물 등 배경 오브젝트 오브젝 발사체 프랍 • 함정, 회복아이템 등 트리거 트 • 미사일, 수류탄, 파편 등 • 카메라, 광원 등 카메라 트리거 광원
  • 15.
    게임 오브젝트란? 캐릭터 레벨 지형 오브젝트 상호작용 오브젝 발사체 프랍 트 오브젝트 카메라 트리거 오브젝트 광원 게임 = 게임 오브젝트 사이의 상호작용
  • 17.
    새로운 프로젝트 시작! 방을만들고 들어가서 다른 유저들과 몬스터를 잡고 노는 MO Action RPG를 만들게 되었습니다. 총 도 쏘고 칼도 휘두르고 물약도 먹고 같이 공격해주거나 회복시켜주는 기계도 소환하고..
  • 18.
    때가 왔다! 엑셀은 밟을수 없어도 핸들만은 놓치지 않겠어!
  • 19.
    그래서 게임오브젝트를.. 엑셀은 밟을수 없어도 핸들만은 놓치지 않겠어!
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
    당시 사용했던 구조 컨트롤러에서게임오브젝트에 명령을 주고, 게임오브젝트가 명령을 받으면 액션을 실행합니다. 액션 은 모델과 데이터, 게임오브젝트(위치, 회전 등)를 조작합니다. 모델 조종 데이터 행동
  • 27.
    컨트롤 러 오브젝 트 모델/ 액션 데이터
  • 28.
    컨트롤 조건 검사 러 오브젝 트 모델/ 액션 데이터
  • 29.
    컨트롤 조건 검사 러 액션 명령 오브젝 트 모델/ 액션 데이터
  • 30.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 트 모델/ 액션 데이터
  • 31.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 명령에 맞는 액션 실행 트 모델/ 액션 데이터
  • 32.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 명령에 맞는 액션 실행 트 모델/ 액션 데이터 데이터 업데이트 / 기능 수행
  • 33.
  • 34.
    오브젝트 액션 명령 엑티브 액터
  • 35.
    오브젝트 액션 명령 엑티브 액터 명령에 연결된 액션 서다 달리다 때리다 맞다 죽다
  • 36.
    오브젝트 액션 명령 엑티브 액터 명령에 연결된 액션 서다 달리다 때리다 맞다 죽다
  • 37.
  • 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 변신 후
  • 44.
  • 45.
    바깥세상은 어떤 곳일 까.. 컴포넌트가 뭔지 몰랐습니다..
  • 46.
    컴포넌트 기반으로 게임오브젝트를 만들면좋데! 오후 4시 30분에 여기에서 발표합니다. 많이 참석해주세요!! 컴포넌트?!
  • 47.
  • 49.
    다시 새로운 프로젝트시작! 원작의 유명 대전 격투 게임을 RPG로 재탄생 시킨 사무라이쇼다운 온라인은 Full 3D타입의 쾌적하 고 전략성 있는 전투를 추구하며 원작의 방대한 세계관을 그대로 즐길 수 있는 게임입니다.
  • 50.
    지금이다!! 컴포넌트! 나도 이녀석으로 게임오브젝트를 만들어보자!
  • 51.
    컴포넌트 기반 게임오브젝트의 형태 게임 오브젝트는 기본적인 데이터만을 가지고 있고, 모든 데이터와 기능은 컴포넌트로 만들어서 게임오브젝 트에 붙이는 형태입니다. 오브젝트의 형태별로 필요한 기능만을 가질 수 있도록 설계된 방식입니다. ModelComponent MotionTreeComponent HealthComponent 오브젝 TouchComponent AIComponent 트 MoveableComponent PhysicsComponent TargetableComponent
  • 52.
    하지만 역시 쓰던것이 편하나 봅니다...
  • 53.
    저는 이런 부분들이불편했어요 잘 알진 못하지만.. • 컴포넌트가 다른 컴포넌트를 참조하고 수정하는 경우 • 하나의 일을 여러 컴포넌트가 복잡적으로 처리해야 하는 경우 • 사실 이렇게 페이지를 하나 쓸 만큼 나쁜 점이 많지 않아요..
  • 54.
  • 56.
    오브젝트에 액션 명령 오브젝트가 가지고 있는 기본적인 기능/데이터들 배경 투명으로 어떻게 만드나요.. 오브젝트가 명령에 따라 취해야 하는 액션
  • 57.
    컨트롤러 오브젝트에 액션 명령 컴포넌트 오브젝트가 가지고 있는 기본적인 기능/데이터들 배경 투명으로 어떻게 만드나요.. 액션 오브젝트가 명령에 따라 취해야 하는 액션
  • 58.
    컨트롤러 UserInputController AIController RemoteController 컴포넌트 ModelComponent 오브젝 HealthComponent 트 MoveDataComponent TargetableComponent Drop 액션 Idle ActionTable Struck Move Attack Touch
  • 59.
    컨트롤 러 오브젝 트 컴포넌 액션 트
  • 60.
    컨트롤 조건 검사 러 오브젝 트 컴포넌 액션 트
  • 61.
    컨트롤 조건 검사 러 액션 명령 오브젝 트 컴포넌 액션 트
  • 62.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 트 컴포넌 액션 트
  • 63.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 명령에 맞는 액션 실행 트 컴포넌 액션 트
  • 64.
    컨트롤 조건 검사 러 액션 명령 액션 명령 다른 오브젝트 오브젝 명령에 맞는 액션 실행 트 컴포넌 액션 트 데이터 업데이트 / 기능 수행
  • 65.
    행동 기반 게임오브젝트구조 컨트롤러에서 게임오브젝트에 명령을 주고, 게임오브젝트가 명령을 받으면 액션을 실행합니다. 액션 은 컴포넌트, 게임오브젝트(위치, 회전 등)를 조작합니다.
  • 66.
  • 67.
    컴포넌트 • 독립적인 하나의기능 • 어떠한 일을 하기 위해 쓰이는 데이터 • 여러 게임 오브젝트에 붙어 각각의 고유한 기능을 수행 • 다른 컴포넌트나 게임오브젝트를 수정하지 않음
  • 68.
  • 69.
    공통 클라이언트 컴포넌트 베이스 서버
  • 70.
    컨트롤러 • 게임 오브젝트에액션 명령 • 활성화 / 비활성화가 가능 • 컴포넌트나 게임오브젝트를 수정하지 않음 • 게임 오브젝트 자체에서 발생되는 액션을 명령
  • 71.
  • 72.
    공통 클라이언트 컨트롤러 베이스 서버
  • 73.
    액션 • 게임오브젝트가 해야하는 어떠한 일 • 컴포넌트나 게임오브젝트를 실제로 수정함 • 액션 명령을 받으면 명령에 연결된 액션을 실행 • 게임오브젝트는 한번에 여러 개의 액션 실행 가능
  • 74.
  • 75.
  • 76.
    액션 명령 • 액션을실행시키기 위한 명령 • 게임오브젝트는 액션 명령을 받고 연결된 액션을 실행 • 액션을 실행하는데 사용되는 데이터는 명령에 따라 달라 짐 • 액션 명령은 ActionBase 를 직접 상속받은 객체의 RTTI 를 이용
  • 77.
    편의를 위해 매크로를사용 ActionBase 직접 상속 액션 명령 선언 액션 명령 정의 ActionBase 직접 상속 X
  • 78.
    매크로의 형태 액션 명령 ID 데이터 ActionBase 직접 상속만 허용 RTTI를 사용
  • 79.
    액션 테이블 • 게임오브젝트가 할 수 있는 액션들의 모음 • 액션 명령에 액션을 연결하여 저장 • 게임 오브젝트는 여러 개의 액션 테이블을 가짐 • 액션 테이블에는 레벨이 존재하여 활성화된 액션 테이블 중 레벨이 높은 것부터 액션 명령을 검사
  • 80.
    액션 테이블의 형태 레벨이 높은 액션 테이블부터 실행할 액션 검사 액션 연결 활성화/비활성화
  • 81.
    액션 레이어 • 게임오브젝트는액션 레이어를 통해 액션을 실행 • 액션의 시작부터 끝까지를 관리 • 레이어 개념으로 액션을 실행하여 한번에 여러 개의 액 션을 실행시킴
  • 82.
    액션 레이어의 형태 액션 실행 액션을 실행시킬 레이어
  • 83.
    게임 오브젝트 구성예시 플레이어 캐릭터의 이동을 간단하게 만들어 봅시다
  • 84.
    UserInputController ModelComponent 오브젝트 ActionTable ActionLayer Idle - CharacterIdle
  • 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 애니메이션 재생
  • 89.
    UserInputController ModelComponent 오브젝트 ActionTable ActionLayer Idle - CharacterIdle CharacterIdle
  • 90.
    UserInputController ModelComponent MoveDataComponent 오브젝트 ActionTable ActionLayer Idle - CharacterIdle CharacterIdle MoveToPosition - CharacterMoveToPosition
  • 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
  • 97.
    UserInputController ModelComponent MoveDataComponent 오브젝트 ActionTable ActionLayer Idle - CharacterIdle MoveToPosition - CharacterMoveToPosition
  • 98.
  • 99.
  • 100.
  • 101.
    감사합니다 박성준 notorz@hotmail.com