본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] 비쥬얼 스크립팅 (Visual Scripting) 맛보기

by 레오란다 2023. 4. 28.
반응형

이번 글에서는 유니티에서 제공하는 비쥬얼 스크립팅의 간단한 사용법에 대해 알아보도록 하겠습니다.

유니티 공식 홈페이지에서 정의한 비쥬얼 스크립팅이란 다음과 같습니다. 

 

"비주얼 스크립팅은 코드를 처음부터 작성할 필요 없이 그래픽을 기반으로 Unity의 오브젝트와 동작을 조작하는 방식입니다. 비주얼 노드를 함께 연결하여 로직을 구현하고, 아티스트와 디자이너, 프로그래머가 간단하게 게임플레이와 인터랙티브 시스템을 만들 수 있게 합니다."

(https://unity.com/kr/features/unity-visual-scripting#create-scripting-logic-visually)

 

여기서는 간단히 큐브를 만들고 큐브의 회전을 Time.deltaTime 값을 곱하여 수행하는 것을 비쥬얼 스크립트로 작성해 보도록 하겠습니다.

 

유니티 2021 버전 부터는 기본적으로 비쥬얼 스크립팅 기능이 탑재되어 있습니다. 

 

 

비쥬얼 스크립트를 위한 컴포넌트 추가

1. 우선 큐브를 추가하고 다음과 같이 [Add Component] 를 이용해 [Visual Scripting > Script Machine] 을 추가해 줍니다.

 

Add Script Machine
[Add Component > Visual Scripting > Script Machine]

 

2. Script Machine 컴폰넌트에 있는 [New] 버튼을 클릭하고 Script Graph Asset 의 이름을 입력하고 저장합니다. 저는 편의상 CubeSG 라고 하였습니다.

 

Create new script graph asset
새로운 Script Graph Asset 생성

 

3. Script Machine 컴포넌트에 있는 [Edit Graph] 버튼을 클릭하면 Script Graph의 작성을 시작할 수 있습니다.

 

 

Script Graph 작성

Script Graph 작성은 아래와 같은 별도의 창에서 진행하게 됩니다.

 

Script Graph Window

 

우선 각가 OnStart 와 OnUpdate 가 보입니다. 이것은 각각 C# 스크립트에서 Start() 와 Update() 에 해당합니다.

 

추가

이제 회전을 위해 Rotate 상태를 추가하도록 하겠습니다. Rotate 는 다음과 같이 우측의 빈곳에서 마우스 우클릭하면 나타나는 팝업창에서 붉은색 테두리 부분에 "tranform.rotate" 라고 입력하시면 검색됩니다.

 

선택하면 transform.Rotate 상태가 추가되고 여기엔 x, y, z 값 설정과 transition in / out 고리인 ▷이 있습니다. 

아래와 같이 OnUpdate 에 있는 transition out 에서 transform Rotate 에 있는 transition in 으로 마우스를 이용해 연결해 주시면 됩니다. 연결 취소는 연결된 삼각형 위에서 마우스 우클릭을 해주면 됩니다. 

 

연결
연결하기

 

위와 같이 하면 OnUpdate 의 loop 에서 transform.Rotate 를 수행한다는 의미가 됩니다.

 

Time.deltaTime 추가

 

이제 위와같이 빈 공간에서 다시 우클릭을하고 "Time.delta" 를 입력해 검색을 해줍니다. 그리고 Time: Get Delta Time 을 클릭해 추가합니다. 그리고 다음과 같이 Time.deltaTime 의 값과 특정 값을 곱해주는 상태를 추가하고 결과를 tranform.Rotate의 x, y, z 에 연결해 주면 됩니다.

 

Time.deltaTime 에 10 을 곱하고 x, y, z 에 연결
Time.deltaTime 에 10 을 곱하고 x, y, z 에 연결

 

이제 실행을 하면 다음과 같이 큐브가 회전하는 모습을 볼 수 있습니다. 또, Script Graph 에서 어떠한 흐름으로 스크립트가 수행되는지 보여줍니다.

 

결과 화면
결과 화면

 

위의 비쥬얼 스크립트를 C# 코드로 작성하면 다음과 같습니다.

 

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

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

   }

   // Update is called once per frame
   void Update()
   {
      var v = Time.deltaTime * 10f;
      transform.Rotate(v, v, v);
   }
}

 

 

반응형

댓글