변수 유닛
변수(variable) 유닛은 6종류가 있다. 이들 변수 유닛 각각은 세 가지 오브젝트 유닛이 존재한다..
- Get 유닛(Get Variable) : 변수 값 인출하기(얻기)
- Set 유닛(Set Variable) : 변수에 새로운 값 할당하기(저장하기)
- Has 유닛(Has Variable) : 변수가 정의되어 있는지 체크하기
변수 유닛은 퍼지 파인더의 변수 분류(Variables category)에 위치한다.
변수 유닛들은 청녹색을 띄고 있다.
동적 형변환(Dynamic Typing)
Get / Set 유닛들에 대해 변수들은 정적으로 입력되지 않는다. 즉 변수 타입이 실시간으로 변경될 수 있음을 의미한다. 그 타입이 Blackboard 창에 정의되면 오브젝트 처럼 표시된다.
Get Variable - 변수에서 값 얻기
![]() |
Get Variable Unit 사용 |
get 변수 유닛은 입력으로서 변수의 이름이 필요하며, 출력으로 Value를 반환한다.
Set Variable - 변수에 값 할당(저장)하기
![]() |
Set Variable Unit 사용 |
set 변수 유닛은 변수의 이름과 변수에 할당될 새로운 값이 필요하다. 레이아웃은 편의를 위해 출력으로 동일한 값을 반환한다.
참고: 변수에 값이 할당되는 타임을 잡는 제어 입력 포트는 연결이 반드시 있어야 한다. 선택적으로 제어 출력 포트는 저장(set) 이후에 어떤 작업을 할 것인가에 따라 연결할 수 도 있다.
아직 생성되지 않은 변수 이름으로 set 할 수도 있다. 그러면 자동으로 생성된다.
Has Variable - 변수가 정의되어 있는지 체크하기
is variable defined 유닛은 변수의 이름을 입력으로 받아서 그 이름의 변수가 있는지 없는지를 판단 후 Has Variable boolean 으로 반환(출력)한다. 변수가 생성되었는지 확인하는 데 유용하며, 생성되지 않은 경우에는 fallback 값을 제공하는 경우가 많다.(역자 주 - 아래의 경우 score 변수가 있다면 score 값을 출력하고 없다면 0 값을 출력한다.)
![]() |
Has Variable Unit 사용 |
참고: Get Variable 유닛을 선택 하고 그래프 인스펙터에서 Fallback 체크 박스에 체크를 하면 더 쉽게 같은 작업을 수행할 수 있다. 이렇게 하면 변수가 정의되지 않은 경우 반환되는 유닛에 fallback 입력이 추가된다.
![]() |
Get Variable Fallback |
동적 변수(Dynamic Variables)
변수의 이름은 표준 값 입력 포트이기 때문에 문자열(string)을 반환하는 다른 포트에 연결할 수도 있다. "동적 변수"이기 때문에 플레이 모드가 실행중에는 변수가 변경된다.(역자주 - int 변수를 string 변수에 연결하면 string 변수가 플레이 모드일 때 int 변수로 변경된다.)
오브젝트 변수(Object Variables)
오브젝트 변수 유닛은 추가 입력 포트가 있다. 그 포트에는 참조하고 있는 변수가 정의된 게임 오브젝트를 연결해야 한다. 기본적으로는 현재 오브젝트(self, This)를 바라보도록 설정되어져 있다.
예를 들어 Get Variable 유닛은 Player2 오브젝트에 있는 health 변수의 값을 얻는다.
![]() |
Object Variable Unit |
드롭다운(Dropdowns)
변수의 종류와 이름은 드롭다운 메뉴를 통해 빠르게 세팅할 수 있다. 이름의 우선 표시는 맥락상황에 따라 달라지는데 해당 종류의 변수가 존재하는 상황인가 그리고 현재 그래프에 다른 변수 유닛이 있는 상황인가에 기반한다.
![]() |
Dropdowns |
동일한 유닛을 그래프에 직접 만들려면 블랙보드 창의 변수 항목을 그래프 창에 직접 끌어다 놓으면 된다.
- 기본적(default)으로 Get 유닛이 생성된다.
- Alt 키를 누른 경우 Set 유닛이 생성된다.
- Shift 키를 누른 경우 Is Defined 유닛이 생성된다.
비주얼 스크립팅은 변수를 쉽게 다룰 수 있는 API를 제공하고 있다. 즉, get, set 그리고 is variable defined를 쉽게 처리할 수 있다. 이러한 모든 처리는 변수 클래스(Variables class)에서 가능하다.
예를 들면 다음과 같다.
Variables.Application.Set("score", 100); |
Usings
API 액세스하기 위해서는 C# 스크립트에 다은의 using을 추가해야 한다.
using Unity.VisualScripting; |
Scope
< Graph(그래프) - Graph Variable >
그래프 상에서만 액세스되는 변수에 액세스하려면, Graph 변수를 만들면 된다. 이것은 기본적으로 루트 머신에서 Graph 영역으로 한정된(중첩된) 경로만 지칭하게 된다.
머신 상에서 루트 Graph를 가져오려면:
var graphReference = GraphReference.New(flowMachine, true); |
중접 Graph에 액세스하려면 추가 매개변수들로써 부모 노드를 전달한다;
var graphReference = GraphReference.New(flowMachine, new IGraphParentElement[] { superUnit }, true); |
Graph 참조를 전달하는 방법;
Variables.Graph(graphReference) |
< Object(오브젝트) - Object Variable >
Object에 존재하는 변수에 엑세스하려면:
Variables.Object(gameObject) |
< Scene(씬) - Scene Variable >
Scene 변수에 액세스하려면 다음 중 하나를 수행한다.
Variables.Scene(scene) |
또는:
Variables.Scene(gameObjectInScene) |
또는:
Variables.ActiveScene |
< Application(어플리케이션) - Application Variable >
Application 변수에 액세스하려면:
Variables.Application |
< Saved(저장) - Save Variable >
저장된 변수에 액세스하려면:
Variables.Saved |
활용(Operations)
아래 예에서 소문자 scope는 이전 scope 중 하나를 가리킨다.
< Get >
변수 값을 가져오려면 변수이름과 Get 메서드를 사용한다.
scope.Get("name"); |
변수는 엄격한 타입으로 사용되고 있지 않음에 주목하자. 즉, 아래 예시처럼 수동으로 캐스팅될 필요가 있다.
int health = (int)Variables.Object(player).Get("health") |
< Set >
변수의 값을 설정하려면 변수 이름, Set 메서드 그리고 값 매개 변수를 사용한다.
scope.Set("name", value); |
예를 들면 다음과 같다.
Variables.Object(player).Set("health", 100); |
변수는 엄격한 타입이 아니기 때문에 2번째 매개 변수로는 어떤 값도 전달할 수 있다. 심지어 현재 변수와 타입이 같지 않다도 된다.
참고: 현재 존재하지 않는 변수 이름에 Set 메서드를 사용하면 새로운 변수가 자동으로 정의된다.
< Has >
변수가 정의되었는지 확인하려면 변수이름과 IsDefined 메서드를 사용한다.
scope.IsDefined("name"); |
예를 들면 다음과 같다.
if (Variables.Application.IsDefined("score")) { // ... } |
<원문>
https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-variables-reference.html
댓글
댓글 쓰기