Events Unit

스크립팅 유닛은 Events를 수신한다. Events 유닛은 모든 스크립트의 시작점이며 그래프에서 특별히 녹색 유닛으로 제공되고 있다.

매우 다양한 Events 유닛이 있는데, 이는 최상위의 Event 카테고리를 선택하면 하위 카테고리들이 그룹핑되어져 있다(퍼지 파인더 > Events):


Events in Fuzzy Finder
Fuzzy Finder > Events

가장 기본이 되는 두 개의 Events로는 Start Event와 Update Event가 있다. 둘 다 Lifecycle에 들어 있다.
  • Start : 그래프(graph)나 이벤트 핸들러(evnet handler)가 최초 생성될 때 한 번 호출된다.
  • Update : 그래프(graph)나 이벤트 핸들러(event handler)가 실행중일 때 매 프레임마다 된다.

새로운 스크립트 머신(Script Machine)은 기본적으로 이러한 두 이벤트를 가지고 생성된다.


Start & Update Event
Start & Update Event



Inputs & Outputs


모든 Events에는 자신이 트리거 됐을 때 시작할 스크립트가 연결되는 1개의 트리거 제어 출력 포트가 있다. 

값(Value) Input은 이벤트가 트리거될 때 영향을 줄 수 있는데 이는 옵션 사항이다. 예를 들어, 어떤 이벤트는 어떤 오브젝트가 그 이벤트를 수신할 지를 결정하는 타겟 세팅(Target setting)을 갖는 경우가 있다. 대부분은 기본값으로 This가 설정되어져 있다. 

Events에서 출력되는 값들은 그 Events를 통과하는 인자들이다. 즉, 실제로 발생된 무엇인가 대한 더 많은 정보를 제공한다. 예를 들면, On Trigger Enter Event는 그 충돌에 관여된 다른 Collider 정보를 제공한다.


On Trigger Enter Event
On Trigger Enter Event Unit


 

Custom Events(사용자 지정 이벤트)


특수한 타입의 Event로 Custom Evnet가 있다. 이는 다른 그래프에서 Custom Event를 발동시킬 수 있도록 하는 커스텀 인자를 가지고 있다.

예를 들어, On Damage이라는 Custom Event를 만들어서 캐릭터의 HP를 깎는 기능을 구현하고자 한다. 따라서 그 Event는 손상의 정도를 나타내는 정수(integer) 인자(argument)를 가지고 있어야 한다. 이는 Custom Event 유닛을 생성하고 On Damage라는 이름을 부여하면 된다. 그리고 인자 수량(argument count, 아래 이미지에는 0이라고 되어 있음)을 1로 바꾸면 된다.


Custom Event Arguments
Custom Event Arguments

참고: Index는 zero-based이기(0부터 시작하기) 때문에, 첫 번째 인자(1을 입력하면)는 Arg. 0이라고 명칭이 붙는다.

 

다른 곳에서 이 Event를 트리거하려면 퍼지 파인더의 Trigger Custom Event 유닛을 사용하면 된다. 그 Event 이름은 대/소문자와 띄어 쓰기까지 정확히 똑같게 입력해야 한다.

예를 들어 Player에게 물리적인 충돌을 가하는 바위 기능을 하는 스크립트 머신(Script Machine)인 아래 그래프는 그 충력의 힘을 Damage 값으로 사용하고 있다.


On Collision Enter Event
On Collision Enter Event


참고: 바위와 부딪힌 Collider(충돌체)는 trigger의 대상이 된다. 즉, On Damage evnet는 그 Collider에 연계된 모든 머신(Machines)을 발동시킨다. Damage 손상은 해당 이벤트를 수신한 오브젝트의 HP에서 그 Damage 값을 빼면 된다.


Custom Event Arguments
Custom Event Arguments 사용예



사용자 정의 이벤트는 수신기(receiver)를 요구하지 않으며, 이를 다루는 수신자(Listener)가 없어도 에러가 생기지 않는다.



Animation Events(애니메이션 이벤트)


애니메이션 내에서 어떤 포인트에 도달했을 때 비주얼 스크립트를 발동시키고자 한다면 Animation Events를 이용하면 된다. 머신(machine)과 애니메이터(animator)가 있는 오브젝트를 선택한다. 그리고 그 애니메이션 윈도우에서 Animation Event를 추가한다.


Animation Event
Animation Event 만들기



해당 이벤트가 선택된 상태에서 인스펙터(Inspector)에 있는 함수 중 TriggerAnimationEvent를 선택한다.


Animation Event Trigger
Animation Event Trigger


인스펙터상에 있는 패러미터(parameter)를 조정한다.


Animation Event Parameter
Animation Event Parameter


비주을 스크립트에 Animation Event 유닛을 추가한다(Events > Animation).

이벤트에는 두 가지 타입이 있다.

  • global animation event
  • named animation event
global animation event & named animation event
global animation event & named animation event

두 가지의 차이점은 첫 번째 타입은 오브젝트에 있는 모든 애니메이션 이벤트를 받아 들이고 string 매개변수를 반환한다. 두 번째 타입의 트리거는 명시된 이름의 입력과 동일한 string 매개변수가 된다.

 


Unity Events(유니티 이벤트)


인스펙터(Inspector)에 설정된 이벤트들을 트리거하기 위해서는 Unity Events를 이용하면 된다. 이는 버튼(buttons)과 같은 GUI 컴포넌트들에 많이 있긴 하지만, 사용자 지정 스크립트로 생성할 수도 있다.


Unity Events
Unity Events


머신(machine)이 있는 오브젝트를 선택하여 설정하고 Trigger Unity Event 메소드를 선택한다. String 필드에 그래프에서 수신할 이벤트 이름을 입력하고, 그 그래프에 이름과 매칭되는 UnityEvent 유닛을 추가한다.

 

시스템이 있는 개체를 선택하여 이러한 개체를 구성하고 트리거 Unity 이벤트 방법을 선택하십시오. 문자열 필드에 수신할 이벤트 이름을 그래프에 입력하고 그래프에 일치하는 이름으로 UnityEvent 장치를 추가하십시오.


Unity Event Unit
Unity Event Unit


인수(arguments) 추가는 Unity 이벤트에서는 지원하지 않는다.

 


Events API


비주얼 스크립팅은 C# 스크립트에서 Trigger Custom Events를 사용할 수 있도록 간단한 API를 제공하고 있다.

 


< Usings API >


다음을 C# 스크립트에 추가하여 API에 엑세스한다.


using Unity.VisualScripting;


 

< Triggering API >


하나의 메소드(method)가 사용자 지정 이벤트를 트리거할 때 필요하다. 그리고 필요한 여러 개의 인수를 전달한다.


CustomEvent.Trigger(targetGameObject, argument1, argument2, ...)


다음은 사용자 지정 이벤트 유닛의 예이다:


Custom Event Unit
Custom Event Unit


아래 코드에서 트리거된다.


CustomEvent.Trigger(enemy, "Damage"30);

 


<원문>

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

댓글

이 블로그의 인기 게시물

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

EMACS - 검색 및 바꾸기

EMACS, CLISP, SLIME 설치