본문으로 건너뛰기

© 2026 Molayo

r/Unity분석2026. 05. 25. 09:03

Unity Graph Toolkit 6.5에서 새롭게 추가되고 활용 가능한 기능들 (코드 포함)

요약

Unity Graph Toolkit 6.5의 새로운 기능과 노드 기반 메쉬 툴 구현을 위한 실용적인 가이드를 제공합니다. 노드 어트리뷰트 설정, 포트 스타일 매핑, 포트 정의 방법 및 현재 포트 타이핑의 제한 사항과 해결 방안을 다룹니다.

핵심 포인트

  • 어트리뷰트를 통한 노드 카테고리 및 아이콘 설정 가능
  • DataTypeStyleMapper를 이용한 포트 스타일 일괄 적용
  • OnEnable/OnDefine 훅을 활용한 노드 헤더 색상 설정
  • 엄격한 포트 타이핑 제한에 따른 명시적 형변환 노드 필요성

저는 방금 노드 기반 메쉬 툴을 Unity Graph Toolkit 6.5로 이전했습니다. 따라서 새롭게 도입된 기능들에 대한 짧고 실용적인 검토와 함께, 각 기능에 필요한 최소한의 코드를 공유하고자 합니다. 코드 스니펫은 GTK (Graph Toolkit) 호출 부분만 남기고 다듬었으며 (제 노드에서는 이 중 일부가 베이스 클래스에 래핑되어 있습니다), 실제 포트 이름과 값은 해당 툴의 것을 사용했습니다. 만약 이 모듈을 사용하여 그래프 툴을 시작하려 한다면, 이것이 여러분이 가장 먼저 찾게 될 내용들입니다.

이제 노드는 어트리뷰트 (Attribute)를 통해 자신의 라이브러리 카테고리, 아이콘, 그리고 표시 이름을 선언할 수 있습니다. 따라서 검색창이나 캔버스(Canvas)에서 클래스 이름 대신 노드 자체의 이름으로 표시됩니다:

[Serializable]
[Node("Generators", "Packages/.../Icons/CubeIco.png", "Box")]
internal class BoxNodeModel : MeshGraphNodeModel { }

포트 (Port)의 경우, 데이터 타입별로 스타일을 한 번만 등록하면 해당 타입의 모든 포트에 아이콘과 색상이 적용됩니다. GTK는 TypeCache를 통해 매퍼 (Mapper)를 찾아 태그된 그래프 타입에 적용합니다. 이는 포트가 서로 다른 의미를 가질 때 (기하학적 구조(Geometry) vs 루프 쌍(Loop pair) vs 스칼라(Scalar)) 그리고 밀집된 그래프를 빠르게 훑어보고 싶을 때 매우 유용합니다:

[DataTypeStyleMapper(typeof(MeshGraphModel))]
internal sealed class MeshGraphPortStyles : DataTypeStyleMapper
{
...

노드 헤더 색상은 OnEnable에서 설정합니다. OnEnable이나 OnDefine 훅 (Hook) 외부에서 DefaultColor를 설정하면 6.5 버전에서는 다시 그려지지(Repaint) 않으므로, 반드시 그곳에서 설정하십시오:

public override void OnEnable()
{
    base.OnEnable();
...

포트 자체는 OnDefinePorts에서 빌더 (Builder)를 통해 선언하며, WithDefaultValue를 사용하면 아무것도 연결되지 않았을 때 표시되는 인라인 값을 지정할 수 있습니다:

protected override void OnDefinePorts(IPortDefinitionContext ctx)
{
    ctx.AddInputPort<float3>("Size").WithDefaultValue(new float3(1, 1, 1)).Build();
...

현재 가장 큰 제한 사항은 엄격한 포트 타이핑 (Port typing)입니다. 포트는 타입이 일치하거나 한 타입이 다른 타입의 베이스 타입(Base type)일 때만 연결됩니다. 따라서 int 출력은 float 입력과 둘 다 숫자임에도 불구하고 연결되지 않습니다.

ctx.AddOutputPort<int>("Value").Build();   // ...에 연결되지 않습니다
ctx.AddInputPort<float>("Offset").Build(); // ...이 포트

현재의 해결 방법(workaround)은 명시적 형변환(explicit conversion) 노드를 사용하는 것입니다. Unity는 두 가지 로드맵 수정 사항을 가지고 있습니다. 첫 번째는 포트 타입 간(예: int에서 float로) 암시적 형변환(implicit casts)을 설정할 수 있는 API인 타입 캐스팅(Type Casting)으로, 곧 출시될 예정이라고 합니다. 두 번째는 올해 말로 계획된, 하나의 포트가 여러 타입을 수용하는 다형성 포트(Polymorphic Ports)입니다. 그때까지는 이것을 단순한 미관상의 문제가 아니라, 설계를 할 때 고려해야 할 주요 사항으로 다루어야 합니다.

두 가지 작은 차이점도 있습니다. 노드의 헤더 색상을 설정하고 아이콘을 부여할 수는 있지만, 포트 아이콘이 타입에 따라 색이 변하는 것처럼 헤더 아이콘에 색조(tint)를 입힐 수는 없습니다. 또한, UI Toolkit의 나머지 부분에서 할 수 있는 것처럼 USS를 통해 노드를 스타일링하는 문서화된 방법이 없습니다. Unity는 더 깊은 시각적 커스터마이징(visual customization)을 로드맵에 올려두었으며, 현재 문서는 API를 따라가지 못하고 있습니다. 따라서 이 중 일부는 매뉴얼 페이지에서 읽은 것이 아니라 모듈의 표면적인 기능을 통해 추론한 것입니다.

타입을 등록할 때 발생하는 부작용도 있습니다. 포트에 배치하는 모든 타입은 블랙보드(blackboard) 변수와 상수(constant) 노드를 생성할 때 선택 가능한 상태가 되며, 해당 메뉴에서 특정 타입을 숨기는 API는 없습니다. 따라서 직렬화가 불가능하거나(non-serializable), 단독 값으로서 의미가 없는 타입이라도 어쨌든 목록에 나타납니다. 제가 만든 도구에서는 메쉬 데이터 흐름(mesh data flow)과 루프 쌍 연결(loop-pair connection)이 모두 그러합니다. 이들은 노드 사이의 와이어(wire)로서만 의미가 있지만, 여전히 블랙보드와 상수 목록에 남아 방해가 됩니다.

API는 아니지만 알아둘 가치가 있는 마지막 한 가지는, 노드 정의를 재작업할 때(포트 이름 변경, 타입 변경, 구조 재편성 등) 기존 그래프가 여전히 열린다는 점입니다. 끊어진 와이어는 다시 연결하기만 하면 되고, 더 이상 해결되지 않는(resolve) 노드는

6.5 버전은 몇 버전 전의 여러 공백을 메워주며, 위에 언급된 요소들은 해당 모듈을 기반으로 실제 커스텀 그래프 도구 (custom graph tool)를 구축하기에 충분합니다. 에디터 (Editor)는 항상 Unity의 강점이었으며, 이를 기반으로 구축하는 것이 처음부터 자신만의 그래프 스택 (graph stack)을 만드는 것보다 더 빠릅니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 r/Unity3D (top/week)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0