변수 유닛

변수(variable) 유닛은 6종류가 있다. 이들 변수 유닛 각각은 세 가지 오브젝트 유닛이 존재한다..

  • Get 유닛(Get Variable) : 변수 값 인출하기(얻기)
  • Set 유닛(Set Variable) : 변수에 새로운 값 할당하기(저장하기)
  • Has 유닛(Has Variable) : 변수가 정의되어 있는지 체크하기

변수 유닛은 퍼지 파인더의 변수 분류(Variables category)에 위치한다.

변수 유닛들은 청녹색을 띄고 있다.



동적 형변환(Dynamic Typing)


Get / Set 유닛들에 대해 변수들은 정적으로 입력되지 않는다. 즉 변수 타입이 실시간으로 변경될 수 있음을 의미한다. 그 타입이 Blackboard 창에 정의되면 오브젝트 처럼 표시된다.



Get Variable - 변수에서 값 얻기


Get Variable Unit
Get Variable Unit 사용


get 변수 유닛은 입력으로서 변수의 이름이 필요하며, 출력으로 Value를 반환한다.



Set Variable - 변수에 값 할당(저장)하기

 

Set Variable Unit
Set Variable Unit 사용

set 변수 유닛은 변수의 이름과 변수에 할당될 새로운 값이 필요하다. 레이아웃은 편의를 위해 출력으로 동일한 값을 반환한다.

 

참고: 변수에 값이 할당되는 타임을 잡는 제어 입력 포트는 연결이 반드시 있어야 한다. 선택적으로 제어 출력 포트는 저장(set) 이후에 어떤 작업을 할 것인가에 따라 연결할 수 도 있다.

아직 생성되지 않은 변수 이름으로 set 할 수도 있다. 그러면 자동으로 생성된다.



Has Variable - 변수가 정의되어 있는지 체크하기


is variable defined 유닛은 변수의 이름을 입력으로 받아서 그 이름의 변수가 있는지 없는지를 판단 후 Has Variable boolean 으로 반환(출력)한다. 변수가 생성되었는지 확인하는 데 유용하며, 생성되지 않은 경우에는 fallback 값을 제공하는 경우가 많다.(역자 주 - 아래의 경우 score 변수가 있다면 score 값을 출력하고 없다면 0 값을 출력한다.)

Has Variable Unit
Has Variable Unit 사용


참고: Get Variable 유닛을 선택 하고 그래프 인스펙터에서 Fallback 체크 박스에 체크를 하면 더 쉽게 같은 작업을 수행할 수 있다. 이렇게 하면 변수가 정의되지 않은 경우 반환되는 유닛에 fallback 입력이 추가된다.


Get Variable Fallback
Get Variable Fallback


동적 변수(Dynamic Variables)


변수의 이름은 표준 값 입력 포트이기 때문에 문자열(string)을 반환하는 다른 포트에 연결할 수도 있다. "동적 변수"이기 때문에 플레이 모드가 실행중에는 변수가 변경된다.(역자주 - int 변수를 string 변수에 연결하면 string 변수가 플레이 모드일 때 int 변수로 변경된다.)



오브젝트 변수(Object Variables)


오브젝트 변수 유닛은 추가 입력 포트가 있다. 그 포트에는 참조하고 있는 변수가 정의된 게임 오브젝트를 연결해야 한다. 기본적으로는 현재 오브젝트(self, This)를 바라보도록 설정되어져 있다.

예를 들어 Get Variable 유닛은 Player2 오브젝트에 있는 health 변수의 값을 얻는다.


Object Variable Unit
Object Variable Unit


드롭다운(Dropdowns)


변수의 종류와 이름은 드롭다운 메뉴를 통해 빠르게 세팅할 수 있다. 이름의 우선 표시는 맥락상황에 따라 달라지는데 해당 종류의 변수가 존재하는 상황인가 그리고 현재 그래프에 다른 변수 유닛이 있는 상황인가에 기반한다.


Dropdown
Dropdowns


드래그 앤 드랍(Drag and Drop)


동일한 유닛을 그래프에 직접 만들려면 블랙보드 창의 변수 항목을 그래프 창에 직접 끌어다 놓으면 된다.

  • 기본적(default)으로 Get 유닛이 생성된다.
  • Alt 키를 누른 경우 Set 유닛이 생성된다.
  • Shift 키를 누른 경우 Is Defined 유닛이 생성된다.


변수 API(Variables API)


비주얼 스크립팅은 변수를 쉽게 다룰 수 있는 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

댓글

이 블로그의 인기 게시물

EMACS - 파일 열기, 저장, 도움말

EMACS - 검색 및 바꾸기

EMACS, CLISP, SLIME 설치