트랜지션(Transitions)은 비주얼 스크립팅이 활성 상태를 다른 상태로 전환하는 조건을 갖고 있는 상태간 연결점을 말한다.

트랜지션 편집하기

Script State와 마찬가지로 트랜지션은 Script Graph로 이루어져 있다.

위의 예에서는 새로운 상태로 전환할 수 없는 문제점을 가지고 있다. Event가 언제 발동해야 하는지를 지정하지 않았기  때문에 결고 상태가 전환할 수 없는 것이다. 따라서 목적 상태와 트랜지션 둘 다 흐리게 표시되고 있다. 트랜지션 유닛을 더블 클릭하거나 Edit Graph 버튼을 클릭하면 트랜지션 그래프가 나타난다. 기본적으로 다음과 같이 구성된다.

트리거 상태 전환 유닛(Trigger State Transition Unit)은 부모의 상태가 이 트랜지션 조건에 따라 상태가 변경되어야 한다는 것을 지시하는 특별한 유닛이다. 이벤트(events)나 조건(if)과 같은 유닛을 상태 전환 그래프에서 사용하면 된다.

 

예를 들어, "Player" tag가 붙은 게임 오브젝트가 적(Enemy)에게 감지(trigger)된다면 그 적은 추척 상태(chase state)로 전환된다고 할 때, 그 그래프는 다음과 같이 그려 질 수 있다.

끝으로 상위 상태 그래프에서 트랜지션의 라벨을 변경하고자 한다면, 해당 트랜지션을 선택하고 그래프 인스펙터에서 타이틀을 작성하면 된다.

 

상위 상태로 돌아가면 트랜지션은 다음과 같이 나타난다.(역자주-트랜지션 내부에 조건 스크립트를 작성하고 나오면 아이콘이 변경 된다.)

트랜지션에 직접 제목을 작성하지 않을 경우, 이벤트의 이름과 설명이 자동으로 지정된다.

 

트랜지션 라벨은 항상 보이는 것이 디폴트이다. 이것이 그래프에서 너무 많이 차지하여 변경하고 싶다면, Unity > Preferences > Visual Scripting > State Graphs > Transition Display에서 디스플레이 트리거를 변경한다.

 

 

셀프 트랜지션

자기 자신의 상태로 되돌아 오는 트랜지션은 매우 유용한 경우가 있다. State 노드 위에 마우스 오른쪽 버튼을 클릭하고  Make Self Transition을 선택한다.

예를 들어, 적 캐릭터가 3초 마다 랜덤하게 방향을 바꾸게 함으로써 순찰(patrol) 기능을 구현할 수 있다.

 

순찰 상태의 스크립트 그래프는 다음과 같다.(역자주 - 이동할 타겟의 x, z 좌표가 -30 ~ 30 사이에서 각각 랜덤하게 정해진다.)

셀프 트렌지션은 다음과 같다.(역자주 - 3마다 상태가 전환된다.)

상위 상태 그래프에서 보면 다음과 같이 나타난다.(역자주 - 3초마다 랜덤 x, y 좌료로 이동하게 된다)

Self Transition

다중 트랜지션 추가하기

상태 전환을 위해 추가할 수 있는 트랜지션의 수에는 제한이 없다. 그러나 트랜지션 사이에 우선순위 개념이 없기 때문에 적절한 트랜지션을 사용해야 한다.

 

<원문>

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

'VS 기본' 카테고리의 다른 글

스테이트 유닛  (0) 2021.08.23
트랜지션 만들기  (0) 2021.08.23
상태 그래프를 이용한 상태 전환 작업  (0) 2021.08.23
input manager 이용 사용자 입력 받기  (0) 2021.08.22
Input system 이용 사용자 입력 받기  (0) 2021.08.21

 Visual Script는 크게 두가지로 분류된다. 이를 설명하기 이전에 Visual Script는 멋지게 구조화된 스크립트 작성이 용이하고 재사용성의 개념이 잘되어 있다는 장점이 있지만 단점은 초보자들이 초기에 개념정립을 하기에 헷갈린다는 것이다.

나름 이해를 돕기위해 아래와 같은 도표를 작성해 보았다.

 

* Machine은 프로그래밍 파일(C#, C++ 등등) 하나로 간주 하면 좋을 듯 하다.

 

* Script Machine은 기본적인 프로그래밍 코드들이 작성되는 파일이다. 

 

* State Machine은 조금 상위 개념의 구조화된 코드들이 작성되는 파일로 생각하면 될 듯 하다. 게임을 예로 들었을 때, Player 캐릭터가 '기본 상태 일때', '공격을 받아서 1초간 무적일 상태' 그리고 '죽었을 때'에 따라서 다른 처리가 될텐데, 이렇게 Player 캐릭터의 상태를 정의하고 상태에 맞는 처리를 해줄 수 있도록 한다.

 

* 저장 방식(Embed, Graph)에서 Embed는 Script File들이 별도의 저장파일로존재하지 않고 Component에 삽입된다는 의미이다. 반면에 Graph는 별도의 Script File로 존재하고 Component가 이를 참조하는 것이다. 매우 국소적인 로컬 프로세스를 처리할 경우에 즉, 다른 Component에서 참조 혹은 재사용할 일이 전혀 없다면 Embed를 사용하면 된다. 또한 Embed는 특정 오브제트에 대해 커스터마이징(Customization)할 때도 유용하다. Embed와 Graph 상태는 서로 변경가능하다. 하지만 Embed에서 Graph로 변경할 경우 기존에 작성된 스크립트는 사라지게 된다. 반대로 Graph를 Embed로 변경할 경우 사라지지는 않는다.

 

 

* Unit : 아래 이미지에서 보이는 모든 그래프 하나하나가 Unit이다. Visual Script는 이러한 Unit들의 집합인 것이다. 마우스 우클릭을 하면 퍼지 파인더(Fuzzy Finder)창이 나타나며 이를 이용해 필요한 Unit을 선택하게 된다.

 

* Super Unit : 일련의 Unit들의 집합니다. 복합한 스크립트 구조를 단순화 시킬 수 있으며 Visual Script를 재사용할 수 있도록 해준다. 

 

* Super State Unit : State Machine에서 사용하는 State Unit들의 집합이다.

+ Recent posts