G+AIDER SOLUTION G+AIDER Unity

개요

G+AIDER Unity는 Studio와 통신하여 오브젝트 기반 게임 테스트를 실행합니다. 그리고 UIRecorder와 StateRecorder를 포함 합니다.

Studio (Unity)

  • 1. DebugLog View UnityEngine으로 만들어진 게임은 Log를 포함할 수 있습니다. Log에는 현재 게임의 상태나 GameObject의 변화 등의 다양한 정보를 포함할 수 있습니다. Studio는 Unity Log를 그대로 출력하여 사용자가 확인할 수 있는 기능을 제공하고 있습니다. - DebugLog View의 모습
  • 2. Hierarchy View - Hierarchy View의 모습 UnityEngine으로 만들어진 게임은 Hierarchy를 가지고 있으며 Hierarchy에는 현재 열려있는 Scene(여러 개의 Scene이 이루어져 게임이 완성되며, 각 Scene에 환경과 장애물, 장식을 배치하고 게임을 디자인 합니다.)의 모든 GameObject가 포함되어 있습니다. Studio는 게임의 Hierarchy 정보를 받아 Hierarchy View를 구성할 수 있습니다. Hierarchy View에서GameObject의 상태에 따라서 Node가 다르게 그려집니다. GameObject는 존재하나 게임 화면에 나타나지 않는 경우는(InActive) 위 화면의 "Campfire" GameObject처럼 흐리게 나타납니다. 그리고 Unity OutLine으로 표시가 가능한 GameObject의 경우, Node왼쪽에 icon으로 표시해줍니다.
  • 3. OutLine Hierarchy는 Scene의 모든 GameObject를 가지고 있지만, 게임 화면 내의 GameObject가 Hierarchy View의 어떤 GameObject와 매칭되는지, 사용자는 알 수가 없습니다. OutLine기능은 Hierarchy View에서 Select한 Node에 해당하는 GameObject를 게임화면에 표시해주는 기능입니다. 그래서 사용자는 게임화면에서 그려지는 OutLine을 보고 Hierarchy의 Node가 게임 화면 내에 어떤 GameObject인지를 인식 할 수가 있습니다. - Hierarchy View에서 "Mercenary" GameObject를 Select하는 경우 - 게임 화면에서 "Mercenary" GameObject가 OutLine으로 표시됩니다. G+AIDER Studio의 MenuBar에서 추가로 OutLine을 그려줄 수 있습니다. - G+AIDER Unity OutLine 선택 화면 위의 그림에서 Button을 클릭하는 경우 Scene에 존재하는 모든 Button에 OutLine이 그려집니다. - MenuBar에서 Button을 선택하여, Scene내에 Button들이 OutLine표시된 모습 이 상태에서 게임 내의 SelectCharacter Button과 LoadGame Button 클릭하는 경우 Studio에 SelectCharacter와 LoadGame에 해당하는 Unity Block이 생성 됩니다. - Select Character와 Load Game Button에 해당하는 UnityBlock이 생성된 모습
  • 4. UnityBlock UnityBlock은 Object기반의 Blockly 스크립트 테스트를 진행하기 위해 존재합니다. UnityBlock은 Hierarchy View에서 테스트 하고자 하는 GameObject를 Blockly로 Drag and Drop하는 경우 생성됩니다.
    • 4.1. UserInput UnityBlock은 다양한 테스트를 지원합니다. 첫 번째는 UI 테스트 입니다. UserInput에서 Button Click, Toggle Click, InputField 입력, Scrollbar, Sliderbar, Dropdown 테스트를 진행할 수 있습니다. - Unity Block에서 테스트 하고자 하는 UI타입 선택하는 화면 위의 Unity Block을 실행시키면, 게임 내의 "SelectCharacter" Button이 click 됩니다.
    • 4.2. Assert(검증) 두 번째는 Assert(검증) 입니다. Assert는 게임내의 단위 기능이 잘 작동하는지 확인하는 기능입니다.
      • 4.2.1 GameObject, ConstValue 비교 GameObject와 GameObject를 비교하거나 GameObject와 ConstValue를 비교하는 2가지 방법이 가능합니다. ConstValue를 비교하는 경우, 상수값을 입력해 주어야 하고, GameObject와 비교하고자 하는 경우는 Hierarchy View에서 GameObject를 Drag and Drop으로 생성해야 합니다. - Unity Block 생성 방법 과, GameObject와 GameObject의 비교 방법 - UnityBlock에서 ConstValue와 비교할 것인지 GameObject와 비교할 것인지 선택하는 화면.
      • 4.2.2 검증하고자 하는 타입 2가지 방법 중 하나를 선택하였다면 이제 검증하고자 하는 타입을 선택해야 합니다. 타입에는 Active, String, position, scale, rotation값이 있습니다. Active는 Scene에서의 상태입니다( Scene에 나타나는 경우 true, Scene에 나타나지 않는 경우는 false), String은 게임 UI의 Text값 입니다. Position은 GameObject의 위치 값 입니다. Scale은 상대적인 크기 값 입니다. Rotation은 공간상에서의 회전 값 입니다. - UnityBlock에서 검증하고자 하는 타입을 선택하는 화면
      • 4.2.3 검증하고자 하는 값 마지막으로 검증하고자 하는 값을 선택해야 합니다. Active의 경우 true 나 false를 선택하면 되며 String은 Text값, position, scale, rotation은 vector3값 입니다.
    • 4.3. UnityBlock의 mark 표시 그리고 UnityBlock은 Child로 "String" Block을 가지고 있습니다. "String" Block을 선택하는 경우, Hierarchy View의 해당하는 Node를 표시해 줍니다. - "String" Block을 click하는 경우 - Hierarchy View에서 해당하는 Node가 표시됩니다.

UIRecorder

  • 1. About UIRecorder는 UI를 Record하고 Replay 할 수 있습니다. UI는 Button, Toggle, Slider, Scrollbar, Dropdown, InputField, ScrollView를 포함합니다. 사용자가 UI와 상호작용 하는 Event를 Record하고 Replay 합니다.
  • 2. 사용법 사용법은 간단합니다. 코드를 사용하는 경우와 코드를 사용하지 않고Unity Editor에서 적용하는 방법이 있습니다. 코드를 사용하는 경우는 단지 몇 줄의 코드만 적용하면 사용하실 수 있습니다. 첫 번째는 다음의 코드를 포함하는 겁니다. using umgts; 두 번째는 UIRecorder Component를 생성하는 예제입니다.
    void Start() 
    {
    this.gameObject.AddComponent();
    }
    
    UIRecorder를 사용하기 위한 준비가 끝났습니다. 다음은 실제로 기능을 사용하는 방법을 소개합니다.
    • 1) UIRecorder의 Record 기능을 시작하는 함수입니다. 이 함수를 호출하는 경우, UIRecorder기능을 시작하게 됩니다. UIRecorder.PTR.Record();
    • 2) UIRecorder의 Replay 기능을 시작하는 함수입니다. 이 함수를 호출하는 경우, Record된 UI를 Replay 합니다. 만약 Record된 데이터가 없다면 Replay 되지 않습니다. UIRecorder.PTR.Replay();
    • 3) UIRecorder의 Stop 기능을 호출하는 함수입니다. 진행중인 Record 나 Replay를 중지합니다. UIRecorder.PTR.Stop();
    • 4) StateRecorder의 Replay Stop 기능을 호출하는 함수입니다. 진행중인 Replay를 중지합니다. GameStateRecorder.PTR.StopReplay();
  • 3. Extension
    • 1) GameUiTest Component 현재 Record 기능이 실행 중인지는 UIRecorder.PTR.bRecord의 true, false 값으로 판단하실 수 있습니다. 마찬가지로 Replay 기능이 실행 중인지는 UIRecorder.PTR.bReplay의 true, false 값으로 판단하실 수 있습니다. - Unity Editor에서 확인할 수 있는 UIRecorder.PTR.bRecord가 On이 되어있는 상태. - Unity Editor에서 확인할 수 있는 UIRecorder.PTR.bRepley가 On이 되어있는 상태
    • 2) Save and Load GameUiTest.PTR.Save(filename) 함수를 호출하여 Record한 내용을 저장 할 수 있습니다. GameUiTest.PTR.SaveFileOpen(filename) 함수를 호출하여 Record한 내용을 불러올 수 있습니다. 저장 형식은 .json 형식이고, 외부에서 읽을 수 있으며 수정 할 수도 있습니다. 파일 내용에는 UI의 타입, UI Event가 발생한 시간, 값(InputField에는 Text, checkbox는 check여부 등)이 저장됩니다.
    • 3) Example Scene Example Scene의 모습입니다. 코드를 사용하지 않고 Unity Editor에서 UIRecorder를 적용하는 방법을 확인 할 수 있습니다. 바로 Component를 추가하는 방식입니다. Example Scene에는 Hierarchy의 "main" GameObject에 Component가, "Canvas"->"Panel"->"Recorder"의 Button들에 Event가 할당되어 있습니다. 그리고 바로 UIRecorder의 Record, Replay, Stop, File Save, File Load를 테스트 해보실 수 있습니다. 그리고 예제 Scene에 Save와 Load를 쉽게 할 수 있게 도와주는 FileViewer가 포함되어 있습니다. 만약 사용하고 싶으신 경우에 그대로 사용 하셔도 됩니다.

StateRecorder

  • 1. About StateRecorder는 GameObject(camera, characters, animation 등)를 Record하고 Replay 할 수 있습니다. GameObject의 상태값(position, rotation, scale)을 Record 합니다. 설정값을 통해 Animation을 Record 할 수도 있습니다.
  • 2. 사용법 사용법은 간단합니다. 코드를 사용하는 경우와 코드를 사용하지 않고 Unity Editor에서 적용하는 방법이 있습니다. 코드를 사용하는 경우, 단지 몇 줄의 코드만 적용하면 사용하실 수 있습니다. 첫 번째는 다음의 코드를 포함하는 겁니다. using umgts; 두 번째는 StateRecorder Component를 생성하는 예제입니다.
    void Start()
    {
    this.gameObject.AddComponent();
    }
    
    세 번째는 Record하려고 하는 GameObject에 다음의 코드를 추가 합니다.
    void Start()
    {
    GameStateRecorder.PTR.Mark4Recording(this.gameObject);
    }
    
    StateRecorder를 사용하기 위한 준비가 끝났습니다. 다음은 실제로 기능을 사용하는 방법을 소개합니다.
    • 1) StateRecorder의 Record 기능을 시작하는 함수입니다. 이 함수를 호출하는 경우, StateRecorder기능을 시작하게 됩니다. GameStateRecorder.PTR.Record();
    • 2) StateRecorder의 Replay 기능을 시작하는 함수입니다. 이 함수를 호출하는 경우, Record된 GameObject의 상태값을 Replay 합니다. 만약 Record된 데이터가 없다면 Replay 되지 않습니다. GameStateRecorder.PTR.Replay(1);
    • 3) StateRecorder의 Record Stop 기능을 호출하는 함수입니다. 진행중인 Record를 중지합니다. GameStateRecorder.PTR.StopRecord();
    • 4) StateRecorder의 Replay Stop 기능을 호출하는 함수입니다. 진행중인 Replay를 중지합니다. GameStateRecorder.PTR.StopReplay();
  • 3. Extension
    • 1) File Save/Load GameStateRecorder.PTR.WriteFile(filename) 함수를 호출하여 Record한 내용을 저장 할 수 있습니다. GameStateRecorder.PTR.ReadFile (filename) 함수를 호출하여 Record한 내용을 불러올 수 있습니다. .gsr 형식으로 저장이 되고, 저장된 내용은 암호화 되어있어 외부에서 읽을 수 없습니다.
    • 2) Animation this.gameObject.AddComponent<GameStateRecorder>(); 코드 실행 시 생성되는 StateRecorder Component 입니다. GameStateRecorder.PTR.bUseAnimationRecord가 On이 되어 있고, Record 하고자 하는 GameObject가 Animator, Animation Component를 가지고 있다면 해당 Animation을 Record 및 Replay 합니다.
    • 3) GameObject Children Record 하고자 하는 GameObject의 모든 children GameObject가 자동으로 Record 및 Replay 됩니다. 예를 들어 Cubes에 GsrMarkGo Component를 추가하면 Cubes의 Children(Cube, Cube(1)…) 에GsrMarkGo Component를 일일이 추가하지 않아도 Record가 가능합니다.
    • 4) Precaching Precaching은 Record 하고자 하는 GameObject가 Record 도중 삭제되는 경우에도 Record가 가능하다는 이점이 있습니다. Precaching 기능을 사용하기 위해서는 프로젝트 내 "Resources" 폴더 내에 Record 하고자 하는 GameObject를 Prefab으로 저장해야 합니다. 그리고 Prefab이름을 Scene의 GameObject와 같게끔 설정해야 합니다. - "Resources" 폴더에 "Cubes" GameObject가 Prefab 되어있는 상태
    • 5) Property Recorder Property Recorder는 Unity Editor에서 개발자가 만든 스크립트의 변수 값 변화를 추적 할 수 있는 기능입니다. 즉 스크립트의 변수값도 Record, Replay가 가능 합니다. Hierarchy에서 Replay를 위해 생성된 clone GameObject의 GsrProperty Component에서 확인 할 수 있습니다.
    • 6) Example Scene Example Scene의 모습입니다. 코드를 사용하지 않고 Unity Editor에서 StateRecorder를 적용하는 방법을 확인 할 수 있습니다. 바로 Component를 추가하는 방식입니다. Example Scene에서 "GameStateRecorder” GameObject에는 <GameStateRecorder> Component가, Record 하려는 GameObject인 "Cubes", "Cubes2", "Cube", "Pivot"에는 <GsrMarkGo> Component가 있는 것을 확인 할 수 있습니다. Scene에서 화면의 Block을 클릭하시면 Block들이 폭발하는 것을 보실 수 있습니다. 폭발하는 모습을 Record하고 Replay해보실 수 있습니다. 그리고 StateRecorder의 Record, Replay, Stop, File Save, File Load기능을 테스트 해보실 수 있는 Button들이 추가되어 있습니다. 그리고 Example Scene에 Save와 Load를 쉽게 할 수 있게 도와주는 FileViewer가 포함되어 있습니다. 만약 사용하고 싶으신 경우에 그대로 사용 하셔도 됩니다.

물음표

궁금한 사항이 있으신가요?