
서브 그래프
Tutorial
foundational
+10XP
30 mins
Unity Technologies
동일한 그래프를 사용하는 부분을 서브 그래프 기능을 활용하여 가독성과 함께 최적화도 챙길 수 있는 것을 활용하는 단계입니다.
1. 중복 그래프 확인하기
마지막으로 만든 그래프에서 낯이 익는 느낌이 들었을 텐데요, 플레이어의 회전에서 사용한 로직과 동일한 부분이 있었기 때문입니다.
서로 다른 그래프에서 동일한 구조의 노드 구조를 종종 만나게 됩니다.
로직을 만들다보면 이렇게 중복되는 부분이 발생할 수 있는데 유니티에서는 이런 부분이 자주 발생하면 성능적으로나 가독성으로나 좋지 않은 영향을 주기 때문에 서브 그래프를 활용을 추천하고 있습니다.
2. 서브 그래프 준비하기
Project 창에서 우클릭 > Visual Scripting > Script Graph를 추가하고 이름은 CheckMove라고 합니다. 이후 그래프 창에서 Nesting > Input 과 Output 노드를 추가합니다.
Nesting 관련 노드를 추가한 직후 모습
하지만 이 상태에서는 아무런 입력과 출력이 없으니 Graph Inspector에서 설정해줍시다. Trigger Input에 + 버튼을 눌러 하나 추가하고 Key에 적당한 이름을 넣고 필요시 Hide Label을 체크합니다.
흐름을 받고 보내는 Trigger 설정이 완료된 모습
이것과 마찬가지로 Output에는 두개의 Trigger을 추가하고 Key를 각자 True, False로 작성합니다.
3. 서브 그래프 완성하기
위에서 파악한 중복된 그래프 노드 4개 (GetVariable, Magnitude, Greater, If) 를 Ctrl 키를 누른 상태로 하나씩 선택하여 모두 선택한 뒤, Ctrl + C로 복사하고 여기 CheckMove 그래프에서 Ctrl + V로 붙여넣습니다.
흐름만 완성된 서브 그래프, 좀 더 범용성을 넓힐 필요가 있습니다.
데이터를 받거나 보낼 수 있도록 설정해야 합니다. Data Inputs에서 2개를 새롭게 추가하고 각자 String 타입, GameObject 타입으로 지정합니다. 그럼 Input 노드에 데이터 연결부가 추가되고 이것을 Get Variable에 연결해주어 서브 그래프를 완성합니다.
데이터를 지정하여 외부에서 데이터를 받도록 준비된 모습
Has Default Value 옵션을 체크하면 기본 값을 설정할 수 있고, 서브 그래프를 다른 그래프에서 활용할 때 직접 노드에 값을 입력할 수 있게 됩니다.
4. 서브 그래프 활용하기
이제 직접 활용해볼 시간입니다. 플레이어와 텍스트 각 그래프의 중복 노드를 지우고 우클릭 > Graph > CheckMove 노드를 추가하여 연결해봅니다. 그래프가 훨씬 간결하고 가독성이 높아짐을 확인할 수 있습니다.
일반적인 그래프 (상), 서브 그래프를 활용한 그래프 (하)
Variable 데이터가 그대로 Thought Pass하도록 Data Output를 추가한 모습
플레이어 그래프의 회전 부분에도 해당 서브 그래프를 적용합니다. 이 때 Input 데이터로 전달해야할 게임 오브젝트는 This 노드를 사용하여 자신을 넘겨줍니다.
플레이어의 변경된 회전 그래프, 자신의 Variable이라서 This 노드로 연결해주었습니다.