비주얼 스크립팅을 처음 공부할 때 그리고 매뉴얼을 한글로 작성하면서 매우 헷갈리게 만드는 단어가 그래프, Graph이다. 비주얼 스크립팅이라는 말속에는 그래프라는 이미지의 의미가 담겨져 있는데, 처음 시작할 때 단순히 그 그래프 라는 이미지의 의미만 떠올리며 메뉴얼이나 설명서를 읽다 보면 무슨 말인지 이해하기 어렵게 되는 경우들이 있다. 따라서 기술적 개념이나 메뉴의 명칭에 익숙하지 않은 완전 초보자들을 위해 정리해 본다.

 

1. 코딩을 하다, 작업을 하다. 그래프를 그리다.

비주얼 스크립팅은 C#, PHP, Python, JAVA, LISP 같이 프로그래밍 언어 코드를 사용하지 않는다. 여기서 코딩을 한다는 것은 그래픽컬한 유닛(혹은 노드)들을 배치하고 논리적으로 연결하여 마치 그래프를 그려나가듯 작업해서 어떤 기능을 동작하도록 하는 것을 의미한다. 즉, "그래프(Graph)를 작성한다", "그래프 작업을 한다"라고 말하면 코딩을 한다는 의미가 된다.

 

2. 작업한 결과물을 지칭한 그래프, Graph

앞의 맥락에서 그래프 작업을 통해 그려진 작업 결과물 또한 그래프(Graph)라고 지칭하고 있다. "그래프 내부를 보면" 혹은 "그래프가 동작한다." 같은 말이 뜻하는 의미가 된다.

 

3. Script Graph / State Graph -- 스크립트의 형태에 따른 구분을 위한 그래프

   게임 오브젝트에 Add Component를 해서 Machine을 검색하면 위와 같이 두 개의 Machine이 있다.

   Script Graph는 Script Machine에서 작성한 그래프(Graph)를 의미하고, State Graph는 State Machine에서 작성한 그래프(Graph)를 의미한다. 참고로 여기서 알아야 할 것은 State Machine안에 있는 State Graph는 많은 Script Graph들로 작성이 된다는 것이다. 즉, State Graph는 상태(State)의 의미나 기능을 정의한 그래프(Graph)들인데 그 그래프들 내부는 Script Graph들로 채워져 있다는 것이다. 따라서 우리가 작업하는 Graph는 99%가 Script Graph인 것이다. 하지만 State Graph의 활용 역시 매우 중요하다.

 

4. Embed / Graph -- Graph가 존재하는 방식에서 Graph 에셋 파일을 참조한다는 의미로 활용

   Embed는 작업한 그래프들이 Machine 컴포넌트 안에 내장이 되어진다는 의미이다. 즉, Transform에 좌표나 스케일이 있는 것 처럼 Machine 컴포넌트 안에 작업한 그래프들이 들어 있게 된다. 따라서 Machine 컴포넌트를 지우면 모두 날아간다.

   Graph는 작업한 그래프들이 그래프 에셋 파일로 저장이 되어 있고 그 저장된 파일을 링크하여 참조해서 사용한다는 의미이다. Machine 컴포넌트가 삭제되어도 그래프 에셋 파일은 삭제되지 않는다.

  이런 의미를 생각하면 Embed Graph 즉, 내장된 그래프, Graph Graph 그래프 에셋파일을 참조하는 그래프라는 말이 만들어져야 하는데 매우 어색해서 Embed 그리고 Graph 라고만 사용한다. 그래서 헷갈린다. 설명 맥락에 따라 그래프라는 단어를 이해해야 한다.

 

 

5. Graph Variable -- 지역 변수 개념으로써 그래프

  그래프 편집창의 블랙보드(Blackboard)를 보면 변수탭들이 있다. 제일 왼쪽(앞쪽)에 Graph 탭이 있다. 그래프 변수(Graph Variable)를 의미한다. 현재 그래프(Graph)에만 그 변수가 생존하기 때문에 명칭을 그렇게 붙인 듯 하다. 즉, 다른 그래프에서는 사용할 수 없다. 

 

6. 유니티의 메뉴 명칭

   1> Edit Graph : 링크된(혹은 선택된) 그래프를 편집할 수 있도록 오픈한다.

   2> Graph Inspector : 선택한 유닛들에 대한 정보와 편집할 수 있는 요소들이 나타난다.

   3> Script Graph : 그래프 편집창이다. 작업 그래프가 Script Graph라는 것을 알 수 있다. State Graph라면 State Graph라고 표시된다.

   4> Graph  : Graph Variabe 탭

   5> Visual Scripting Graph : 위의 이미지에 보이는 편집창을 띄운다. Machine 컴포넌트가 있는 경우 대부분 자동으로 오픈된다. 혹은 Edit Graph를 클릭하면 된다. 따라서 위의 메뉴를 찾아갈 필요는 없다.

   6> Fuzzy Finde > Graph : 퍼지 파인더 안에 Graph 그룹은 작업자가 생성해 놓은 Graph 에셋 파일들이 자동으로 들어가 있다. Super Unit 같은 경우 퍼지 파인더에서 찾아 넣어도 편리하다.

 

역자 주) 빌드 세팅 관련 사항인데 최신 빌드 방식들과 다를게 없습니다. 빌드에 대한 이해가 없는 초보자라면 굳이 지금 이해할 필요 없습니다. 

 

비주얼 스크립팅은 iOS, Android, WebGL, WSA 및 콘솔과 같은 ahead-of-time(AOT) 플랫폼을 포함한 모든 Unity 빌드 타겟을 지원합니다.

유니버설 윈도우 플랫폼

유니버설 윈도우즈 플랫폼(UWP, 이전에는 Windows Store Apps, WSA 또는 Metro로 알려져 있음)을 구축할 때 비주얼 스크립팅은 IL2CPP 스크립팅 백엔드를 사용해야 한다.

플랫폼을 변경하려면 Edit > Project Settings > Player로 이동하고 기타 설정(Other Settings) 패널의 Configuration 하위 섹션을 선택한다. 드롭 다운에서 올바른 값을 선택한다.

 

 

<원문>

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

역자주) 본 내용은 git 사용시 .gitignore 파일에 관한 내용입니다. 지금 이해할 필요 없습니다. 단지, 비주얼 스크립팅 파일들을 git 등을 이용해 공개적으로 타인들에게 공유할 경우 위법의 소지가 있으니 공개하지 말라는게 핵심이네요.

 

비주얼 스크립팅 플러그인 파일은 버전 제어에서 제외되어야 한다. 이것은 커밋의 크기를 최소화하고 더 깨끗한 커밋을 만든다.

참고: 프로젝트에 공용 저장소를 사용하는 경우 아래 지침에 따라 비주얼 스크립팅 파일을 제외해야 한다. 그렇지 않으면 온라인으로 비주얼 스크립팅을 불법적으로 재배포하게 되고 유니티 에셋 스토어 EULA와 ToS를 위반하는 것이된다.

파일 제외하기

버전 컨트롤 솔루션에서 파일을 제외하려면 제외할 파일과 폴더를 지정하는 파일을 포함하는 것이 표준 접근방식이다.

이 파일은 에셋 폴더 상위의 프로젝트 루트 폴더에 위치해 있어야 한다.

  • Git의 경우 이 파일의 이름을 .gitignore로 지정한다.
  • Unity Collab의 경우 이 파일의 이름을 .collabignore로 지정한다.
  • Subversion의 경우 수동으로 파일들을 제외시킨다.

파일 템플릿 무시

파일 제외 템플릿(ignore file template)은 프로젝트 설정과 변수를 유지하면서 모든 주요 비주얼 스크립팅 파일을 제외시킬 수 있다. 이는 버전 컨트롤이 되어서는 안되는 파일들에 대한 표준 Unity 무시 지시 정책을 포함하고 있다.

임시 섹션(transient section)은 on 또는 off 상태일 수 있는데, 확실하지 않은 경우 섹션을 활성화한 상태로 놔둔다.

## Bolt

# Optionally exclude these transient (generated) files, 
# because they can be easily re-generated by the plugin 

Assets/Bolt.Generated/VisualScripting.Flow/UnitOptions.db
Assets/Bolt.Generated/VisualScripting.Flow/UnitOptions.db.meta
Assets/Bolt.Generated/VisualScripting.Core/Property Providers
Assets/Bolt.Generated/VisualScripting.Core/Property Providers.meta 

## Unity 
# From: https://github.com/github/gitignore/blob/master/Unity.gitignore 

[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
Assets/AssetStoreTools* 

# Visual Studio cache directory 
.vs/ 
# Autogenerated VS/MD/Consulo solution and project files 
ExportedObj/
.consulo/ 
*.csproj 
*.unityproj 
*.sln 
*.suo 
*.tmp 
*.user 
*.userprefs 
*.pidb 
*.booproj 
*.svd 
*.pdb 
*.opendb 

# Unity3D generated meta files 
*.pidb.meta 
*.pdb.meta 

# Unity3D Generated File On Crash Reports 
sysinfo.txt 

# Builds 
*.apk 
*.unitypackage

 

무시된 파일 제거하기

무시되어야 하는 파일이 이전에 커밋된 경우 다음 Git 명령을 사용하여 해당 파일을 제거할 수 있다.

git rm -r --cached . 
git add .
git commit -am "Remove ignored files"

참고: 파일을 공용 저장소(repository)에 푸시(push)한 경우 이 방법은 커밋 기록(commit history)에서 삭제되지 않는다. 비주얼 스크립팅 파일을 불법적으로 재배포하고 있는 경우. 저장소(repository)를 비공개로 설정하거나 비주얼 스크립팅 파일을 포함하지 않는 새 트리를 사용하여 새로운 저장로(repository)를 시작해야 한다.

 

<원문>

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

Unity는 백업을 자주하고 데이터 사본을 별도의 저장 공간에 저장해 둘 것을 권장한다. 그래야 기본 데이터 손실이나 손상으로부터 보호할 수 있다.

참고: 비주얼 스크립팅을 업데이트하기 전에 항상 데이터를 백업한다.

 

비주얼 스크립팅을 위한 업데이트 워크 플로우는 다음과 같다.

  1. 프로젝트를 백업한다.
  2. 패키지 관리자(Package Manager)를 열고 업데이트 버튼을 누른다.

프로젝트 백업

그래프(Graph)와 비주얼 스크립팅 에셋은 자동으로 백업된다.

프로젝트를 수동으로 백업하는 것은 다음 메뉴에서 원클릭으로 가능하다.

메뉴에서 "Edit > Project Settings > Visual Scripting > Create Backup"을 선택한 다음 OK를 누른다.

"Edit> Project Settings > Visual Scripting > Restore Backup"을 통해 백업 폴더를 연다.

참고: 버전 컨트롤(Version Control)을 사용하지 않는 경우 백업을 자주 수행하는 것이 좋다.

참고: Unity는 Unity Cooperation, Git 또는 Subversion과 같은 버전 제어 시스템(VCS)을 사용할 것을 권장한다.

 

<원본>

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

역자 주) 아래 글을 읽고 "여기"글에 있는 동영상을 보면 쉽게 이해가 갑니다.

 

반복된 작업을 빠르게 하기 위해 창 레이아웃(에디터 구성)과 바로 가기 키를 설정할 수 있다. 이 글에서는 이러한 바로 가기뿐만 아니라 창 설정에 대한 개요를 제공한다. 키보드 단축키를 사용하여 많은 비주얼 스크립팅 기능을 바로 실행할 수 있다. 비주얼 스크립팅 에디터는 3개의 메인 창이 있는데 "Window > Visual Scripting"에서 확인할 수 있다.

  • Graph(그래프) : 메인 그래프 에디터.
  • Graph Inspector(그래프 인스펙터) : 유닛과 기타 그래프 요소의 세부 정보를 확인하고 설정할 수 있는 인스펙터.
  • Blackboard(블랙 보드) : 유닛의 입력 및 출력 포트를 편집한다. 또한 변수들을 정의하고 편집할 수 있다.

팁: 윈도우들을 배치하는 레이아웃 순서는 선호하는 방식으로 하면되지만, 다음을 고려하는 것이 좋다.

  • Graph Window(그래프 창)와 씬(scene) 뷰는 동일한 공간에 배치한다.
  • Graph Inspector창은 Unity Inspector 창이 다른 창들의 옆에 독립적으로 있는 것처럼 배치한다.

역자 주) 위의 팁을 참고하면 아래처럼 하라는 것인데, 모니터 2개의 경우 Graph Window를 별도 창에 놓거나 Shit+Space Bar로 전체 화면으로 하는게 편리합니다.

그래프 창 최대화

전체 화면을 차지하도록 그래프 창을 최대화할 수 있다. 이렇게 하면 Graph Inspector(그래프 인스펙터)와 변수 탭이 사이드에 잘 나타나게 된다. 최대화하면 복잡한 그래프를 보다 보기 쉽게 시각화할 수 있다. 최대화하는 방법에는 다음 세 가지가 있다.

  • 마우스를 Graph Window(그래프 윈도우) 위에 놓고 Shift+Space를 클릭한다. 
  • Graph Window 배경을 마우스로 더블 클릭한다.
  • 도구 모음에서 최대화(Full Screen)를 선택한다.

사이드바의 레이아웃 단추를 사용하여 최대화된 뷰포트 주변의 각 패널들을 재정렬하거나 이동할 수 있다.

 

참고: 듀얼 모니터를 사용하는 경우 두 번째 모니터에서 비주얼 스크립팅 작업을 진행하는 것이 편리하다. 이렇게 하면 그래프 편집 공간이 더 넓어지고 유니티 레이아웃이 그대로 유지된다. 전체 편집화면에서 사이드 바 윈도우(Graph Window, Blackboard)는 자동적으로 필요한 크기를 먼저 확보하도록 되어있다.

그래프 창

그래프를 선택하면 도구 모음이 그래프 창에 표시된다.

토글/이동/확대축소:

그래프 인스펙터를 닫거나 열기다. 블랙보드를 닫거나 열기한다. 그래프 인스펙터, 블랙보드를 화면의 왼쪽 혹은 오른쪽으로 이동시킨다. (참고-위 이미지에서는 보이지 않음) 그래프 윈도우(그래프 편집창)을 확대하거나 축소한다.

 

  • Relationships 옵션: 유닛의 내부 연결을 표시한다(스크립트 그래프에만 해당)
  • Value 옵션: 비주얼 스크립팅이 값을 예측하여 그래프의 연결선에 그 값을 표시한다(스크립트 그래프에만 해당).

Carry 옵션이 토글되면 현재 선택 영역의 하위 유닛들이 함께 움직인다. 이것은 각 유닛을 수동으로 선택하지 않고 그래프의 많은 부분을 한 꺼번에 이동 및 배치하는데 유용하다.

Overview(개요) 버튼은 Graph Window 화면내에 작업된 전체 Graph가 모두 보여지도록 확대 또는 축소된다.

그래프 윈도우에서 두 요소(또는 그 이상)를 선택하면 정렬(Align) 및 분배(Distribute) 드롭다운 메뉴가 활성화되는데 이 메뉴를 통해 자동 레이아웃 작업을 할 수 있다.

바로 가기 및 키 바인딩

그래프 창을 이동 및 확대/축소하는 방법에는 두 가지 제어 체계가 있다. "Edit > Preferences > Visual Scripting"에서 제어 체계를 설정할 수 있다. 기본 설정은 언리얼(Unreal)이다.

* Unreal : 마우스 휠 클릭 - 화면 좌우상하 이동 / 마우스 휠 회전 - 화면 확대 또는 축소

* Unity: 마우스 휠 클릭 - 화면 좌우상하 이동 / 마우스 휠 회전 - 상하이동 (여기서 화면 획대 축소는 Ctrl + 휠 회전)

 

참고: 트랙패드가 있고 두 손가락으로 그래프를 탐색하려면 해당 설정을 Unity로 변경하면 된다.

 

키 바인딩은 다음과 같다.

Action Unity Control Scheme
Pan 마우스 가운데 버튼
Zoom Ctrl/Cmd + 스크롤 휠
Select 마우스 왼쪽 버튼 끌기
Select All Ctrl/Cmd + A
Context Menu 마우스 오른쪽 버튼
Ctrl+클릭(Mac)
Ctrl/Cmd + E
Create Group Ctrl/Cmd + 왼쪽 마우스 끌기 버튼
Copy Ctrl/Cmd + C
Paste Ctrl/Cmd + V
Cut Ctrl/Cmd + X
Duplicate Ctrl/Cmd + D
Delete Del
Maximize Shift + Space
마우스 더블클릭

 

<원문>

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

'VS 처음' 카테고리의 다른 글

버전 컨트롤(Version Control)  (0) 2021.08.05
비주얼 스크립팅 업데이트  (0) 2021.08.05
비주얼 스크립팅의 구성 옵션  (0) 2021.08.03
비주얼 스크립팅 소개  (0) 2021.08.03
VS Editor 소개  (0) 2021.07.30

비주얼 스크립팅에는 두 가지 구성 옵션을 사용할 수 있다. "Edit(편집) > 프로젝트 설정(Project Settings) > 비주얼 스크립팅(Visual Scripting)"을 통해 다음의 두 가지 옵션에 구성 요소들을 업데이트(추가)할 수 있다.

  * 타입 옵션(Type Options): 변수와 유닛들의 타입(type) 옵션. MonoBehaviour type은 기본적으로 포함되어져 있다.
  * 노드 라이브러리(Node Library): 유닛으로 사용하고자 하는 어셈블리(assemblies) 옵션. 기본적으로 모든 프로젝트와 유니티 어셈블리가 포함되어져 있다. 새 어셈블리를 추가하려면 "Add(+)"를 통해 추가한다.

 

각 옵션에는 그것이 무엇을 하는지 설명하는 툴팁이 있다. 옵션의 기능을 잘 모를 경우 기본값을 그대로 두고 나중에 변경할 수 있다.

참고: 일부 옵션은 재시작(restart)이 필요할 수 있다. 따라서 구성 변경 사항이 적용되지 않은 경우 편집기를 다시 시작한다.

 

역자 주) Type Options과 Node Library는 아직 이해하기 어렵습니다. 추후 숙련도가 올라가고 더 많은 기능의 사용이 필요해지게 될경우 자연스럽게 이해할 수 있게 됩니다. 

 

<원문>

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

'VS 처음' 카테고리의 다른 글

비주얼 스크립팅 업데이트  (0) 2021.08.05
비주얼 스크립팅 에디터 및 단축키 설정  (0) 2021.08.04
비주얼 스크립팅 소개  (0) 2021.08.03
VS Editor 소개  (0) 2021.07.30
Visual Script와 Version Control 충돌문제  (0) 2021.07.23

비주얼 스크립팅은 코드를 쓰지 않고도 게임이나 응용 프로그램에 대한 로직을 만들 수 있게 해준다. 비주얼 스크립팅은 프로그래머뿐 아니라 기획자와 그래픽 디자이너 모두가 최종 로직을 설계하거나 프로토타입을 신속하게 만들수 있도록 하는 시각적 단위(비주얼 유닛, Visual Unit) 기반 그래프(Graph)들로 이루어져 있다. 비주얼 스크립팅은 프로그래머가 보다 고급 작업을 위해 사용하거나 다른 팀원이 사용할 수 있는 사용자 지정 유닛(커스텀 유닛, custom unit)을 만들수 있는 API도 제공한다.

비주얼 스크립팅은 함수, 연산자 또는 변수들을 그래픽 요소(graphical element)로 표현하고,  에지(여기서는 유닛들을 연결하는 선)를 사용하여 포트에 장치를 연결하는 방식의 개념에 기초하고 있다. 즉, 코드를 한 줄씩 써야 하는 대신, 모든 것을 시각적으로 작성한다.

설치(Installation)
2021.1 버전부터는 기본 패키지로 비주얼 스크립팅이 설치된다. 패키지 관리자에서 확인할 수 있다.
2019년형 LTS, 2020년형 LTS 등 이전 버전의 Unity는 Unity Asset Store를 통해 설치해야 한다.

비주얼 스크립팅 환경설정(Configuring visual scripting)
필요에 따라 "Edit > project setting"과 "Edit > preferences"에서 기본 설정을 변경할 수 있습니다.

화면 레이아웃 및 바로 가기 사용(Using Windows and shortcuts)
화면 레이아웃을 설정하고 바로 가기 키를 설정할 수도 있습니다.

비주얼 스크립팅 업데이트(Updating visual scripting)
비주얼 스크립팅 업데이트 하는 방법은 이곳에서 확인하세요.

시스템 요구 사항(System Requirements)
비주얼 스크립팅은 추가적인 다른 프로그램(external dependency)을 필요로 하지 않는다.

 

<원본>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/index.html

Visual Script Edior에 대해 소개해 드리겠습니다.

VS Editor는 Script를 작성하는 인터페이스 도구입니다.

 

아래 동영상을 단순 시청하시면 직관적으로 이해하실 수 있으리라 판단됩니다.

참고)

Full Screen 단축키 => Shit + Space Bar   (VS Editor가 선택된 상태일 때)

Unit 복사 => Ctrl + D (유니티 기본 단축키들은 대부분 동일하게 동작합니다.)

Unit 연결 => 삼각형을 마우스 좌클릭해서 연결합니다.

Unit 끊기 => 흰색 선이 연결된 삼각형 부위에 마우스 우클릭하면 연결 선이 해제됩니다.

 

Relations: 다른 글에서 따로 설명드리겠습니다.

Values: 활성화되어 있으면 실행중에 데이터의 흐름을 볼 수 있습니다. 즉, True, False, 200, Object Name 같은 데이터들이 보여집니다.

Carry: 활성화되어 있다면 연결된 하위 Unit들을 모두 함께 이동시킬 수 있습니다. 익숙해 지기 전까지지 크게 이용할 일이 없네요. 그냥 마우스로 하나씩 이동하거나 필요한 만큼 잡아서 이동하면 됩니다.

Dim: 활성화시 연결이 끊겨있거나 실행되지 않는 Unit들은 희미하게 보이게됩니다. 따라서 항상 활성화 해놓는게 좋습니다.

Overview: 클릭하면 현재 작성중인 Visual Scripting을 전체적으로 볼수 있도록 자동으로 화면크기가 조정됩니다.

참고> Unity 2022  버전 이후로는 나타나지 않는 문제입니다.

 

My Unity Version: [2021.1.10f1]

현재 2021 Unity Version에서 Visual Script를 실행하면 다음과 같은 에러가 발생됩니다.

--------- Error Message ---------

Failed to fetch inherited attributes on Unity.Plastic.Antlr3.Runtime.Tree.CommonTree.

System.TypeLoadException: Could not load type Antlr.Runtime.Tree.AntlrRuntime_BaseTreeDebugView while decoding custom attribute: (null)

  at (wrapper managed-to-native) System.MonoCustomAttrs.GetCustomAttributesInternal(System.Reflection.ICustomAttributeProvider,System.Type,bool)

  at System.MonoCustomAttrs.GetCustomAttributesBase (System.Reflection.ICustomAttributeProvider obj, System.Type attributeType, System.Boolean inheritedOnly) [0x00013] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.MonoCustomAttrs.GetCustomAttributes (System.Reflection.ICustomAttributeProvider obj, System.Type attributeType, System.Boolean inherit) [0x002b3] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.RuntimeType.GetCustomAttributes (System.Type attributeType, System.Boolean inherit) [0x00038] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at System.Attribute.GetCustomAttributes (System.Reflection.MemberInfo element, System.Boolean inherit) [0x00052] in <695d1cc93cca45069c528c15c9fdd749>:0 

  at Unity.VisualScripting.AttributeUtility+AttributeCache..ctor (System.Reflection.MemberInfo element) [0x0002c] in D:\ProjectsDev\001 Purple Ocean Git\8 Visual Script Tutorial\Visual Script Tutorial\Library\PackageCache\com.unity.visualscripting@1.6.1\Runtime\VisualScripting.Core\Reflection\AttributeUtility.cs:56 

UnityEngine.Debug:LogWarning (object)

Unity.VisualScripting.AttributeUtility/AttributeCache:.ctor (System.Reflection.MemberInfo) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:66)

Unity.VisualScripting.AttributeUtility:GetAttributeCache (System.Reflection.MemberInfo) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:266)

Unity.VisualScripting.AttributeUtility:HasAttribute<Unity.VisualScripting.SerializedPropertyProviderAttribute> (System.Reflection.MemberInfo,bool) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Runtime/VisualScripting.Core/Reflection/AttributeUtility.cs:337)

Unity.VisualScripting.SingleDecoratorProvider`3/<>c<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:<MapAttributeTypes>b__9_0 (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:57)

System.Linq.Enumerable/WhereEnumerableIterator`1<System.Type>:MoveNext ()

Unity.VisualScripting.SingleDecoratorProvider`3<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:MapAttributeTypes () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:57)

Unity.VisualScripting.SingleDecoratorProvider`3<System.Type, Unity.VisualScripting.ISerializedPropertyProvider, Unity.VisualScripting.SerializedPropertyProviderAttribute>:.ctor () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:23)

Unity.VisualScripting.SerializedPropertyProviderProvider:.ctor ()

Unity.VisualScripting.SerializedPropertyProviderProvider:.cctor () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/SerializedProperties/SerializedPropertyProviderProvider.cs:37)

Unity.VisualScripting.InspectorProvider:CustomPropertyDrawerInspector (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:148)

Unity.VisualScripting.InspectorProvider:ResolveDecoratorType (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:42)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:TryGetDecoratorType (System.Type,System.Type&) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:85)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:GetDecoratorType (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:104)

Unity.VisualScripting.InspectorProvider:HasInspector (System.Type) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:158)

Unity.VisualScripting.InspectorProvider:GetDecoratedType (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:31)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:CreateDecorator (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:42)

Unity.VisualScripting.SingleDecoratorProvider`3<Unity.VisualScripting.Metadata, Unity.VisualScripting.Inspector, Unity.VisualScripting.InspectorAttribute>:GetDecorator (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Decorators/SingleDecoratorProvider.cs:251)

Unity.VisualScripting.XInspectorProvider:Inspector (Unity.VisualScripting.Metadata) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/InspectorProvider.cs:174)

Unity.VisualScripting.LudiqGUI:GetInspectorHeight (Unity.VisualScripting.Inspector,Unity.VisualScripting.Metadata,single,UnityEngine.GUIContent) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Interface/LudiqGUI.cs:77)

Unity.VisualScripting.VariablesEditor:GetHeight (single,UnityEngine.GUIContent) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Variables/VariablesEditor.cs:14)

Unity.VisualScripting.Inspector:GetCachedHeight (single,UnityEngine.GUIContent,Unity.VisualScripting.Inspector) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:228)

Unity.VisualScripting.Inspector:GetLayoutPosition (UnityEngine.GUIContent,single,UnityEngine.RectOffset) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:317)

Unity.VisualScripting.Inspector:DrawLayout (UnityEngine.GUIContent,single,UnityEngine.RectOffset) (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Inspector.cs:322)

Unity.VisualScripting.LudiqRootObjectEditor/Individual:OnGUI () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/Root/LudiqRootObjectEditor.cs:52)

Unity.VisualScripting.OptimizedEditor`1<Unity.VisualScripting.LudiqRootObjectEditor/Individual>:OnInspectorGUI () (at Library/PackageCache/com.unity.visualscripting@1.6.1/Editor/VisualScripting.Core/Inspection/OptimizedEditor.cs:31)

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

 

Machine 추가시 Versiion Control과의 충돌 경고

 

이는 Unity에 기본적으로 설치된 "Version Control" 기능과 충돌이 나기 때문입니다.

이를 해결하기 위해서는 Version Control을 제거(Remove)하면 됩니다.

Version Control은 Unity "Collaborate" 기능과 "Plastic SCM"을 이용하는 것과 관련이 됩니다. 위 기능을 이미 아시는 분이라면 스스로 판단하시면 되지만 그렇지 않다면 사용할 일이 없을 듯 합니다. 게임 또는 앱을 만드는 유니티 본연의 기능과는 무관하고 팀작업을하거나 파일 관리를 지원하는 것인데 대부분 git이나 SVN을 사용할 가능성이 높고 개인 프로젝트라면 굳이 필요치 않습니다. 과감히 삭제하셔도 무관합니다.

 

"Unity > Window > Package Manager"에서 Version Control을 찾아 우측 하단의 "Remove"버튼을 눌러 제거해주세요.

 

 

유니티가 업데이트되면서 언젠가는 위 문제가 해결이 되지 않을까 싶습니다.

 

 <간략소개>

이 글을 읽고 있다면 이미 비주얼 스크립트가 무엇인지 어느 정도는 알고 있으리라 판단이 됩니다. 따라서 복잡한 설명은 생략하고 한 가지만 말씀드린다면 어려운 코딩작업이 없이도 PC, 모바일(ANDROID, APPLE), WebGL 등 다양한 플랫폼의 앱이나 게임을 만드는게 가능하다는 것입니다. 그런데 중요한 것은 어느 수준의 어플리케이션을 개발할 수 있는가인데 적어도 이글에 관심이 있는 분이 상상하시는 것 정도는 모두 개발 가능하다고 감히 말씀드릴 수 있습니다.

유니티 비주얼 스크립트 혹은 볼트(Bolt) 스크립트에 대한 탄생 배경이나 지나온 과정들에 대한 이야기는 네이버 혹은 구글 검색을 통해 확인해 보시기 바랍니다.

 

<유니티 설치하기>

Visual Script를 사용하기 위해서는 유니티를 먼저 설치해야 합니다. 파워풀한 유니티 엔진을 코딩없이 사용할 수 있다는 것이 매우 놀라울 따름입니다.

유니티는 2021년도 최신버전을 설치해야합니다.

이전 버전들과는 달리 Visual Script가 기본으로 탑재되어 있기 때문에 별도의 Visual Script Package를 설치할 필요없이 바로 사용이 가능합니다.

 

가. 회원가입하기

     https://unity.com/kr 

     아직 유지티에 회원가입이 되어 있지않다면 위 사이트를 방문해서 먼저 가입해주세요!

 

나. 유니티 허브(Unity Hub) 설치하기

 ㄱ) 다운로드 링크: https://unity3d.com/get-unity/download

 ㄴ) Download Unity Hub를 클릭하여 설치 파일을 다운로드하고 설치하세요!

 

 ㄷ) 유니티 허브 실행과 로그인

      유니티 허브를 실행하고 유니티에 가입한 ID로 로그인을 합니다.

 

 

 ㄹ) 라이선스 등록



다. 유니티 설치하기

     참고) ②번에서는 [정식 릴리스 > Unity 2021 version]이면서 최신 버전을 설치하면 됩니다.

             만약, 권장릴리스(2022년 이후 부터)에 Unity 2021 version이 있다면 권장 릴리스에 있는 2021버전 설치를 하면면 됩니다.

 

    참고) ④번에서 Visual Studio Community는 Visual Script의 목적상 필수는 아니겠으나 그래도 설치를 권장합니다. 그리고 ⑤번 이후부터는 메시지가 나오면 확인 버튼만 누르면서 지나가면 됩니다.

 

<처음보는 비주얼 스크립트>

 가. 유니티 프로젝트 생성하기

    참고) ⑤번은 원하는 폴더를 선택하면 됩니다.아니면 기본 폴더에 생성하세요!

            추후 삭제를 위해 생성 위치를 잘 기억해 주세요!


나. 무작정 따라해보는 Visual Script

     참고) 유니티에 익숙하신 분이라면 아주 잠깐만에 끝나는 작업입니다.

 

 

 

 

Script Machine 파일 생성하기

 

 

Fuzzy Finder(퍼지 파인더)

 

 

 

 

 

    Graph 하나를 추가해서 3D 큐브가 회전하는 것을 구현하였습니다.

 

 

참고) 바로 위에 보이는 마지막 이미지의 Visual Script는 아래의 C#코드를 작성하여 Cube에 적용한 것과 동일합니다.

  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;


  public class CubeRotator : MonoBehaviour
  {
      // Start is called before the first frame update
      void Start()
      {
        
      }


      // Update is called once per frame
      void Update()
      {
          transform.Rotate(10, 10, 10);
      }
  }    

 

+ Recent posts