State Unit(스테이트 유닛)Super Unit(수펴 유닛) 유사하지만, 스크립트 그래프가 아닌 상태 그래프에서 이용되며 부모 스크립트 그래프 단계에서 하나의 유닛(상태 유닛)으로 전체 상태 그래프를 감쌀 수 있도록 해준다.

State Unit은 시작(Start)과 중지(Stop)를 나타내는 제어 입력 포트(Control Input Port) 2개와 이에 매칭되는 제어 출력 포트(Control Output Port) 2개가 있다.

State Unit이 시작되면 그 내부에 있는 상태 그래프의 모든 Start State가 발동된다. 또한 State Unit이 멈추게 되면 그 내부에 있는 모든 상태와 트랜지션이 비활성 상태가 된다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-state-units.html

상태(State)는 트랜지션(Transition)으로 연결되어 있으며, 연결된 상태들이 실행되는 순서가 그 트랜지션들에 의해 결정된다.

 

트랜지션을 만드는 방법

  1. 상태 노드위에서 마우스 오른쪽 클릭 후 Make Transition을 선택한다.
  2. 다음 중 하나를 수행한다.
    • 목적 상태를 클릭한다.

           

  • 새로운 상태를 자동으로 생성하고자 한다면 빈 공간에 트랜지션 끝을 놓으면 된다.

 

  • state 노드 위에서 Ctrl-Click(Mac: Cmd-Click)을 하고 끌어서 트랜지션을 생성한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-creating-transition.html

트랜지션(Transitions)은 비주얼 스크립팅이 활성 상태를 다른 상태로 전환하는 조건을 갖고 있는 상태간 연결점을 말한다.

트랜지션 편집하기

Script State와 마찬가지로 트랜지션은 Script Graph로 이루어져 있다.

위의 예에서는 새로운 상태로 전환할 수 없는 문제점을 가지고 있다. Event가 언제 발동해야 하는지를 지정하지 않았기  때문에 결고 상태가 전환할 수 없는 것이다. 따라서 목적 상태와 트랜지션 둘 다 흐리게 표시되고 있다. 트랜지션 유닛을 더블 클릭하거나 Edit Graph 버튼을 클릭하면 트랜지션 그래프가 나타난다. 기본적으로 다음과 같이 구성된다.

트리거 상태 전환 유닛(Trigger State Transition Unit)은 부모의 상태가 이 트랜지션 조건에 따라 상태가 변경되어야 한다는 것을 지시하는 특별한 유닛이다. 이벤트(events)나 조건(if)과 같은 유닛을 상태 전환 그래프에서 사용하면 된다.

 

예를 들어, "Player" tag가 붙은 게임 오브젝트가 적(Enemy)에게 감지(trigger)된다면 그 적은 추척 상태(chase state)로 전환된다고 할 때, 그 그래프는 다음과 같이 그려 질 수 있다.

끝으로 상위 상태 그래프에서 트랜지션의 라벨을 변경하고자 한다면, 해당 트랜지션을 선택하고 그래프 인스펙터에서 타이틀을 작성하면 된다.

 

상위 상태로 돌아가면 트랜지션은 다음과 같이 나타난다.(역자주-트랜지션 내부에 조건 스크립트를 작성하고 나오면 아이콘이 변경 된다.)

트랜지션에 직접 제목을 작성하지 않을 경우, 이벤트의 이름과 설명이 자동으로 지정된다.

 

트랜지션 라벨은 항상 보이는 것이 디폴트이다. 이것이 그래프에서 너무 많이 차지하여 변경하고 싶다면, Unity > Preferences > Visual Scripting > State Graphs > Transition Display에서 디스플레이 트리거를 변경한다.

 

 

셀프 트랜지션

자기 자신의 상태로 되돌아 오는 트랜지션은 매우 유용한 경우가 있다. State 노드 위에 마우스 오른쪽 버튼을 클릭하고  Make Self Transition을 선택한다.

예를 들어, 적 캐릭터가 3초 마다 랜덤하게 방향을 바꾸게 함으로써 순찰(patrol) 기능을 구현할 수 있다.

 

순찰 상태의 스크립트 그래프는 다음과 같다.(역자주 - 이동할 타겟의 x, z 좌표가 -30 ~ 30 사이에서 각각 랜덤하게 정해진다.)

셀프 트렌지션은 다음과 같다.(역자주 - 3마다 상태가 전환된다.)

상위 상태 그래프에서 보면 다음과 같이 나타난다.(역자주 - 3초마다 랜덤 x, y 좌료로 이동하게 된다)

Self Transition

다중 트랜지션 추가하기

상태 전환을 위해 추가할 수 있는 트랜지션의 수에는 제한이 없다. 그러나 트랜지션 사이에 우선순위 개념이 없기 때문에 적절한 트랜지션을 사용해야 한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-transitions.html

'VS 기본' 카테고리의 다른 글

스테이트 유닛  (0) 2021.08.23
트랜지션 만들기  (0) 2021.08.23
상태 그래프를 이용한 상태 전환 작업  (0) 2021.08.23
input manager 이용 사용자 입력 받기  (0) 2021.08.22
Input system 이용 사용자 입력 받기  (0) 2021.08.21

상태(States)는 오브젝트가 특정 상태에 있을 때 어떻게 행동해야 하는지를 규정하는 것이다. 상태(State)는 주로 인공지능(AI) 행동, 씬이나 레벨 구조 또는 상태 전환을 위해 요구되는 씬의 어떤 측면에 사용된다.

 

예를 들어, 적이면서 비 비플레이어 캐릭터의 상태 머신(state machine)은 "순찰(Patrolling)", "추적(Chasing)", "공격(Attacking)", "도피(Fleeing)" 네 개의 상태를 가질 수 있고, 문의 상태 기계은 "잠김(Locked)", "잠금 해제(Unlocked)", "열림(Open)" 세 개의 상태를 가질 수 있다.

 

그래프에 추가할 수 있는 상태 타입은 스크립트 상태(Script State)와 수퍼 상태(Super State) 두 가지가 있다. 스크립트 상태(Script State)는 중첩된(nested) 스크립트 그래프(script graph)로 구성되며, 수퍼 상태(Super State)에는 중첩된(nested) 상태 그래프(state graph)로 구성된다.

 

(역자주-이후 부터는 상태라는 말 대신 State(스테이트)라고 사용하겠다. 텍스트가 번역된 것이 아니기 때문에 스테이트를 머릿속에서 상태라고 번역해 가며 읽지 않기 때문에 스테이트라고 바로 읽는 것이 더 자연스럽다.)

 

참고: State는 트랜지션(Transitions)을 통해 다른 State로 연결(전환)된다.

 

Script State와 Super State 두 가지 모두 "nesters" 형태인데 이는 머신(Machine)과 똑같은 원리로 동작한다는 것을 의미한다. 즉, 해당 하위 그래프(Sub-graph)는 내장시키는 임배드(embed)로 작업하거나 참조형으로 연결시키는 그래프(graph)로 작업할 수 있다. Super State의 인스펙터(Inspector)도 같은 방식으로 보이고 동작한다.

State Machine(스테이트 머신)

State 그래프는 State Machine에 저장된다. Add Component를 하고 State Machine을 선택하면 State Machine이 생성된다. 그래프를 편집하려면 State Machine을 저장해야한다.

Visual Script - State Machine

State(상태) 생성하기

State를 생성하는 메뉴를 표시하려면 State Graph의 빈 곳에 마우스 오른쪽 버튼을 클릭한다.

Script Graph의 유닛(Unit)들 처럼 새로운 State가 생성되는데 입력 값이 없기 때문에 흐리게 표시되어져 있다. 새로운 State가 흐리게 표시되지 않게 하려면 도구 모음(toolbar)에서 Dim을 비활성화하면 된다.

Start State(s)

하나 또는 두 개 이상의 Start State를 만들어서 그래프가 시작 되는 싯점의 상태를 규정할 수 있다. 이렇게 하려면 State 유닛 위에 마우스 오른쪽 버튼을 누르고 Toggle Start을 선택한다. Start State 유닛의 상단이 녹색으로 강조 표시된다.

일반적인 유한 상태 기계(FSM) 도구와 달리 비주얼 스크립팅은 다중 Start State를 지원한다. 이는 같은 그래프에서 병렬적으로 FSM을 실행하거나, 어떤 포인트에서 병렬적인 상태진입이 가능하다는 것이다. 하지만 대부분은 한 개의 Start State면 충분하다.

Any State

현재 어떤 상태에 놓여 있는 것과는 상관없이 무조건 다른 상태로 전환을 하려면 Any State를 생성한다.

참고: 이 상태는 어떤 트랜지션(transition)을 받을 수 없으며, 어떤 실행도 할 수 없다.

State 제목과 요약 작성하기

State의 제일 상단에 헤더(header)가 있다. 이는 그래프의 제목(Title)과 요약(Summary)을 표시하며 기능에는 영향을 미치지 않는다. 즉, 헤더는 State를 구분할 수 있는 제목이나 간략 설명을 작성할 수 있는 곳이다. Script Graph 아이콘은 Script State 아이콘과 동일하게 보인다.

 

State 인스펙터(Inspector)는 머신(Machine)과 동일한 형태와 방식으로 동작한다. State Graph의 내용을 확인하거나 편집하기 위해서는 Edit Graph 버튼을 클릭하거나 State 노드를 더블클릭하면 된다.

 

Script State

Script State의 본체는 중첩된 스크립트 그래프내부에서 사용 중인 모든 Event 목록을 표시한다. 디폴트로, 새로운 Script State를 생성하면 On Enter State, Update 그리고 On Exit State Event가 자동 생성된다.

  • On Enter State는 상위(부모) 상태에 전환이 발생했을 때 즉 그 상태가 시작될 때 호출된다.
  • On Exit State는 다른 상태로 전환되어 일어날 때, 즉 그 상태가 종료될 때 호출된다.
  • Update는 그 상태가 활성화되어 있을 때 매 프레임마다 호출된다.

스크립트 그래프에 추가된 이벤트는 상위 State가 활성 상태인 경우에만 수신할 수 있다.

 

예: 왼쪽 상단에 있는 탐색바(breadcrumbs)는 현재의 뷰가 게임 오브젝트의 State 그래프 내부에 있는 Start State에 있다는 것을 표시하고 있다.

언제든지 상위 그래프로 돌아가려면 도구 모음의 해당 부분을 클릭하면 된다. 노드를 선택하지 않은 경우 그래프 인스펙터 상단에서 현재 State의 제목 및 요약을 작성할 수 있다.

수퍼 유닛(Super Unit)을 포함하여 사용할 수 있는 유닛에는 제한이 없다.

Super State

Super State는 Script State처럼 생성되고 편집된다. 가장 큰 차이점은 그래프가 Script Graph가 아니라 다른 State Graph라는 것이다. Super State에 진입하게 되면, 그 Super State 내부에 있는 그래프들의 모든 Start State가 발동된다. Super State가 종료되면 그 Super State 내에 있는 모든 그래프의 상태나 전환이 비활성화 된다.

Transitions(전환)

트랜지션은 활성 상태를 전환시키는 상태들 간의 연결이다.

State Units

State Unit은 Super Unit과 매우 유사하다. 하지만, Script Graph가 아닌 State Graph에서 이용된다. State Unit은 Script Graph 내부에서 State Graph를 감사는 역할을 한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-state.html

'VS 기본' 카테고리의 다른 글

트랜지션 만들기  (0) 2021.08.23
트랜지션을 이용한 상태 전환  (0) 2021.08.23
input manager 이용 사용자 입력 받기  (0) 2021.08.22
Input system 이용 사용자 입력 받기  (0) 2021.08.21
런타임 중 실시간 편집  (0) 2021.08.21

input system(input manager)에서 유닛을 사용하려면, 그 input 유닛의 출력 데이터 포트(output data port) 또는 입력 트리거(input trigger)가 다른 유닛과 연결되어 있어야만 한다. 이전 버전의 input system을 사용한다면 Edit > Project Settings > Player > Active Input Handling을 Input Manager(Old) 또는 Both로 설정해야 한다.

 

참고: Input Manager(Edit > Project Settings > Input Manager)는 모든 형태의 입력 유형을 가지고 있다.

시스템 입력 받기

  1. 1) Event 유닛(예, Update Event)을 가지고 있는 스크립트 그래프(script graph)는 빈 공간에 마우스 오른쪽 버튼을 클릭한다.
       명령 목록이 나타난다.
  2. 2) Add Unit을 선택한다. 퍼지 파인더(fuzzy finder)가 나타난다.
  3. 3) 검색 필드에 "get axis"를 입력한다.
  4. 4) Input: Get Axis를 선택한다.
    Get Axis 유닛이 그래프에 나타난다.
  5. 5) axisName 필드에 유닛 라벨을 입력한다.예: Horizontal).
       경고: 유닛 라벨은 Input Manager에 정의된 데로 동일한 철자를 입력해야 한다. 그렇지 않으면 유니티는 인식하지 못한다.
        팁: input 유닛 이름을 복사 & 붙여넣기하면 오타의 실수를 없앨 수 있다.
  6. 6) Event 유닛의 출력 포트에서 입력 받는 유닛의 입력 포트로 드래그한다. 삼각형 위에서 마우스를 놓으면 두 유닛이 연결된다. 
    참고: 모든 프레임에서 데이터 포트가 사용된다면 input 유닛은 신호를 받게 된다.
  7. 7) Get Axis 유닛의 출력 트리거 포트(output trigger port)에서 다른 유닛(예: Transform 유닛)의 입력 포트로 드래그 한다. 사용자가 Get Axis 유닛의 키(예: 좌/우 화살표)를 누를 때마다 다운스트림 유닛(downstream unit)이 증가한다.

이 방법(3번 검색하는 방식)을 사용하여 input 유닛을 만들면 현재 event와 호환되는 유닛이 연결되었다고 확신할 수는 없다. event 출력 포트에서 드래그하여 퍼지 파인더를 사용하면 그 event와 호환되는 유닛들이 퍼지 파인터에 나타나고 그 중에 선택하면 확실하다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-capturing-player-inputs-old.html

'VS 기본' 카테고리의 다른 글

트랜지션을 이용한 상태 전환  (0) 2021.08.23
상태 그래프를 이용한 상태 전환 작업  (0) 2021.08.23
Input system 이용 사용자 입력 받기  (0) 2021.08.21
런타임 중 실시간 편집  (0) 2021.08.21
실시간 편집  (0) 2021.08.21

역자주-본 페이지는 새로운 input system을 이용하고 계신 분이 참고하면 된다.

input system package 설치 및 설정

입력 시스템(input system)을 사용하려면 먼저 새 입력 시스템 패키지를 설치해야 한다.

새 입력 시스템 패키지를 설치하려면 다음과 같이 하십시오.

  1. Package Manager window > Package Manager 열기
  2. Unity Registry를 선택
    Package Manager Window가 나타남.

     

  1. 패키지 목록에서 Input System을 선택
    Input System 탭이 나타난다.

     

  1. Install 버튼을 선택
    경고 팝업이 나타난다.
    참고: 새로운 Input System만 사용하려면 경고 팝업에서 Yes를 선택한다.

새로운 플레이어 입력 시스템이 설치된다.

다음 단계는 새 입력 시스템을 사용하도록 프로젝트를 설정하는 것이다.

 

새로운 Input System을 사용하도록 프로젝트를 설정하려면 다음과 같이 하면 된다.

참고: 새로운 Input System이 설치된 후에 다음 작업을 완료해야 한다.

  1. 1) Edit > Project Settings 창을 연다.
  2. 2) 좌측 목록에서 Player을 클릭하고 Active Input Handling Input System Package (New) 또는 Both 중에서 선택한다.
    Unity Editor가 다시 시작하여 사용 중인 입력 시스템을 변경한다.
  3. 3) 새로운 Input System 노드를 활성화하려면 유닛들을 재생성해야 한다. Project Settings Window에서 Visual Scripting을 선택하고 Reeneration Units 버튼을 누른다.

이제 프로젝트는 새로운 플레이어 입력 시스템으로 설정되었다.

 

새로운 Input System 노드를 사용해서 시작하기

새 입력 시스템 패키지를 설치하고 프로젝트가 설정되면 새 입력 시스템 이벤트 유닛(input system event units)을 추가할 수 있다.

  • 1) On Input System Event Button
  • 2) On Input System Event Float
  • 3) On Input System Event Vector 2

첫 단계는 플레이어 입력 컴포넌트를 추가하는 것이며, 그 후에 새로운 입력 시스템을 사용하는 플레이어 유닛을 추가하는 것이다.

 

플레이어 입력 컴포넌트(Player Input Component)를 추가하려면 다음과 같이 하면 된다.

  1. 1) Hierarchy에서 입력을 받을 GameObject를 선택한다.
  2. 2) Add Component 한다.
  3. 3) Player Input을 선택한다.
    만약, 입력 작업 파일(Input Actions Files)이 없다면 Create Actions 버튼을 누르고 새 입력 파일을 저장한다.

  4. 4) 좌측에서 Actions 를 선택한다.
        InputActionAsset 창이 나타난다.
  5. 5) 만든 입력 파일(input file) 또는 프로젝트에 있던 기존 파일을 선택한다.
  6. 6) 기본으로 사용할 입력 시스템을 기본 구성표 드롭다운에서 변경할 수 있다.

이제 입력 체계(Input Scheme)를 이용하여 플레이어 입력 이벤트 유닛(Player Input Event Unit)에 접근할 수 있다.

 

플레이어 입력 이벤트 단위(Player Input Event Unit) 사용하기

  1. 1) GameObject에 신규 스크립트 머신(Script Machine)을 만든다.
  2. 2) Script Machine Graph를 오픈한다.
        그래프 배경에 마우스 오른쪽 버튼을 클릭하여 퍼지 파인더를 오픈한다.
        Event 항목(Event > Input)에 새로운 입력 시스템 노드가 나열되어 있다.
  3. 3) 다음 세 가지 이벤트 유닛 중 하나를 선택한다.
    • On Input System Event Button
    • On Input system Event Float
    • On Input system Event Vector 2

           선택한 입력 시스템 이벤트 유닛이 나타난다.
           

  1. 4) 트리거할 이벤트를 발생시킬 Input Action을 선택한다.

         


참고: 만약 Input Actions 목록이 나타나지 않으면, 이전 단계가 성공적으로 완료되지 않았기 때문이다.

 

시스템이 성공적으로 설치 및 설정되었는지를 보는 한 예로, debug message가 마우스 버튼을 클릭하면 나타나게 된다.

이 결과는 응용 프로그램이 실행되고 사용자가 마우스 버튼을 클릭할 때 나타난다. 즉, 데이터가 들어 있는 Input Action  목록이 나타난다면, 성공적인 데이터 설정이 이루어진 것이다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-capturing-player-inputs-new.html

'VS 기본' 카테고리의 다른 글

상태 그래프를 이용한 상태 전환 작업  (0) 2021.08.23
input manager 이용 사용자 입력 받기  (0) 2021.08.22
런타임 중 실시간 편집  (0) 2021.08.21
실시간 편집  (0) 2021.08.21
수퍼 유닛 만들기  (0) 2021.08.21

비주얼 스크립팅의 실시간 편집은 실시간으로 단순히 값을 조정한다는 것을 뛰어넘는다. 실시간 편집에는 유닛간의 연결선뿐 아니라 유닛들을 추가하고 제거하는 것도 가능하다. 게임이 진행되는 동안 코딩을 할 수 있다는 것이며, 즉시 게임 플레이에서 그 변화를 확인할 수 있다는 것이다.

 

다음 사항은 기억하자.

  • 임배드(Embed)로 작업된 경우 플레이 모드를 종료하면 모든 변경 내용이 되돌아간다(reverted), 해당 변경 내용은 컴포넌트 내부에서만 의미가 있다.
  • 그래프(Graph)로 작업된 경우 플레이 모드를 종료하면 그 변경 내용은 저장된다. 즉, 변경 내용은 스크립트 그래프 에셋 파일에 저장된다.
  • 그래프 변수(Graph Variables)들은 임배드 그래프(Embed Graph)가 아닐 때 저장된다.
  • 다음 변수는 저장되지 않는다. (역자주-플레이 모드에서 변수를 추가, 삭제하지 않는게 좋을 듯 하다)
    • Object
    • Scene
    • App
    • Saved

팁: 임배드 그래프(Embed Graph)를 사용하였고 수정 내용을 버리고 싶지 않다면 플레이 모드를 종료하기 전에 변경한 모든 내용을 복사(Copy)하면 된다. 그리고 플레이 모드 종료 후 붙여 넣기 해서 복원하면 된다. 단, 변경된 변수는 이 방법을 사용할 수 없다.

 

시각적 표현을 목적으로 하기에 라이브 모드에서 연결선들(Connectors)에는 실행 방향에 맞게 애니메이션 되는 물방울같은 흐름이 표시된다. 물방울의 속도와 수는 실행 빈도나 속도를 나타내는 것은 않는다.

런타임 중에 그래프 변경하기

그래프를 연 상태에서 다음 중 하나 또는 모두를 수행한다.

  • 인스펙터(Inspector)에서 컴포넌트의 값을 변경하고자 하는 필드를 클릭한다. 그 값은 플레이 모드를 종료하면 지속되지 않고 저장되지도 않는다.
  • 그래프의 빈 곳을 마우스 오른쪽 버튼으로 누르고 유닛을 추가한다.
  • 유닛 연결한다.
  • 모든 연결(connectors)을 제거한다.
  • 확장(extension)을 추가한다.
  • 디버그 유닛을 추가하거나 연결한다.
  • 유닛의 값을 직접 변경한다.

팁: 런타임 중에 선택한 GameObject의 값을 보고 작업하고자 한다면 스크립트 그래프가 포함된 GameObject를 선택한 상태여야 한다.

 

참고: 런타임 중에 Start Event와 관련된 변경 사항들은 해당 세션 동안 GameObject에 대한 업데이트 상태를 받을 수 없다. Start Event와 관련된 새로운 로직을 실행하려면 Unity 세션을 다시 시작해야 한다.(역자주 - 당연히 Start Event는 실행됐을 때 1번만 제일먼저 실행되기 때문이다)

 

그래프(Graph)로 작업된 경우 변경 사항들은 저장된 그래프 에셋의 모든 인스턴스들(Instances)에 즉시 공유된다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-live-edit-runtime.html

'VS 기본' 카테고리의 다른 글

input manager 이용 사용자 입력 받기  (0) 2021.08.22
Input system 이용 사용자 입력 받기  (0) 2021.08.21
실시간 편집  (0) 2021.08.21
수퍼 유닛 만들기  (0) 2021.08.21
재사용 가능한 수퍼 유닛  (0) 2021.08.20

비주얼 스크립팅은 실시간 편집을 지원한다. 실시간 편집은 플레이 모드일 때 그래프를 추가하고 편집할 수 있으며 또한 즉시 그 결과가 반영(업데이트)된다는 것이다. 이것은 프로젝트의 변경이 있을 때 마다 다시 컴파일 할 필요 없이 효율적인 반복 작업과 아이디어를 즉시 검토해 볼 수 있는 빠른 방법을 제공한다.

실시간 편집 작업하기

실시간 편집은 단순히 값을 수정하는 데 국한되지 않는다. 즉, 유닛이나 유닛간의 연결을 추가하거나 제거할 수도 있다. 기본적인 스크립트 편집 작업에서 할 수 있는 모든 것은 실시간 편집으로도 할 수 있다.

 

유니티의 기본 규칙에 따라:

  • 플레이 모드를 종료하면 임배드(Embed)로 작업된 경우 모든 변경은 원상태로 되돌아간다(변경은 컴포넌트 내부에만 반영된다).

플레이 모드를 종료하면 그래프(Graph)로 작업된 경우 모든 변경은 그래프 파일에 저장된다(변경은 에셋-스크립트 파일- 내부에 반영된다.)

 

팁: 컴포넌트 그래프(임배드 그래프)의 변경 내용을 보존하려면 플레이 모드를 종료하기 전에 수정된 유닛을 복사해 놓았다가 편집 모드에서 붙여넣기하여 사용하면 된다.

 

플레이 모드에서 비주얼 스크립팅은 연결선 상에 물방울의 흐름 같은 것이 표시한다.

값 연결(Value Connection), 제어 연결(Control Connection) 또는 둘 모두 이러한 애니메이션을 비활성화하려면 편집기 기본 설정(editor preferences) 창(Unity > Preferences > Visual Scripting > Script Graphs)에서 Animate Control Connections 또는 Animate Value Connections의 선택을 해제하면된다.

변경 사항의 자동 저장

비주얼 스크립팅 그래프는 플레이 모드 중 변경한 내용을 자동으로 저장한다.

변경한 그래프를 이용한 모든 스크립트에 즉시 반영

그래프의 변경사항은 해당 그래프를 이용하는 모든 인스턴스에서 즉시 공유된다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-live.html

'VS 기본' 카테고리의 다른 글

Input system 이용 사용자 입력 받기  (0) 2021.08.21
런타임 중 실시간 편집  (0) 2021.08.21
수퍼 유닛 만들기  (0) 2021.08.21
재사용 가능한 수퍼 유닛  (0) 2021.08.20
디버그 메시지 작성하기  (0) 2021.08.20

참고> 최신 버전에서는 "Super Units"이라는 명칭이 "Subgraph"로 변경되어졌다. 의미와 기능은 동일하다.

 

수퍼 유닛은 부모 스크립트 그래프에 단일 유닛으로 중첩되(nested)는 스크립트 그래프다.

 

빈 수퍼 유닛을 생성하려면:

  1. 그래프의 빈 공간을 마우스 오른쪽 버튼으로 누르고(퍼지 파인더를 오픈) Nesting > Super Unit을 선택한다 수퍼 유닛 인스펙터는 머신(Machine)의 그것과 정확히 똑같이 작동한다; 그래프의 소스를 임베드(embed)와 그래프(graph) 사이에서 전환하고 필요에 따라 변환한다.
  2. 그래프 인스펙터(Graph Inspector)에 수퍼 유닛에 대한 제목(Title)과 요약(Summary)을 입력한다.
  3. 그래프 편집(Edit Graph) 버튼을 클릭하거나 유닛을 두 번 클릭하여 중첩된 그래프를 연다. 그래프 창의 상단 좌측에 있는 경로를 통해 상위 스크립트로 이동한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-creating-super-unit.html

'VS 기본' 카테고리의 다른 글

런타임 중 실시간 편집  (0) 2021.08.21
실시간 편집  (0) 2021.08.21
재사용 가능한 수퍼 유닛  (0) 2021.08.20
디버그 메시지 작성하기  (0) 2021.08.20
예측 디버깅과 실시간 디버깅  (0) 2021.08.18

참고> 최신 버전에서는 "Super Units"이라는 명칭이 "Subgraph"로 변경되어졌다. 의미와 기능은 동일하다.

 

수퍼 유닛(Super Units)은 부모 스크립트 그래프내에 단일 유닛으로 중첩된(nested) 스크립트 그래프를 말한다. 수퍼 유닛은 재사용성과 그래프를 구조화시킬 수있도록 하는 강력한 기능을 제공한다.

 

수퍼 유닛

Input Output 유닛

기본적으로 수퍼 유닛의 내장 그래프는 Input 유닛과 Output 유닛을 사용하여 생성된다.

이 두 단위는 부모 스크립트 그래프로 흐름과 값을 전달한다.

  • Input 유닛은 부모 그래프에서 수퍼 유닛으로 전달되는 어떤 타입의 흐름 진입점과 패러미터(수퍼 유닛 내부로 전달되는 값)를 정의한다.
  • Output 유닛은 수퍼 유닛이 부모 그래프에 반환할 어떤 타입의 흐름 출구점과 결과(수퍼 유닛이 처리한 결과 값)를 정의한다.

다음은 Input과 Out을 정의하는 위한 기본조건이다.

  • Key는 null이거나 빈 상태가 되어선 안된다.
  • 각 포트의 Key는 전체 그래프에 걸쳐 유일해야 한다. 같은 키를 갖는 입력과 출력은 있을 수 없다. 심지어 다른 종류나 타입이 다르더라도 안된다.
  • 키를 변경하면 그 포트의 모든 연결이 제거된다. 비주얼 스크립팅은 키를 사용하여 포트를 식별하므로, 포트가 변경되면 연결이 더 이상 무의미해 진다. 모든 연결을 유지하면서 포트 이름을 변경하고자 한다면, 기능에 어떤 영향을 미치지 않는 레이블 속성(Label Property)을 이용하면 된다.
  • 각 Input value와 Output value는 데이터 타입을 가져야 한다.

인스펙터는 위 기준을 충족하지 못할 경우 경고를 한다.

수퍼 그래프 사용하기

스크립트 그래프를 수퍼 단위로 사용하려면 프로젝트 창에서 스크립트 그래프를 그래프 편집창으로 끌어다 놓거나 퍼지 파인더에서 그래프(Graph) 카테고리에 있는 수퍼 유닛을 추가한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-super-units.html

'VS 기본' 카테고리의 다른 글

실시간 편집  (0) 2021.08.21
수퍼 유닛 만들기  (0) 2021.08.21
디버그 메시지 작성하기  (0) 2021.08.20
예측 디버깅과 실시간 디버깅  (0) 2021.08.18
디버그할 때 관계(Relations) 이용하기  (0) 2021.08.18

디버그 유닛을 사용하여 Unity 콘솔에서 코드 세그먼트의 결과를 확인해 볼 수 있다. 예를 들어, 변수 유닛에 Debug 유닛을 연결하면 그 변수 값이 출력된다.

팁: 디버그는 프로토타입 제작 시 유용한 도구다.

디버그 메시지를 생성하는 방법

경고: 최종적으로 실행가능한 제품을 빌드할 때는 그래프에서 테스트를 위해 추가한 디버그를 제거하거나 분리해야 한다.

  1. 1) GameObject에 스크립트 머신 컴포넌트(Script Machine Component)를 추가한다.
  2. 2) 그래프 편집(Edit Graph)을 선택한다.
  3. 3) 다음 중 하나를 수행한다.
    • 스크립트 머신 생성시 기본적으로 있는 "Start Events"를 이용한다.
    • 그래프에 이벤트 유닛(Event Unit)을 추가한다.
  4. 4) 유닛 포트에서 연결선을 끌어서 놓는다.
        퍼지 파인더가 나타난다.
  5. 5) 퍼지 파인더 필드에 "Log"를 입력한다.
        Debug 유닛 목록이 나타난다.
  6. 6) 원하는 타입의 디버그 메시지 유닛을 선택한다. (예: Log(Message), LogError(Message) 또는 LogWarning(Message))를 선택한다.
    선택한 디버그 유닛이 그래프에 배치되고 이벤트에 연결된다.
  7. message 좌측의 원형 포트를 클릭하고 끌어서 빈공간에 놓는다.
    퍼지 파인더가 나타난다.
  8. 목록에서 String Literal 유닛을 선택한다.
    Debug 노드에 선이 연결되어진 String 유닛이 나타난다. String 유닛에 디버그 메시지를 입력한다.

팁: 콘솔에서 보고자 하는 값은 문자열뿐만 아니라, 변수(Variables)나 게임 오브젝트(GameObjects)를 포트에 연결해도 된다.

 

스크립트 그래프가 실행될 때마다 그리고 해당 이벤트가 실행될 때마다 디버그 유닛이 실행되고 작성한 String 텍스트가 콘솔에 출력된다.

 

참고: 디버그 표시 바는 각 디버그 타입의 메시지 수를 나타낸다(순서: Message, Error, Warning).

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-debug-messages.html

 

비주얼 스크립팅은 플레이 모드가 실행되기전 오류를 발생시킬 수 있는 유닛을 예측하여 가리킬 수 있다. 또한 빠진 컴포넌트나 null 참조를 예측하기 위해 그래프를 분석한다. 런타임시에 오류가 발생하면 오류 유닛을 스크립팅 그래프에서 강조 표시로 집어낸다.

예측 디버깅

노드가 제대로 구성되지 않았거나 오류를 일으킬 수 있는 경우 노드는 노란색으로 표시되고 오류를 일으킬 것이 확실할 때는 주황색으로 표시된다 두 경우 모두 정상 상태가 될 때까지 노드를 검사하고 오류 색상을 유지한다.

 

예시: Debug.Log가 콘솔로 출력할 메시지(Message)가 누락되어 있기 때문에 로그 노드가 주황색으로 표시됨.

A + B의 결과를 메시지(Message) 포트에 연결하면 Debug.Log 노드가 정상으로 돌아간다. 그러나, Add 노드는 첫 번째 피연산자 A의 값이 없기 때문에 주황색으로 변한다.

두 피연산자(A, B)에 값이 제공되면 모든 색상은 정상으로 돌아온다.

참고: B 입력 포트는 기본 인라인 값(Inline Value)을 가지므로 연결할 필요가 없다.

Null 참조(Null References)

null 참조 예외(Null Reference Exceptions)는 아주 흔히 발생하는 경우이다. 패러미터(Parameter)가 어떤 값을 받아야 하는데, 아무런 값도 받지 못하게 되면(프로그래밍 용어로 "null"일 때) 발생한다.

비주얼 스크립팅은 "Predict Potential Null References 옵션(Unity > Preferences > Visual Scripting > Flow Graph)" 이 선택된 경우 null 참조(null reference)를 예측하려고 시도한다.

 

예시: GameObject.Destroy 유닛은 인라인 값을 가지지만, 「None」(null)로 설정되어 있어, 오렌지색으로 나타나고 있다.

Null 파라미터를 허용하는 희귀한 유닛이 있긴 하지만, 불행히도 코드베이스 분석에서 비주얼 스크립팅이 이를 알 수 있는 방법이 없기 때문에 주황색으로 나타난다. 이 문제가 반복되는 경우 Predict Potential Null References 옵션을 체크아웃하면 된다.

컴포넌트가 누락된 경우

유닛이 필요한 컴포넌트에 이용되면서 특정 컴포넌트가 없는 게임 오브젝트나 컴포넌트를 패스하는 경우 노드는 노란색으로 경고를 표시한다. 예를 들어, 아래 Add Force 유닛의 각 값은 기본값이 있음에도 불구하고, 비주얼 스크립팅은 소유 게임 오브젝트에 Rigidbody가 없음을 감지하고 경고를 한다. (역자주-rigidbody 컴포넌트가 추가되지 않은 게임 오브젝트에 rigidbody 기능을 하는 Add Force 유닛을 사용하고 있기에 경고를 나타내고 있다.)

참고: 비주얼 스크립팅은 게임 오브젝트에 컴포넌트를 런타임중에 추가할 수도 있기 때문에 주황색 경고로 유닛을 표시하지 않고 있다. 따라서 해당 유닛이 호출되기 전에 필요한 컴포넌트가 추가된다면 크래시(Crash)의 원인을 명확히 찾을 수 없다. 이런 경우가 프로젝트에서 자주 발생한다면 Predict Potential Missing Components debugging (Unity > Preferences > Visual Scripting > Flow Graphs)을 사용해제(disable)하면 된다.

라이브 디버깅

플레이 모드에서는 현재 활성화된 유닛이 푸른색으로 밝게 표시된다. 오류가 발생하면 이를 일으킨 유닛은 빨간색으로 밝게 표시된다.

예: 다음은 결함이 있는 그래프의 예다. 결과는 "Space Bar"를 누를 때 콘솔에 "My 3rd favorite fruit is "나타난다.

플레이를 선택하고 객체를 클릭했을 때 발생하는 동작은 다음과 같다.

모든 유닛이 클릭하자마타 푸른색으로 밝게 표시되지만, 콘솔에 오류가 나타난다.

참고: 비주얼 스크립팅은 결함이 있는 노드를 빨간색으로 밝게 표시한다.

흔한 실수로 배열의 인덱스가 1에서 시작한다고 착각하는 것인데 실제로는 0에서 시작한다는 것이다. 스크립팅에서 인덱스(Index)는 항상 제로 베이스(zero-based) 즉, 0부터 시작한다는 것이다. 1은 두번째 인덱스, 2는 세번째 인덱스인 것이다. 세 번째 항목을 얻으려면 필드에 2를 썼써야 한다.

위와 같이 수정하면 그래프가 정상적으로 작동한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-debugging.html

역자주) 비주얼 스크립트를 작업해보지 않은 분이 본 내용을 이해하기는 어렵다. 이런게 있나 보다하고 넘어가면 될 듯 하다. 그렇게 심각하게 어려운 사항도 아니고 하다보면 그냥 자기도 모르게 익혀혀서 사용하게 된다.

 

관계(Relations)는 유닛의 각 포트간의 의존성을 이해하는 데 유용한 도구다. 예를 들어, Add 유닛을 사용하여 A + B의 결과를 얻으려면 A와 B의 값을 제공해야 한다. 마찬가지로, 로그 유닛을 호출하기 전에 메시지 입력 포트에 대한 값을 제공하십시오.

비주얼 스크립팅은 예측 디버깅을 위해 이 정보를 백그라운드에서 사용한다. 예를 들어 A에 대한 값을 제공하지 않고 A + B 값을 얻으려고 하면 실행 모드에서 실패가 될 것을 의미하는 주황색으로 노드가 표시한다.

이 경우 그래프 인스펙터(Inspector)에 표시된 경고 메시지를 통해 누락된 내용을 확일 할 수 있다.

또한 관계(Relations)는 필수적으로 포트의 연결이 필요한 경우와 선택적으로 연결이 필요한 포트를 이해하는 데에도 도움이 될 수 있다. 예를 들어 Get Child 유닛(퍼지 파인더에서 Codebase > Unity Engine > Transform)에서 변환 값 출력을 얻는 것이 목표라면 제어 포트를 연결할 필요가 없다.

사용된 유닛의 내부 연결성에 대해서는 도구 모음에서 Relations 토글 버튼을 활성화하면 된다.

참고: 관계는 편집할 수 없다. 각 유닛 유형에 대해 사전에 정의되 있기 때문이다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-relations.html

그래프(Graph)에는 스크립트 그래프(Script Graph)와 상태 그래프(State Graph) 두 종류가 있다. 스크립트 그래프는 판단(decisions)과 흐름(flow)으로 구성된 그래프이다. 상태 그래프는 캐릭터의 달리기(running) 및 점프(jumping) 같이 사용자가 정의한 상태를 가지며, 각개의 상태 유닛(State Unit)은 스크립트 그래프를 가질 수 있다.

스크립트 머신 그래프를 만들기.

스크립트 머신(Script Machine)은 스크립트가 시각적으로 표현된 스크립트 그래프를 가지고 있는 유니티 컴포넌트(component)를 의미한다.

  1. Scene에서 GameObject를 선택한다.
  2. 인스펙터(Inspector)에서  Add Component(컴포넌트 추가)를 누른다.
  3. Visual Scripting > Script Machine을 선택한다. Unity는 Script Machine 컴포넌트를 GameObject에 추가한다.
  4. Script 소스의 선택(역자주-임배드로 할지 그래프로 할지 선택):
    • Embed(임배드): 이 그래프는 GameObject에 직접 포함되어 있으며, 에셋(여기서는 스크립트 그래프 파일)이 하드 디스크가 아닌 GameObject에 바로 저장되어 진다.
      참고: 실행(Play) 모드(런타임)에서 스크립트 그래프를 변경하면 실행 모드가 종료된 후 모두 사라진다. 따라서 수정을 반영하고자 한다면 Play 모드를 종료하고 다시 수정해야 한다.
      (본 글의 6번으로 이동)
    • Graph(그래프): 일반적인 그래프이다. 스크립트 그래프 파일이 GameObject에 저장되지 않고 에셋 형태로 하드디스크에 새롭게 생성되어 저장된다.
      참고: 그래프(Graph)를 사용하면 여러 오브젝트에서 공유 가능한 스크립트 파일을 만들 수 있으며, 실행(Play) 모드(런타임)에서 변경한 사항들이 사라지지도 않는다. 그래프는 프로토타입 제작에 이상적이다.

  1. 스크립트 파일이 그래프(Graph)인 경우:
    • 새로운 스크립트 그래프는 새로운 스크립트 그래프 파일을 생성한다.
      새로운 스크립트 그래프를 저장하고(다른 이름으로 저장 선택) 파일을 저장할 폴더를 선택한다. Start Event 및 Update Event로 자동 채워지는 새 그래프를 보려면 EditGraph를 클릭한다. 다른 이벤트를 추가하려면 그래프 편집창에서 마우스 오른쪽 버튼으로 클릭하고 이벤트 추가를 선택한다.
    • 이미 만들어진 스크립트 그래프 파일이 있는 경우 해당 그래프를 드래그하여 Graph 파일 공간에 놓는다.
      Unity는 프로젝트에서 그래프를 로드하게 되고 이후 부터는 인스펙터(Inspector)에서 편집할 수 있다.

역자주) 스크립트 파일 생성 참고 영상

  1. 스크립트 그래프에 새로운 유닛을 추가하려면 퍼지 파인더(fuzzy finder)를 사용한다.
    포트(port)에서 유닛으로 연결선을 끌면 퍼지 파인더는 가장 많이 사용되는 맥락적인 노드(소스 장치에 연결할 수 있는 노드)의 목록을 제공한다. 특정 유닛을 찾으려면 퍼지 탐색기 필드에 단위 이름을 입력하한다. 유닛을 포트 커넥터와 연결한다.

역자주) 퍼지 파인더를 사용하는 방법에 대한 동영상

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-create-machine-with-script.html

'VS 기본' 카테고리의 다른 글

예측 디버깅과 실시간 디버깅  (0) 2021.08.18
디버그할 때 관계(Relations) 이용하기  (0) 2021.08.18
그래프에 유닛을 추가하는 방법  (0) 2021.08.15
유닛간에 연결 만들기  (0) 2021.08.15
유닛들 연결하기  (0) 2021.08.13

스크립트 그래프(Script Graph)는 게임 플레이 로직을 구현한다. 플로우 그래프에 유닛을 추가하는 방법에는 여러 가지가 있다. 가장 일반적인 두 가지 방법은 다음 과정에 자세히 설명되어 있다.

 

참고: 새로운 스크립트 그래프를 만들면 "Start Event" 유닛과 "Update Event" 유닛이 스크립트 그래프에 자동으로 추가된다. 스크립트 그래프를 초기화할 때 "Start" 유닛은 한 번만 실행된다. "Update" 유닛은 GameObject가 활성화되어 있는 한 계속 매 프레임마나다 실행된다.

그래프에 단위를 추가하려면 다음과 같이 하한다.

  1. 스크립트 그래프를 연다.
  2. 다음 중 하나를 수행한다.
    • 그래프의 빈 공간을 마우스 오른쪽 버튼으로 클릭한다.
      퍼지 탐색기(Fuzzy Finder)가 모든 유닛 카테고리와 함께 나타난다.
      퍼지 검색기를 스크롤하거나 검색 필드에 이름을 입력하여 장치를 선택한다.
      선택된 유닛이 그래프에 나타난다.
      입출력 포트를 통해 장치를 다른 장치에 연결한다.
    • 유닛에 있는 어느 하나의 트리거(Trigger) 또는 데이터 포트(삼각 화살표 아이콘은 트리거 포트이고 다른 둥근 아이콘은 데이터 포트)를 클릭하여 빈 곳에 끌어다 놓는다.
      원 소스 유닛과 호환되는 모든 유닛의 목록이 나타난다.
      (퍼지 탐색기 필드에서 스크롤하거나 이름을 입력하여) 하나를 선택한다. 선택한 유닛은 첫 번째 유닛에 연결된 그래프로 배치된다.

역자주) 참고를 위해 아래 동영상을 추가한다.

유닛의 생성과 연결 방법

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-add-unit-to-graph.html

'VS 기본' 카테고리의 다른 글

디버그할 때 관계(Relations) 이용하기  (0) 2021.08.18
스크립트 그래프 머신 생성하기  (0) 2021.08.17
유닛간에 연결 만들기  (0) 2021.08.15
유닛들 연결하기  (0) 2021.08.13
스크립트 작성하기  (0) 2021.08.12

연결(Connection)은 스크립트 로직(Logic) 흐름을 만들기 유닛들을 선으로 잇는 것이다.

연결을 만들려면:

  1. 다음 중 하나를 수행한다.
    • 첫 번째 포트를 클릭한 상태에서 호환되는 유닛에 링크를 끌어다 놓다.. 그래프에서 호환되는 유닛은 밝은 색으로 나타나고, 호환되지 않는 유닛은 흐리게 표시된다.
    • 첫 번째 포트를 클릭한 뒤 빈 공간에서 클릭을 놓는다. 퍼지 파인더(Fuzzy Finder)가 나타난다. 필요한 유닛의 이름을 입력하거나 목록내에서 원하는 유닛을 찾는다. 어느 쪽이든 새로운 유닛이이 그래프에 나타나고 첫 번쩨 유닛의 포트에 연결된다.

이 유닛들은 사용되자마자 에디터에 나타나게 된다.

 

연결을 제거하려면 연결된 포트를 마우스 오른쪽 버튼으로 클릭한다.

 

연결에는 두 가지 유형이 있다.

  • 업데이트 이벤트(Update Event)와 회전(Rotate) 호출 사이의 제어 연결(Control Connection).
  • Per Second 노드와 회전 노드의 Y 각도 사이의 값 연결(Value Connection).

위 희색선: 제어 연결, 아래 하늘색 선: 값 연결

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-creating-connection.html

스크립트를 생성하기 위한 유닛과 포트간의  연결 링크(Connections Link)를 설명한다.

포트의 호환성(Compatible Ports)

연결 포트간에 연결이 가능한 경우에는 연결을 하려고 할 때 포트가 하이라이트가 된다. 반대로 연결이 불가한 경우 포트는 흐리게 표시된다. 만약 유닛에 호환 가능한 포트가 없는 경우에는 유닛 전체가 흐리게 표시된다. 즉, 대상 포트가 하이라이트되지 않는 다면 연결을 만들 수 없다.

예를 들어 어떤 숫자가 컴포넌트의 값으로 전환될 방법이 없는 경우 수의 연산 결과(숫자)를 타겟 유닛(컴포넌트)에 연결할 수 없게 된다.

위: 연결 가능, 아래: 연결 불가

자동 포트 선택

비주얼 스크립팅은 사용자가 커서를 타겟 유닛에 직접 대지 않더라도 유닛에서 가장 잘 호환되는 포트를 자동으로 선택하여 더 쉽게 조준할 수 있도록 도와준다. 이 포트는 노란색 직사각형으로 강조 표시되어 연결될 위치를 미리 볼 수 있다. 이는 작은 포트에 연결하기 위해 고도의 집중을 하지 않더라도 손쉽고 빠르게 새로운 연결을 만들 수 있다는 것을 의미한다.

컬러 코딩

제어 연결(Control Connections)은 항상 흰색인 반면 값 연결(Value Connections)은 타입에 따라 색상으로 구분된다. 타입마다 고유의 색상을 가지고 있고 이를 통해 쉽게 찾을 수 수 있다. 컬러 펠릿 아이콘이 없는 타입은 모두 녹색으로 연결된다.

 

역자주)

* 제어 연결(Control Connections): 유닛의 제일 상단에 있는 삼각형 포트간의 연결을 의미한다.

* 값 연결(Value Connections): 빈 동그란 원형 포트간의 연결을 의미한다.

* 컬러 펠릿 아이콘(Color Pellet Icon): 값 연결시 대응되는 값의 타입을 아이콘으로도 표시하고 있다.

값(Values)

툴바에서 Values toggle을 활성화하면 비주얼 스크립팅은 런타임 동안 이 연결을 통과한 최종 값을 보여준다.

위 이미지에서 Values가 Values Toggle이다.

Unity > Preferences > Visual Scripting > Script Graphs > Predic Connection Values가 활성화된 경우, 비주얼 스크립팅은 플레이 모드로 들어가기 전에 값을 예측하려고 시도한다.

예를 들면 다음과 같다.

위: Predic Connection Values 비활성 / 아래: Predic Connection Values 활성

자동 변환

비주얼 스크립팅은 사용자가 그래프를 깔끔하게 유지할 수 있도록 하기 위해 많은 타입들을 자동으로 변환한다(역자주-프로그래밍의 자동 형변환의 개념임).

예를 들어, 비주얼 스크립팅이 자동으로 처리해 주기 때문에 Transform 출력과 Animator 입력 사이에 Get Component를 사용할 필요가 없다.

다음의 경우 자동 변환이 지원된다.

  • 숫자와 숫자간(예: integer 숫자를 float 변수 혹은 포트에, float 숫자를 integer 변수 혹은 포트에 연결할 때)
  • 부모 클래스(Base Class)를 자식 클래스(Child Class)에 연결할 때
  • 자식 클래스(child Class)를 부모 클래스(Base Class) 연결에 연결할 때
  • 사용자 지정 연산자(Custom Operators)(예: Vector 2에서 Vector 3로 연결할 때)
  • 게임 오브젝트(Game Object)를 하위 컴포넌트(Child Component)에 연결할 때
  • 컴포넌트(Component)를 부모 게임 오브젝트(Parent Game Object)에 연결할 때
  • 컴포넌트(Component)를 형제 컴포넌트(Sibling Component)에 연결할 때
  • 배열(Array)에 열거형(Enumerable)을 연결할 때
  • 목록(List)에 열거(Enumerable)을 연결할 때

또한 비주얼 스크립팅은 박싱(Boxing)과 언박싱(Unboxing)을 지원한다. 즉, 어떤 객체 타입의 포트에서 다른 값 포트로의 연결도 가능하도록 해준다. 참고: 이 경우 데이터 타입이 호환되는지 확인하는 것은 사용자의 책임이며, 그렇지 않으면 재생 모드에서 오류가 발생할 수 있다.

다중 연결

단일 포트는 편의를 위해 여러 개의 포트에 연결될 수 있다.

예를 들어 아래처럼 단일 값 출력 포트(Value output Port)를 여러 값 입력 포트(Value Input Ports)에 연결할 수 있다.

어떤 값을 사용해야 하는지 분명하지 않은 경우에는 다중 연결이 허용되지 않는다.

 

여러 개의 제어 출력 포트(Control Output Ports)를 단일 제어 입력 포트(Control Input Port)에 연결할 수도 있다. 예를 들어, 점프(Jump)는 플레이어가 Space Bar를 누르거나 어떤 오브젝트를 클릭했을 때 모두 발동되도록 할 수 있다.

출력 유닛에서 실행 순서가 명확하지 않은 경우에는 단일 제어 출력 포트를 여러 제어 입력 포트에 직접 연결할 수 없다. 이런 경우를 해결 하기위해서는 여러개의 제어 출력 포트를 가지고 있는 "Sequence" 노드를 이용하면 된다.

Start Event를 두개의 Debug.Log에 연결하기 위해 중간에 Sequence 유닛을 이용하고 있다.

두 개 이상의 작업을 연결하려면 시퀀스 노드 헤더의 필드에 더 높은 숫자를 사용하십시오(역자주-2를 4로 바꾸면 4개의 출력 포트가 아래에 생긴다.)

상황별 옵션

연결하고자하는 유닛을 모두 만들어서 연결할 필요 없이 어느 한쪽의 유닛 포트에서 마우스를 끌어 빈공간을 클릭하면 퍼지파인더가 자동으로 팝업되며 연결가능한 옵션이 자동으로 활성화된다. 여기서 어느 하나를 선택하면 자등으로 연결이 이루어진 유닛이 생성된다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-connections.html

유닛(Units)은 비주얼 스크립팅이 처리하는 가장 기본적인 요소다. 다른 비주얼 스크립팅 언어에서는 이를 노드(Node) 또는 작업(Action)이라고 부른다. 유잇은 입력과 출력 포트를 가지고 있으며, 스크립트 그래프(Script Graph)에서 "블록(Blokcs)"처럼 시각적 그래픽으로 표현된다.

Start Event 유닛과 Update Evnet유닛

유닛(Units)

유닛은 비주얼 스크립팅에서 계산을 처리하는 가장 기본적인 요소다. 유닛들은 매우 다양한 일들을 할 수 있다. 예를 들어, 이벤트(Event)를 듣고(Listen, 역자주-받는다 수신한다는 의미), 변수(Variable)의 값(Value)을 얻고(Get), 컴포넌트(Componets)나 게임 오브젝트(Game Objects)에 있는 메소드(Methods)를 호출(invoke)한다.

유닛들은 실행되는 순서를 나타내는 연결(Connections)을 가지고 있으며, 다른 유닛으로부터 값을 전달받아 전송하기도 한다.

유닛 생성하기

기본적으로 비주얼 스크립팅에는 23,000개 이상의 유닛들이 있다. 여기에는 전체 Unity 스크립팅 API뿐만 아니라 사용자 지정 스크립트(Custom Scripts) 및 타사 플러그인(Third Party Plugins)의 모든 메서드(Methods)와 클래스(Classes)까지 포함된다. Math, Logic, Variables, Loops, Branching, Events, Coroutines을 위해 추가된 유틸리티 유닛들도 있다.

 

유닛은 퍼지 파인더(Fuzzy Finder)라는 간단하고 검색이 가능한 생성 메뉴에 잘 정리되어 있다.

 

퍼지 파인더를 띄우려면 편집창의 아무 빈곳에 마우스 오른쪽 버튼으로 클릭하면 된다. 유닛을 빠르게 찾기 위해 카테고리를 따라가 보거나 제일 위의 상단 필드에서 검색하면 된다.

퍼지 파인더(Fuzzy Finder)

퍼지 파인더에서 흐리게 보여지는 유닛들은 비주얼 스크립팅이 현재 맥락에서 사용할 수 없다는 의미를 전달하는 것이다. 이는 유용한 예측 디버깅을 가능하게 한다.

퍼지 파인더는 각 유닛이 생성되기 전에 미리보기 안내를 제공한다. 예를 들어, Subtract 유닛의 경우 Subtract 유닛의 기능과 포트(Ports)에 대한 간략한 설명이 있다.

오버로드(Overloads)

일부 유닛들은 동일힌 이름으로 여러개로 분화되어져 있는데, 이를 오버로드(Overload, 역자주-프로그래밍 용어임)라고 한다.

예를 들어, Add 유닛의 경우 기본 Add 유닛 이외에 4개의 Add 유닛(Scalar, 2D Vector, 3D Vector, 4D Vector)을 더 가지고 있다. 이 경우 이름 우측에 있는 범주내용을 보고 구분하면 된다.

어떤 메서드 유닛(Method Unit)들은 파라미터 오버로드(parameter Overloads)가 있다. 일반적으로 이러한 다양화는 편의를 위한 제공된 것이며 이들은 거시적으로 같은 기능을 수반한다. 어떤 오버로드들은 비교적 더 세부적으로 세팅을 구성할 수 있도록 한다.

예를 들어 Rotate Transform 유닛에는 6개의 오버로드가 있다. 그 중 2개는 단일 오일러 각 벡터(Euler Angle Vector)로 각도 값을 취하고, 다른 2개는 X, Y, Z 3개의 개별 축의 값으로 취하고, 마지막 2개는 축에 상대적인 각도 값으로 취한다. 아래 이미지에서 보여지는 3쌍의 유닛들 중 왼쪽은 상대 공간(Relative Space, 상대 좌표)을 우측은 월드 공간(World Space, 절대 좌표)을 기준으로 각도를 지정한다.

아래 이미지는 rotate 유닛에 대한 6개의 오버로드를 나타낸다.

Rotate Transform Units

다양한 옵션들에 익숙해질 때까지 적절한 오버로드를 찾는데 여러번의 시행착오나 오류를 경험할 것이다. 이러한 다양한 사용기능들을 올바르게 사용 위해서는 기본적으로 제공되는 가이드나 Unity 메뉴얼을 잘 활용하기 바란다.

유닛의 해석

아래 이미지의 Rotate Transform 유닛의 다음 예에서 가장 먼저 주목해야 할 것은 이 유닛이 선택된 유닛임을 나타내는 가장자리의 파란색 테두리선이다. 유닛을 선택하면 옵션과 가이드가 그래프 검사기(Graph Inspector)에 표시된다.

유닛의 윗부분은 헤더로, 유닛이 하는 일을 간략히 요약한 설명이있다. 이 경우 헤더는 Transform Component에서 Rotate Method를 호출하고 있음을 설명하고 있다.

그래프 인스펙터(Graph Inspector)

그래프 인스펙터는 다음과 같이 이루어져 있다.

  • 상단에는 선택된 유닛의 제목과 요약이 있으며, 유닛이 하는 작업에 대한 간략한 개요를 제공한다.
  • 그 아래, 비주얼 스크립팅은 유닛에 대한 모든 경고를 표시한다. 위의 예시에서 비주얼 스크립팅은 메시지가 누럭되었음을 경고하고 있다.
  • 그 아래는 유닛의 세팅에 대한 안내가 있다. 세팅은 유닛마다 다르며, 어떤 유닛의 경우 세팅이 필요 없는 경우도 있다. (역자주- "Unit is never entered."는 입력 포트로의 입력 연결이 필요한데 연결되어 있지 않다는 의미를 나타내고 있다.)
  • 그리고 끝으로 Inputs과 Outputs의 각 포트에 대한 설명이 있다.

인라인 값(Inline Values)

어떤 입력 값 포트(Value Input Ports, 아래 유닛에서 제일 좌측의 빈 동그라미들)들은 그 옆에 작은 필드(아래 대부분 0이라고 쓰여져 있는 부분)를 가지고 있다. 이를 인라인 값(Inline Value)이라고 한다. 포트가 연결되어 있지 않으면 이 필드의 값이 대신 사용된다. 대부분의 일반적인 타입들은 인라인 값을 지원하지만 모든 타입이 인라인 값을 지원하는 것은 아니다. 인라인 값은 모든 값 입력 포트(Value Input Port)에 리터럴 유닛(Literal Units)이 연결되지 않도록 허용하기 때문에 그래프를 깔끔하게 유지하는 데 유용하다.

예를 들어, 아래 두 그래프는 동일하다.

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-units.html

스크립트 그래프(Script Graphs)는 프로젝트에서 상호작용(Interaction)을 만드는 주요 도구다. 유닛(Unit) 기반 액션(Actions)과 값(Values)을 사용는 이 그래프는 매 프레임(Frame)마다 또는 어떤 이벤트(Event)가 발생했을 때 세부적으로 정해진 순서대로 로직을 실행한다.

 

본 챕터에서는 아래의 요약 내용들을 다루게 된다.

레고 블럭같은 유닛들
유닛(Units)은 비주얼 스크립팅에서 처리하는 가장 기본적인 요소다. 유닛은 스크립트 그래프내에서 입력과 출력 포트가 있는 노드(nodes)로 표시된다.

유닛의 연결
유닛의 연결은 연결 가능한 출력 포트와 입력 포트간에만 이루어 지도록 되어있다.(역자주-연결 불가한 경우 자동적으로 비활성화되어 연결이 이루어 지지 않는다.)

릴레이션(Relations)을 이용한 디버그
릴레이션(Relations)은 각 유닛의 고유한 형태로 사전 정의되어(predefined) 있어서 수정할 수 없지만, 유닛(Unit)들의 각 포트(Port)간에 의존관계를 이해하는데 유용하다. 당연히 비주얼 스크립팅 역시 예측 디버깅(Predictive debugging)을 위해 백그라운드에서 이들 관계 정보(Relation Information)를 이용하고 있다.

역자주)여기서 릴레이션은 비주얼 스크립팅 그래프 에디터의 우측상단에 보이는 "Relations" 메뉴를 눌렀을 때 각개 유닛 내부에 보이는 검은선 색의 흐름표시를 의미한다. 솔직히 어두운 색이라 잘 보이지는 않는다. 유닛이 어떻게 다른 유닛과 연결되어야 하는지 즉, 컨트롤 포트의 연결 필요 유무, 데이타의 연결 필요 유무를 알 수 있다. 그런데 현재 시점에서 굳지 이해하지 못해도 무관하다. 하다보면 알게 된다. 혹은 몰라도 인터페이스적으로 해당 규칙을 따르지 않으면 안되기에 자연스럽게 이용하게 된다.

 

예측 디버깅(Predictive Debugging)
비주얼 스크립팅은 플레이 모드로 진입하기 전에 오류의 원인을 예측하고 해당 유닛을 가르킨다.

재사용 가능한 그래프인 슈퍼 단위(Super Units)
슈퍼 유닛(Super Units)은 독립된 단일 유닛처럼 부모 스크립트 그래프에 중첩(nested)되는 스크립트 그래프다. 이는 스크립트 그래프를 재사용 가능하게 하고 구조화시킬 수 있는 강력한 기능이다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-flow.html

'VS 기본' 카테고리의 다른 글

유닛들 연결하기  (0) 2021.08.13
스크립트 작성하기  (0) 2021.08.12
스크립트를 그룹화하여 관리하기  (0) 2021.08.11
프리팹(Prefabs)에 머신(Machine) 추가하기  (0) 2021.08.11
객체 타입들(Object Types)  (0) 2021.08.11

그룹은 작성한 그래프(유닛들의 집합)들을 조직화하여 관리할 수 있도록 하는 박스를 의미하며, 이는 비주얼 스크립트의 일부를 재사용할 수 있도록 하기도 합니다.

 

스크립트 그래프에서 그룹을 만드는 방법

  1. Ctrl 키 또는 Mac에서 Cmd를 누른 상태에서 그래프 주변 영역을 마우스로 선택한다.
  2. 그래프의 일부 유닛들이 포함되도록 마우스를 드래그한다.
  3. 각 그룹에 제목을 지정한다. 팁: 그룹에 의미 있는 제목을 제공하는 것이 좋다.

참고: 그룹의 헤더를 두 번 눌러 그룹의 모든 항목을 선택하십시오.

참고: 유니티 컨트롤 스킴(Unity Control Scheme)을 사용할 경우, Alt(Option) 키를 누른 채 마우스로 헤더(박스 위쪽)를 끌 경우 내용을 가만있고 박스만 움직일 수 있다.(역자주-기본적으로 그냥 마우스로 박스 헤더를 이동하면 박스 안의 모든 내용이 함께 움직임니다. 박스만 움직일 경우 Alt키를 함께 누르면 된다.)

 

그룹이 선택되어 있을 때 마우스 오른쪽 버튼을 누르고 Delete(Section)를 하면 그룹 박스가 삭제된다.

그래프 인스펙트(Graph Inspector)에서 그룹의 이름, 주석 그리고 색상을 변경할 수 있다.  그 코멘트(comment)는 인스펙터(Inspector)에서만 볼 수 있다.

 

역자주) 추가적인 이해를 위해 아래 이미지를 추가한다.

Visual Scripting: organizing scripts in groups

<원본>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-groups.html

편집기내부에 생성된 임배드 그래프(Embed Graph) 프리팹 인스턴스(Prefab Instances)를 제외한 모든 타입의 그래프에 대해 완전하게 프리팹(Prefab)에서의 사용을 지원한다.

프리팹 인스턴스(Prefab Instance) Graph Embed
편집기에서 생성된 경우 O !
런타임에 인스턴스화된 경우 O O

 

프리팹(Prefab)으로 임베드 그래프(Embed Graph)가 있는 머신(Machine)을 사용하면 프리팹 정의에서 편집한 내용이 자동으로 프리팹 인스턴스(Prefab Instances)로 전파된다. 이 때 비주얼 스크립팅은 인스펙터(Inspector)와 그래프 창에 경고 메시지를 표시한다.

참고: 프리팹에 머신(Machine)을 추가할 때는 임배드(Embed) 대신 그래프(Graph)를 사용하십시오.

프리팹 오버라이드(Prefab Overrides)

비주얼 스크립팅은 Unity의 기본 직렬화(Serialization)를 사용하지 않는다. 중첩(Nesting), 확장성(Extensibility) 및 커버리지(Coverage)가 요구하는 안정성을 위해 사용자 지정 직렬화 엔진(Custom Serialization Engine)인 FullSerializer를 사용한다.

 

참고: 인스펙터(Inspector) 라벨(Labels)과 값(Values)이 볼드(Bold)로 표시되면 프리팹(Prefab)은 오버라이드(Override)보다는 차별화(Differentiation)를 나타낸다. 예를 들어, 프리팹 인스턴스의 인스펙터 필드는 이 값을 오버라이드했더라도 프리팹 정의와 동일한 값을 갖는 경우에는 절대 볼드(Bold)로 표시되지 않는다.

 

역자주) 위 내용의 말이 어려워서 아래 영상을 제작해서 추가합니다. Embed Machine을 가지고 있는 프리팹의 경우 프리팹 원본을 수정하는 것에는 문제가 없지만 하이어라키(Hierarchy)로 끌어와서 편집하려고 하면 경고 메시지가 나오게 됩니다. 즉, 편집하지 말라는 것입니다. 따라서 프리팹에 비주얼 스크립트를 작성할 때는 Embed가 아닌 Graph로 작성하여 연결하는게 여러모로 안전합니다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-prefabs.html

Unity와 비주얼 스크립팅에는 수백 가지의 타입이 있다. 다음은 가장 일반적인 타입의 요약 표이다.

 

타입 설명
Float 소수점 값이 있는 숫자. 부동소수점(예: 0.5 또는 13.25)
Integer 소수점 값이 없는 숫자(예: 3 또는 200).
Boolean 불(Bool), 참 또는 거짓만 될 수 있는 값. 일반적으로 논리 또는 토글에 사용된다.
String 문자열(String), 이름 또는 메시지와 같은 텍스트의 한 부분.
Char 문자열의 단일 문자(영문자 A, a, B, b 또는 문자로 나타내는 숫자 1, 2). 거의 사용할 일이 없다.
Enums 열거형이라고 한다. 각각은 드롭다운에서 흔히 볼 수 있는 옵션으로 유한하게 열거된다.
예시1) Unity에서 "Force Mode" 열거형은 "Force", "Impulse", "Acceleration" 또는 "Velocity Change"가 될 수 있다. 
예시2) "Direction(방향)"의 열거형은 "동(East)", "서(West)", "남(South)", "북(North)"으로 나타낼 수 있다.
Vectors 벡터(Vectors)는 부동 좌표(float coordinates)의 집합으로 위치(Positions) 또는 방향(directions)을 갖는다.
Unity에는 다음과 같은 세 가지 벡터가 있다.
Vector 2: 2D에 대한 X, Y 좌표
Vector 3: 3D에 대한 X, Y, Z 좌표
Vector 4: X, Y, Z, W 좌표로 거의 사용되지는 않는다.
GameObject 게임 오브젝트(GameObject)는 유니티 씬에 있는 가장 기본이 되는 엔터티(entity)다. 각 게임 오브젝트는 이름(name), 위치(position)와 회전(rotation)을 위한 트랜스폼(transform), 컴포넌트(component) 리스트가 있다.
Lists 목록(Lists)은 순서가 정해진 요소(elements)의 모음입니다. 요소(elements)로는 어떤 타입이든 될 수 있지만, 하나의 목록(List)은 모두 동일한 타입의 요소들로 이루어 져야 한다. 단, 1번이 아닌 0번 부터 목록 번호가 할당(zero-based index) 되기 때문에 이를 기준으로 목록의 각 요소를 검색하고 할당해야 한다.
Dictionaries 딕셔너리(Dictionary, 번역하면 사전이지만 프로그래밍 용어상 딕셔너리로 불림)는 요소들(elements)가 고유 키(unique key)와 그 키에 매핑되는 값(value)을 갖는 모음이다.  예를 들어, Name(string key)에 대해 Age(integer value)을 가질 수 있다. 고유 키(key)로 각 요소를 검색하고 값을 할당한다.
Object "오브젝트"는 특수한 타입이다. 노드(Node)가 오브젝트를 요구할 때, 이는 오브젝트의 종류에 상관하지 않겠다는 갓을 의미한다. (역자주-Object 데이타 타입은 모든 데이터들의 최상위 타입이다.)

역자주) 완전 초보자를 위해 코맨트를 하면, 위 내용은 비주얼 스크립팅을 하든 C#, C++ 코딩을 하든 프로그래밍 이라는 작업을 하기 위해서는 알아야 하는 기초 개념이다. 최소한 변수(Variable)의 의미 그리고 위 내용 중 integer(정수), float(플로트), bool(불) string(string) 정도만이라도 알고 넘어가기 바란다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-object-types.html

오브젝트(Object)가 무엇을 나타내고 무엇을 할 수 있는지 구별하기 위해 각 오브젝트는 타입(유형, 역자주-데이터 타입)이 있다. 비주얼 스크립팅에서 대부분의 타입은 아이콘으로 표현된다.

타입을 선택해야 하는 경우 비주얼 스크립팅에 타입 메뉴가 표시된다.

가장 일반적인 타입은 메뉴 상단에 있다. 열거형(Emun)은 맨 아래에 그룹화되어져 있다. 기타 타입들은 그 타입 명칭의 네임스페이스(Namespace)로 그룹화되어져 있다. 모든 유니티 컴포넌트(Unity Component) 및 데이타 타입(Data Type)은 Unity Engine namespace에서 찾을 수 있다.

사용자 정의 타입

비주얼 스크립팅은 모든 클래스(Class) 및 구조체(Struct) 타입을 지원한다. 기본적으로 유니티 오브젝트(Unity Objects), 컴포넌트(Components), 모노 비헤이비어(Mono Behaviours), 스크립터블 오브젝트(Scriptable Objects)에서 파생된 가장 일반적으로 사용되는 타입만 퍼지 파인더(Fuzzy Finder)에 나타난다.

(역자주-디폴트로 나타나지 않는 타입들은 "Edit > Project Settings > Visual Scripting"에 추가해주면 된다. 추후 사용 가능한 기능이 많아지면 본인의 필요에 따라 이 메뉴를 자주 이용하게 될 듯 하다)

 

타사 플러그인과 같은 사용자 정의 어셈블리의 사용자 정의 타입을 사용하려면 먼저 어셈블리 옵션(Assembly Options)에 추가해야 한다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-types.html

'VS 기본' 카테고리의 다른 글

프리팹(Prefabs)에 머신(Machine) 추가하기  (0) 2021.08.11
객체 타입들(Object Types)  (0) 2021.08.11
그래프(Graph) 생성하기  (0) 2021.08.10
객체 변수(Object Variable)의 활용  (0) 2021.08.09
변수(Variables) 추가하기  (0) 2021.08.09

그래프(Graph)는 재사용할 수 있으며 그 그래프 소스를 가지고 있는 머신(Machine)에 의해 참조되어 진다. 그래프(Graph)는 일반적으로 임베드(Embed)보다 우월하다. 그래프(Graph)는 재사용 가능하고 어떤 오브젝트에 억매이지도 않으며 프리팹(Prefabs)에서 사용할 때도 안정적으로 작동한다.

그래프(Graph) 파일을 생성하는 방법

  1. 프로젝트 패널의 빈 폴더를 마우스 오른쪽 버튼으로 누른다.
  2. Create > Visual Scripting > (Script 또는 State) Graph를 선택한다. 참고: 최상위 그래프 폴더에 그래프 파일을 저장하는 것이 좋지만 폴더의 구조는 기능에 영향을 주지 않는다. (역자주-보통 C# 코드는 Scripts 폴더를 만들어 저장하듯이 VisualScripts라는 폴더를 만들어서 저장하면 된다.)
  3. 새로 생성한 그래프(Grpah) 파일(엣셋 폴더에 있는)을 머신(Machine)의 그래프(Graph) 필드(스테이트(State Field)가 아닌)에 끌어서 놓는다.

위와 같이 하면 그래프(Graph)가 머신(Machine)에 할당되어 있다.

 

역자주) 완전 초보자의 이해를 돕기 위해 아래 동영을 만들어 보았다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-creating-macro.html

'VS 기본' 카테고리의 다른 글

객체 타입들(Object Types)  (0) 2021.08.11
객체 타입의 선택  (0) 2021.08.10
객체 변수(Object Variable)의 활용  (0) 2021.08.09
변수(Variables) 추가하기  (0) 2021.08.09
변수(Variables)  (0) 2021.08.09

객체 변수(Object Variables)는 변수 컴포넌트로도 존재하며, 스크립트 그래프에서 사용할 수 있다. 예를 들면, 게임 오브젝트에 체력(health) 변수가 노출된다는 것이다..

객체 변수(Object Variable)는 게임 오브젝트(Game Object)를 선택하고 인스펙터(Inspector)의 변수(Variable) 컴포넌트에서 확인할 수 있고 블랙보드(Blackboard)의 오브젝트(Object) 탭에서도 확인할 수 있다.

 

참고: 블랙보드(Blackboard)에서 변수 콤포넌트(Variable Component)가 있는 게임 오브젝트를 선택했을 때 게임 변수(Object Variable) 탭이 활성화되며, 이후 이 탭에서는 선택한 게임 오브젝트의 변수만 볼 수 있다. 프로젝트 창에서 스크립트 그래프 에셋을 선택하면 오브젝트(Object) 탭이 사라진다.

 

역자 주-참고를 위해 아래 이미지를 추가함.

객체 변수(Object Variable) 컴포넌트

객체 변수(Object Variable)의 사용 방법.

  1. 스크립트 머신(Script machine)을 추가한다.
    유니티에서 자동으로 해당 게임 오브젝트에 변수 컴포넌트(Variable Component)를 추가한다. 이 컴포넌트는 객체 변수(Object Variables)를 위한 것이다.
    참고: 객체 변수(Object Variable)는 해당 오브젝트 전체에 공유된다. 게임 오브젝트에 적용된 여러 개의 스크립트 그래프는 모두 동일한 객체 변수(Object Variable)를 사용할 수 있다. 사용자가 모든 겍체 변수를 직접 추가해야 하므로 게임 오브젝트에 존재하지 않는 객체 변수(Object Variable)는 사용하면 안된다.
  2. Edit Graph를 선택한다.
  3. 그래프에 유닛(Units)을 추가한다.
  4. 변수 컴포넌트(Variable Component)에 사용할 새 변수의 이름을 입력한다.
  5. 이 새 변수를 추가하려면 (+) 버튼을 클릭한다.
    새로 생성된 변수가 변수 목록에 나타나고 값이 null로 설정된다.
  6. 변수 이름과 유형을 변경하려면 드롭다운 메뉴를 클릭한다.
  7. 변수 탬의 새 변수를 그래프 상에 드래그 앤 드롭으로 끌어올 수도 있다.

이제 그래프 안에서 이 변수를 사용할 수 있다.

 

주의: 변수 콤포넌트(Variable Component) 내부의 변수 이름을 변경하면, 그래프에 올려진(이미 사용중인) 변수 유닛에 반영되지 않는다. (역자 주-이미 사용중인 변수 유닛의 경우 수동으로 변경된 이름에 맞게 수정해주어야 함. 변수 유닛의 이름에서 풀다운 메뉴로 변경해주면 됨)

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-using-object-variable.html

'VS 기본' 카테고리의 다른 글

객체 타입의 선택  (0) 2021.08.10
그래프(Graph) 생성하기  (0) 2021.08.10
변수(Variables) 추가하기  (0) 2021.08.09
변수(Variables)  (0) 2021.08.09
그래프(Graphs), 상태(States) 그리고 머신(Machines)  (0) 2021.08.07

변수(Variables)는 값을 저장하는 저장소이다. 각 변수에는 이름(name), 유형(type) 및 값(value)이 있다. 변수 내부의 값은 런타임 중에 변경될 수 있다.

블랙보드 윈도우(Blackboard Window)

블랙보드 윈도우는 스크립트 그래프 윈도우(Script Graph Window)의 블랙보드(Blackboard) 버튼(<x>)을 통해 열수 있다(역자 주-기본적으로 열려져 있음). 각 변수의 타입에 해당하는 탭이 하나씩 있다. 그래프(Graph) 탭은 스크립트 그래프를 선택한 경우에만 활성화된다. 오브젝트(Object) 탭은 게임 오브젝트를 선택한 경우에만 활성화된다.

변수를 추가하려면:

  1. 추가할 변수 유형에 해당하는 탭을 선택한다.
  2. 새 변수 이름 필드에 새 변수의 이름을 입력한다.
  3. 추가(+) 버튼을 클릭한다.
  4. 변수 타입을 선택한다.
  5. (선택사항) 기본값을 변경한다.

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-adding-variables.html

'VS 기본' 카테고리의 다른 글

그래프(Graph) 생성하기  (0) 2021.08.10
객체 변수(Object Variable)의 활용  (0) 2021.08.09
변수(Variables)  (0) 2021.08.09
그래프(Graphs), 상태(States) 그리고 머신(Machines)  (0) 2021.08.07
유닛(Units)  (0) 2021.08.06

변수는 무엇인가를 담는 용기와 같다. 각 변수에는 이름, 유형 및 값이 있다. 비주얼 스크립팅에는 다음과 같은 6가지 유형의 변수가 있다.

 

변수형 설명
Flow Variable
플로우 변수
플로우 변수(Flow Variable)는 지역 변수(Local Variable)와 동일하다.
(역자 주-C#, C++에서 for문 작성할 때 흔히 쓰는 "int i"같은 개념 )
Graph Variable
그래프 변수
그래프 변수(Graph Variable)는 스크립트 그래프의 인스턴스(Instance)에 범위의 변수이다. 이 변수는 가장 작은 범위를 가지고 있고 그래프 밖에서 접근하거나 수정할 수 없다.
Object Variable
객체 변수
객체 변수(Object Variable)는 게임 객체(Game Object) 범위의 변수이다. 이 변수는 해당 게임 오브젝트에 있는 모든 비주얼 스크립트 그래프에 공유된다.
Scene Variable
씬 변수
씬 변수(Scene Variable)는 현재 씬(Scene) 전체에  공유된다.
Application Variable
어플리케이션 변수
어플리케이션 변수(Application Variable)는 씬(Scene)이 바뀌어도 지속된다. 단, 응용 프로그램이 종료되면 리셋된다.
Saved Variable
저장 변수
저장 변수(Saved Variable)는 응용 프로그램이 종료된 후에도 지속된다. 단순하지만 강력한 저장 시스템으로 활용될 수 있다. 이 변수들은 유니티의 Player Prefs에 저장된다는 것으로 게임 오브젝트나 컴포넌트 같은 유니티 오브젝트를 참조하지 않는다는 뜻이다.

저장 변수(Saved Variable)와 초기 변수(Initial Variable)의 값

저장 변수(Saved Variable) 탭 아래에는 두 개의 하위 탭이 있다. 초기화(Initial) 및 저장됨(Saved).

  • 초기화(Initial) 탭에서는 새로운 게임을 시작할 때 자동으로 생성되는 기본 값을 정의한다.
  • 저장된(Saved) 탭에는 현재 시스템의 저장 변수(Saved Variable) 상태가 표시된다. 저장 변수의 값을 초기화 하거나 변경하고자 한다면 수동으로 편집하거나 모두 삭제하면 된다. (역자 주 - 게임 만들 때는 Initial 부분에만 변수를 지정하면 됨. Saved 탭에는 자동으로 Initial에 만들어진 변수와 게임을 실행하면서 변경된 값이 저장되어짐)

 

동적 변수의 값 설정

존재하지 않는 변수에 값을 세팅(저장)하려 하면 변수가 자동으로 생성된다. 예를 들어, 다음 그래프는 변수로써 gold가 정의되지 않았음에도 불구하고 250 값을 담는 gold라는 이름의 정수(Ingeger) 타입의 저장 변수(Saved Variable)를 생성한다.

변수(Variable)는 편집 모드 상에서나 플레이 모드 상에서 선언할 수 있다.

변수의 가시성(Variable's Visibility)

비주얼 스크립팅의 모든 객체 변수(Object Variable)는 퍼블릭(Public)으로 선언된다. 따라서 다른 오브젝트에서 액세스하도록 할 수 있다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-variables.html

그래프는 로직(logic)을 시각적으로 표현한 것이다. 이 그래프가 비주얼 스크립팅의 핵심에 있다.

그래프에는 두 가지 종류가 있다.

  • 스크립트 그래프(Script Graphs)는 개별적인 동작들과 값을 특정 순서로 연결하는 것이다. 실행 순서는 스크립트(Script)의 흐름(Flow)이다. 스크립트 그래프는 언리얼 엔진의 블루프린트(Blueprint) 비주얼 스크립팅 언어와 유사하다. (역자 주 - Script Graphs는 Script Machine에서 작성)
  • 상태 그래프(State Graphs)는 서로 다른 상태를 만들고 그 상태들 간에 전환을 생성한다. 각 상태(State)는 작은 프로그램 역할을 한다. 상태 그래프는 플레이 메이커(PlayMaker) 또는 유한 상태 머신(FSM; Finite State Machine) 시스템과 유사하다. (역자 주 - State Graphs는 State Machine에서 작성, 각 State Graphs의 내부는 Script Graph로 작성된다. 여기 있는 Script Graph의 집합이 시스템 설계의 목적상 어떤 상태를 의미(정의)하기 때문에 State Graph가 되는 것이다)

이 두 종류의 그래프로 어떤 종류의 게임도 만들 수 있다. 이 글에서는 그래프(Graph)와 그 그래프들의 유사점을 설명하고자 한다. 각 그래프에대한 설명은 본 메뉴얼에 별도의 전용 섹션이 마련되어 있다. 스크립트 그래프와 상태 그래프의 순서로 읽어 보기 바란다.  더욱이 두 종류의 그래프는 결합할 수 있다. 예를 들어, 상태 그래프의 각 상태 노드(State Node)는 실제로 스크립트 그래프(Script Graphs)로 이루어져 있다.

어떤 경우에 스크립트 그래프와 상태 그래프를 사용하는가!

  • 스크립트 그래프(Script Graph)는 매 프레임마다 또는 충돌과 같은 이벤트가 발생할 때 동작이 실행된다. 스크립트 그래프는 분기(branching, 역자 주-if, swith 같은), 루프(loop), 수학(math) 등과 같은 소위 "낮은 수준(low-level)"이라 일컬어지는 로직(logic)에 이용된다. 스크립트 그래프는 "언제 작동할 것인가?, 어떤 동작을 할 것인가? 그리고 어떤 순서로 동작할 것인가?"라는 질문에 가장 잘 대답한다.(역자 주-보통 프로그래밍을 처음 공부할 때 접하는 대부분의 것들이 스크립트 그래프에 속한다.)
  • 상태 그래프(State Graph)는 AI 행동, 씬(Scene) 또는 레벨 구조(level structure), 그리고 상태 개념이 요구되는 "고 수준(high-levle)" 로직(logic)을 만드는 데 사용된다. 예를 들어, 몬스터 NPC가 "패트롤(patrol)", "추적(chase)" 및 "공격(attack)" 상태를 가져야 하는 경우, 혹은 어떤 문이 "잠금(locked)", "잠금 해제(unlocked)", "열림(open)" 상태를 가져야 하는 경우이다. 상태 그래프(state graphs)는 "현재 나의 행동은 무엇인가? 그리고 언제 그 행동이 바뀌어야 하는가?"라는 질문에 가장 잘 답한다. (역자 주-일련의 프로그래밍 집합이 의미있는 행동을 하도록 하는 것이 상태 그래피이다. 즉, 왔다 갔다 경계를 하고 있던 몬스터가 플레이어 캐릭터가 나타나면 공격을 시작한다고 할 때 경계 상태에서 공격 상태로 전환되는 것을 구현하는 것이다.)

다음은 두 종류의 그래프 모두 가지고 있는 공통의 기본 개념에 관한 것이다.

머신들(Machines)

머신(앞쪽 글에서 이해를 위해 시스템으로 번역하였으나 이후 부터는 혼돈을 막기 위해 머신으로 번역함)는 게임 오브젝트에 추가되어 플레이 모드 중 그래프의 로직을 실행하는 구성요소다. 각 그래프는 스크립트 머신(Script Machine)과 상태 머신(State Machine)이 있다. 이들은 모두 비주얼 스크립팅 컴포넌트 분류에 있다.

스크립트 머신은 오브젝트(Object)가 어떻게 동작해야 하는지를 설명하고, 상태 기계는 오브젝트(Object)가 언제 그 동작을 변경해야 하는지를 결정한다.

두 머신 모두 인스펙터(Inspector)에 동일한 옵션을 가지고 있다. 다음 예는 스크립트 머신 컴포넌트가 생성된 경우다.

각 그래프 마다 제목(title)과 간단한 설명(summary)을 작성할 수 있도록 되어져 있고 이는 비주얼 스크립팅 기능에 전혀 영향을 미치지 않는다. (역자 주-C#에 주석을 다는 것과 같음)

편집할 그래프 열기

그래프 편집 버튼(Edit Graph Button)은 그래프 윈도우(Graph Window)와 그래프 인스펙터(Graph Inspector)에 있으며 머신 그래프(Machine Graph) 창을 활성화 시킨다. 하나의 오브젝트에 하나의 머신이 있는 경우 비주얼 스크립팅은 그 그래프를 자동으로 선택한다. (역자 주-여러 개의 머신이 하나의 오브젝트에 있다면 제일 위에 것이 자동 선택되는 듯함)

스크립트 소스(Sources): 임배드(Embeds) 와 그래프(Graphs)

스크립트 소스는는 두 가지 유형이 있다. 임배드(embed) 방식(삽입되어져 있음의 뜻)과 그래프(graph) 방식(별도 파일로 만들어져짐)이다..

임베드그래프

  임배드(Embed) 그래프(Graph)
관계 작업한 그래프가 머신(Machine) 자체에 내장되어 진다. 작업한 그래프가 머신이 참조하는 에셋이다.
(역자 주-에셋 파일로 저장되고 이를 참조한다는 의미)
재이용가능성 다른 머신의 임베드 그래프는 재사용할 수 없지만, 프리팹 인스턴스 간에 공유된다.
(역자 주-오브젝트를 프리팹으로 만들어 인스턴스로 생성하면 내장되어 있는 스크립트를 사용할 수 있다는 의미)
동일한 그래프를 여러 개의 머신에 재사용할 수 있다. 같은 프리팹에 있지 않더라도 말이다.
(역자 주-에셋 파일임으로 여러 오브젝트 파일 혹은 여러 스크립트 파일에서 재사용할 수 있다는 의미)
영속성 머신 컴포넌트를 제거하면 내장 그래프가 삭제된다. 또한 스크립트 소스를 그래프(Graph)로 전환하면 내장(Embed) 그래프도 삭제된다.
(역자 주-여기서 전환이란 Embed 소소를 Graph 소스로 바꾼다는 의미이며 에셋파일로 저장한다는 것이다.)
머신 컴포넌트를 제거해도 그래프 에셋은 여전히 존재한다. 소스를 임베드로 전환해도 그래프는 삭제되지 않는다.
씬 참조 임베드 그래프는 프리팹으로 저장되지 않는 그 그래프가 속한 현재 씬의 게임 오브젝트를 가르킨다. 그래프는 어떤 씬에도 귀속되지 않기 때문에 현재 씬의 게임 오브젝트만을 가르킨다고 말할 수 없다.
프리팹(Prefabs) 임배드 스크립트 머신(embed script를 가지고 있는 Machine)이 에디터에 존재한다면 프리팹을 인스턴스화하해서 사용해서는 안 된다. 그래프 스크립트 머신(graph script를 가지고 있는 machine)은 모든 프리팹상에서 안전하게 사용할 수 있다.

역자 주) 위에서 설명한 임배드(Embed) 와 그래프(Graph)는 막상 알면 쉬운데 그래프(Graph)라는 단어를 중복적으로 사용해서 헷갈리게 만든다. "비주얼 스크립트는 그래프(Graph)를 작성한다"는 것은 프로그래밍을 한다는 의미인데 위의 표에서 설명하는 그래프(Graph)는 에셋 파일로 그래프 스크립트를 저장해서 사용한다는 의미이다. 임배드(Embed)는 머신 컴포넌트(Machine Componet)에 내장시켜서 사용한다는 의미이다. 즉, 형식적으로는 파일로 저장하느냐 마느냐의 차이이다. 따라서 그래프(Graph)라는 단어의 의미를 잘 구분해서 이해해야 한다.

그래프(Graph)

그래프(graph)는 여러 다른 머신에서 참조하는 연결된 유닛들의 재사용 가능한 집합이다. 그래프(graph)는 일반적으로 임베드(embed)보다 재사용가능하다는 측면, 특정 오브젝트에 억매이지 않는다는 측면 그리고  프리팹으로 사용해도 안전하다는 측면에서 우수하다. 그런데 어떤 소스를 사용할지(즉, embed를 사용할지, graph를 사용할지) 결정하는 아주 간단한 가이드 라인이 있다.

 

그래프로 머신의 원본 옵션을 전환하고자한다면 머신에서 그래프를 선택하면 된다(역자 주-머신 컴포넌트를 추가하면 임배드와 그래프중 선택하는 메뉴가 자동으로 나타난다. 기본은 그래프 설정이다). 스크립트 머신(Script Machine)은 스크립트 그래프(Script Graph)가 필요하고 상태 머신(Script Machine)은 상태 그래프(State Graph)가 필요하다.

  • 대부분의 경우 그래프(graph)를 사용하게 될 것이다. 그래프(graph)를 하나 이상의 오브젝트 또는 씬(scene)에 걸쳐 재사용하고자 할 때 그래프(graph)를 로드하는 것이 빠르고 유지관리가 쉽기 때문이다.
  • 현재 씬(scene)에서 한 번만 사용되는 그래프(graph - 여기서 그래프는 스크림트로 작성한 그래프)라면 임베드(embed)를 사용할 수 있다. 이는 GUI에서 유용한데 특정 씬에서만 사용되도록 할 수 있다.

참조한 모든 오브젝트에 공통으로 반영

그래프(graph)를 변경하면 해당 그래프가 연결된 모든 오브젝트에 변경 사항이 모두 적용된다. 오브젝트의 모든 인스턴스에 대해 고유한 그래프를 사용하거나 변경사항을 복사하여 붙여넣을 필요는 없다.

소스 변환

한 종류의 소스에서 다른 종류의 소스로 변환할 수 있다.

(역자 주-임배드를 그래프로, 그래프롤 임배드로 전환할 수 있다)

그래프(graph)에서 임배드(embed)로 전환하는 경우

그래프에서 임베드로 전환하려면 변환(Convert) 버튼을 클릭하면 된다.

예를 들어, AI 동작에 대해 여러개의 에너미 개체에서 공유되고 있는 공통의 상태 그래프를 사용 중인데 특정 에너미 하나에 대해 특수한 동작을 추가 혹은 삭제하는 경우 그래프(graph)를 임베드(embed) 그래프로 변환하여 다른 개체와는 독립적으로 작동하게 할 수 있다.

임배드(embed)에서 그래프(graph)로 전환하는 경우

임배드(Embed)에서 그래프(Graph)로 변환하려면 변환(Convert) 버튼을 클릭하고 새 그래프의 경로를 지정한 후와 파일 이름을 입력하면된다. 비주얼 스크립팅은 임배드 그래프(embed graph)의 모든 내용을 그래프(graph)로 복사한다(그래프에서 지원되지 않는 씬 참조는 제외됨). 그러면 머신 컴포넌트가 자동적으로 그래프 모드로 전환되고 새로운 그래프를 참조한다.

 

예를 들어, 적 게임 오브젝트의 이동을 구현하는 임베드 그래프를 만들었지만, 유사한 다른 NPC에 동일한 로직이 필요하다면 임베드 그래프(embed graph)를 다시 사용할 수 있도록 그래프(graph)로 변환하면 된다.

 

<원본>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-graphs-machines-macros.html

'VS 기본' 카테고리의 다른 글

변수(Variables) 추가하기  (0) 2021.08.09
변수(Variables)  (0) 2021.08.09
유닛(Units)  (0) 2021.08.06
비주얼 스크립팅의 기본 개념  (0) 2021.08.06
Machines - Graph, Embed, Units  (0) 2021.07.23

유닛(units)은 비주얼 스크립팅에서 계산의 가장 기본적인 요소다. 유닛들은 매우 다양한 일들을 할 수 있다. 예를 들어, 이벤트 받기(listen), 변수의 값(value) 얻기(get) 그리고 컴포넌트(components)와 게임 오브젝트(game objects)에 대한 메소드(methods)를 호출(invoke)한다.

유닛들(units)은 자신이 사용되거나 다른 유닛들로부터 값을 전달받고 전달하는 순서를 의미하는 연결(conections)을 가지고 있다.

포트(Port)

연결(connections)은 한 유닛의 포트에서 다른 유닛의 포트로 선을 끌고가 붙임으로 생성된다.

  • 유닛의 왼쪽에는 입력 포트(Input Ports)가 있다.
  • 유닛의 오른쪽에는 출력 포트(Output Ports)가 있다.
    • 제어 포트(Control Ports)는 연결 및 흐름(flow) 생성에 사용된다. 흐름(flow)은 유닛이 실행되는 순서다. 흐름(Flow)은 항상 왼쪽에서 오른쪽으로 흐르게 되는데 유닛에 있는 작은 화살표로 그 방향을 표시하고 있다.
    • 값 포트(Value Ports)는 값을 연결하는 데 사용된다. 각 값 포트에는 노드를 연결할 때 일치해야 하는 유형(type)이 있다.

역자 주) 이해를 돕기위해 아래 이미지를 추가하였다. 각 유닛의 왼쪽은 입력 포트이고 우측은 출력포트인데, 삼각형 모양이 제어 포트(Control Ports)이고 작은 동그라미들은 값 포트들(Value Ports)이다. 값 포트들은 유닛 내부에 색깔이나 이미지들을 가지고 있는데 값 포트의 각 노드에 선을 연결하기 위해서는 이 색이나 이미지가 같해야만 연결이 이루어 진다. 즉, 이는 데이터의 타입을 의미한다. 주황색은 텍스트(string), 하늘색은 숫자(int, float 등), 보라색은 불리언(Boolean)을 의미한다. Vector, Quaternion을 나타내는 이미지들도 있다.

 

포트 유형(Types of Ports)

플로우 포트(Flow Ports)는 작업이 실행되는 순서를 나타낸다. 일반적으로 유닛(Unit)은 처리가 완료되면 해당 유닛의 오른쪽면에 있는 출력 포트 중 하나에서 다음 유닛으로 흐름(flow)이 전달된다. (역자 주 - 왼쪽에서 입력 받아서 오른쪽으로 출력는 흐름이라는 의미)

 

데이터 포트(Data Ports)에는 타입 값(type values)이 포함되어 있다. 타입(Types)에는 부울(boolean), 정수(integer), 문자열(string) 등이 있다. 유닛의 오른쪽에 있는 데이터 포트는 출력으로 간주되는 반면, 장치의 왼쪽에 있는 포트는 입력이다. 이것들을 연결하면 정보가 한 유닛에서 다음 유닛으로 전달하는 흐름이 생겨나게 된다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-understanding-units.html

게임을 만들 때 사용되는 비주얼 스크립팅에는 네 가지 기본 개념이 있다.

타입(Type) - 데이터 타입
타입은 데이터 사용 방법을 컴파일러에게 알려주는 데이터의 속성(attribute)이다. 스크립팅에서 모든 것은 객체(Object): 즉, 숫자(numbers), 텍스트(pieces of text), 벡터(vectors) 및 유니티 컴포넌트(unity components)는 모두 객체(Objects)다.

변수(Variable)
변수는 값과 데이터를 저장하는 용기(containers)이다. 각 변수에는 이름(name), 타입(type) 및 값(value)을 가지고 있다. 변수 내부의 값은 런타임(runtime) 중에(즉, 실행중에) 변경될 수 있다.

그래프(Graphs), 상태(States) 및 시스템(Machines)
그래프(Graphs)는 논리(logic)를 시각적으로 표현한 것이다. 이 것들이 비주얼 스크립팅의 핵심에 있다.

(역자 주 - machine을 시스템으로 번역하였다. 유한 상태 머신(FSM - Finite State Machine)에서 machine의 개념을 이해하는게 도움이 된다. 유니티에서는 Script Machine, State Machine 이라는 용어를 사용하고 있다.)

그룹(Groups)
그래프들을 조직화하기 위해 그룹을 만들게된다. 그룹은 유닛을 둘러싸는 박스형태로 만들어진다.

 

<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-concepts.html

+ Recent posts