라벨이 2. 비주얼 스크립팅 개념인 게시물 표시

비주얼 스크립팅의 기본 개념

게임을 만들 때 사용되는 비주얼 스크립팅에는 네 가지 기본 개념이 있다. 타입(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

유닛(Units)

이미지
유닛(units)은 비주얼 스크립팅에서 계산의 가장 기본적인 요소다.   유닛들은 매우 다양한 일들을 할 수 있다. 예를 들어, 이벤트 받기(listen), 변수의 값(value) 얻기(get) 그리고 컴포넌트(components)와 게임 오브젝트(game objects)에 대한 메소드(methods)를 호출(invoke)한다. Units 유닛들(units)은 자신이 사용되거나 다른 유닛들로부터 값을 전달받고 전달하는 순서를 의미하는 연결(conections)을 가지고 있다. 포트(Ports) 연결(connections)은 한 유닛의 포트에서 다른 유닛의 포트로 선을 끌고가 붙임으로 생성된다. 유닛의 왼쪽에는   입력 포트(Input Prots) 가 있다. 유닛의 오른쪽에는   출력 포트(Output Ports) 가 있다. 제어 포트(Control Ports) 는 연결 및 흐름(flow) 생성에 사용된다.   흐름(flow)은 유닛이 실행되는 순서다.   흐름(Flow)은 항상 왼쪽에서 오른쪽으로 흐르게 되는데 유닛에 있는 작은 화살표로 그 방향을 표시하고 있다. 값 포트(Value Ports) 는 값을 연결하는 데 사용된다.   각 값 포트에는 노드를 연결할 때 일치해야 하는 유형(type)이 있다. 역자 주) 이해를 돕기위해 아래 이미지를 추가하였다. 각 유닛의 왼쪽은 입력 포트이고 우측은 출력포트인데, 삼각형 모양이 제어 포트(Control Ports)이고 작은 동그라미들은 값 포트들(Value Ports)이다. 값 포트들은 유닛 내부에 색깔이나 이미지들을 가지고 있는데 값 포트의 각 노드에 선을 연결하기 위해서는 이 색이나 이미지가 같해야만 연결이 이루어 진다. 즉, 이는 데이터의 타입을 의미한다. 주황색은 텍스트(string), 하늘색은 숫자(int, float 등), 보라색은 불리언(Boolean)을 의미한다. Vector, Quaternion을 나타내는 이미지들도 있다. Units 포트 유형(Ty...

그래프(Graphs), 상태(States) 그리고 머신(Machines)

이미지
그래프는 로직(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가 되는 것이다) Script Graph 이 두 종류의 그래프로 어떤 종류의 게임도 만들 수 있다.   이 글에서는 그래프(Graph)와 그 그래프들의 유사점을 설명하고자 한다.   각 그래프에대한 설명은 본 메뉴얼에 별도의 전용 섹션이 마련되어 있다. 스크립트 그래프와 상태 그래프의 순서로 읽어 보기 바란다.    더욱이 두 종류의 그래프는 결합할 수 있다. 예를 들어, 상태 그래프의 각 상태 노드(State Node)는 실제로 스크립트 그래프(Script Graphs)로 이루어져 있다. 어떤 경우에 스크립트 그래프와 상태 그래프를 사용하는가? 스크립트 그래프(Script Graph)는 매 프레임마다 또는 충돌과 같은 이벤트가 발생할 때 동작이 실행된다...

변수(Variables)

이미지
변수는 무엇인가를 담는 용기와 같다.   각 변수에는 이름, 유형 및 값이 있다.  비주얼  스크립팅에는 다음과 같은 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)  ...

변수(Variables) 추가하기

이미지
변수(Variables)는 값을 저장하는 저장소이다.   각 변수에는 이름(name), 유형(type) 및 값(value)이 있다.   변수 내부의 값은 런타임 중에 변경될 수 있다. 블랙보드 윈도우(Blackboard Window) 블랙보드 윈도우는 스크립트 그래프 윈도우(Script Graph Window)의 블랙보드(Blackboard) 버튼(<x>)을 통해 열수 있다(역자 주-기본적으로 열려져 있음).  각 변수의 타입에 해당하는  탭이 하나씩 있다.  그래프(Graph)  탭은 스크립트 그래프를 선택한 경우에만 활성화된다.   오브젝트(Object) 탭은 게임 오브젝트를 선택한 경우에만 활성화된다. Blackboard Window 변수를 추가하려면: 추가할 변수 유형에 해당하는 탭을 선택한다. 새 변수 이름 필드에 새 변수의 이름을 입력한다. 추가(+)   버튼을 클릭한다. 변수 타입을 선택한다. (선택사항) 기본값을 변경한다. <원문> https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-adding-variables.html

객체 변수(Object Variable)의 활용

이미지
객체 변수(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)을 추가한다....

객체 타입의 선택

이미지
오브젝트(Object)가 무엇을 나타내고 무엇을 할 수 있는지 구별하기 위해 각 오브젝트는 타입(유형, 역자주-데이터 타입)이 있다.  비주얼   스크립팅에서 대부분의 타입은 아이콘으로 표현된다. 타입을 선택해야 하는 경우 비주얼 스크립팅에 타입 메뉴가 표시된다. Visual Scripting Type Menu 가장 일반적인 타입은 메뉴 상단에 있다.   열거형(Emun)은 맨 아래에 그룹화되어져 있다.  기타  타입들은 그 타입 명칭의 네임스페이스(Namespace)로 그룹화되어져 있다. 모든 유니티 컴포넌트(Unity Component) 및 데이타 타입(Data Type)은 Unity Engine namespace에서 찾을 수 있다. 사용자 정의 타입(Custom Types) 비주얼 스크립팅은 모든 클래스(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

그래프(Graph) 생성하기

이미지
그래프(Graph)는 재사용할 수 있으며 그 그래프 소스를 가지고 있는 머신(Machine)에 의해 참조되어 진다.   그래프(Graph)는 일반적으로 임베드(Embed)보다 우월하다. 그래프(Graph)는 재사용 가능하고 어떤 오브젝트에 억매이지도 않으며 프리팹(Prefabs)에서 사용할 때도 안정적으로 작동한다. 그래프(Graph) 파일을 생성하는 방법 프로젝트 패널의 빈 폴더를 마우스 오른쪽 버튼으로 누른다. Create   >   Visual Scripting   >   (Script   또는   State) Graph 를 선택한다. 참고: 최상위 그래프 폴더에 그래프 파일을 저장하는 것이 좋지만 폴더의 구조는 기능에 영향을 주지 않는다. (역자주-보통 C# 코드는 Scripts 폴더를 만들어 저장하듯이 VisualScripts라는 폴더를 만들어서 저장하면 된다.) 새로 생성한 그래프(Grpah) 파일(엣셋 폴더에 있는)을 머신(Machine)의 그래프(Graph) 필드(스테이트(State Field)가 아닌)에 끌어서 놓는다. 위와 같이 하면 그래프(Graph)가 머신(Machine)에 할당되어 있다.   역자주) 완전 초보자의 이해를 돕기 위해 아래 동영을 만들어 보았다. <원문> https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-creating-macro.html

객체 타입들(Object Types)

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...

프리팹(Prefabs)에 머신(Machine) 추가하기

이미지
편집기내부에 생성된 임배드 그래프(Embed Graph) 프리팹 인스턴스(Prefab Instances)를 제외한 모든 타입의 그래프에 대해 완전하게 프리팹(Prefab)에서의 사용을 지원한다. 프리팹 인스턴스(Prefab Instance) Graph Embed 편집기에서 생성된 경우 O ! 런타임에 인스턴스화된 경우 O O   프리팹(Prefab)으로 임베드 그래프(Embed Graph)가 있는 머신(Machine)을 사용하면 프리팹 정의에서 편집한 내용이 자동으로 프리팹 인스턴스(Prefab Instances)로 전파된다.  이 때 비주얼  스크립팅은 인스펙터(Inspector)와 그래프 창에 경고 메시지를 표시한다. Embed 참고: 프리팹에 머신(Machine)을 추가할 때는 임배드(Embed) 대신 그래프(Graph)를 사용하십시오. 프리팹 오버라이드(Prefab Overrides) 비주얼 스크립팅은 Unity의 기본 직렬화(Serialization)를 사용하지 않는다. 중첩(Nesting), 확장성(Extensibility) 및 커버리지(Coverage)가 요구하는 안정성을 위해 사용자 지정 직렬화 엔진(Custom Serialization Engine)인   FullSerializer 를 사용한다.   참고: 인스펙터(Inspector) 라벨(Labels)과 값(Values)이 볼드(Bold)로 표시되면 프리팹(Prefab)은 오버라이드(Override)보다는 차별화(Differentiation)를 나타낸다.   예를 들어, 프리팹 인스턴스의 인스펙터 필드는 이 값을 오버라이드했더라도 프리팹 정의와 동일한 값을 갖는 경우에는 절대 볼드(Bold)로 표시되지 않는다.   역자주) 위 내용의 말이 어려워서 아래 영상을 제작해서 추가합니다. Embed Machine을 가지고 있는...

스크립트를 그룹화하여 관리하기

이미지
그룹은 작성한 그래프(유닛들의 집합)들을 조직화하여 관리할 수 있도록 하는 박스를 의미하며, 이는 비주얼 스크립트의 일부를 재사용할 수 있도록 하기도 합니다.   스크립트 그래프에서 그룹을 만드는 방법 Ctrl 키   또는 Mac에서   Cmd 를 누른 상태에서 그래프 주변 영역을 마우스로 선택한다. 그래프의 일부 유닛들이 포함되도록 마우스를 드래그한다. 각 그룹에 제목을 지정한다.   팁: 그룹에 의미 있는 제목을 제공하는 것이 좋다. 참고: 그룹의 헤더를 두 번 눌러 그룹의 모든 항목을 선택하십시오. 참고: 유니티 컨트롤 스킴(Unity Control Scheme)을 사용할 경우, Alt(Option) 키를 누른 채 마우스로 헤더(박스 위쪽)를 끌 경우 내용을 가만있고 박스만 움직일 수 있다.(역자주-기본적으로 그냥 마우스로 박스 헤더를 이동하면 박스 안의 모든 내용이 함께 움직임니다. 박스만 움직일 경우 Alt키를 함께 누르면 된다.)   그룹이 선택되어 있을 때 마우스 오른쪽 버튼을 누르고  Delete ( Section )를 하면 그룹 박스가 삭제된다. Group in a script graph 그래프 인스펙트(Graph Inspector)에서 그룹의 이름, 주석 그리고 색상을 변경할 수 있다.    그 코멘트(comment)는 인스펙터(Inspector)에서만 볼 수 있다.   역자주) 추가적인 이해를 위해 아래 이미지를 추가한다. Visual Scripting: organizing scripts in groups <원본> https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-groups.html