Search

Unity 6.2 AI Assistant 베타 테스트 후기: 노가다의 구원자가 될 수 있을까?

들어가며

Unity 6.2에서 AI를 에디터에 통합시키겠다는 소식을 접했을 때, 솔직히 그다지 기대하지 않았습니다. 기존의 AI 코드 어시스트나 이미지 생성 기능들은 특화된 툴들이 워낙 많아서, Unity가 중계 역할 정도만 할 것이라고 생각했기 때문입니다.
하지만 Unity 특화 기능들, 특히 에디터 명령 기능에 대한 설명을 보면서 흥미가 생겼습니다. 예를 들어 "씬에서 3씩 거리를 띄우고 오브젝트를 2x3열로 생성"하는 등의 명령이 가능하다는 것이었습니다. 자료가 생각보다 없어서 직접 테스트해보는 것이 빠를 것 같아 베타 버전을 설치해보았습니다.

실제 문제 상황: 73개 오브젝트의 LOD 설정

Assistant 창
마침 현재 진행 중인 프로젝트에서 귀찮은 노가다 작업이 있었습니다. 씬에 LOD를 설정해야 하는 Props들이 73개 정도 있는데, 현재는 메쉬 오브젝트만 있어서 이들을 묶는 부모 오브젝트를 각각 만들고 LOD Group을 생성해야 하는 상황이었습니다.
73개의 오브젝트를 하나씩 선택해서 빈 GameObject를 만들고, 이름을 맞춰주고, 위치를 조정하고, 부모-자식 관계를 설정하는 작업... 생각만 해도 끔찍합니다. 전부 드래그해서 실행할 수도 없고, 멀티 편집으로도 해결되지 않는 작업이었습니다.

AI Assistant를 통한 해결

Unity AI Assistant에 다음과 같이 명령을 내렸습니다:
“Hierarchy에 있는 Garage_Props 오브젝트 밑의 모든 오브젝트들에 대해 같은 이름을 가진 부모 오브젝트를 만들고 싶습니다. 모든 오브젝트에 대해 반복해주세요. 부모 오브젝트는 빈 게임 오브젝트면 됩니다.”
이렇게 명령을 입력하니 유니티 AI Assistant가 이런 코드를 생성해줬습니다.
// 2025-07-26 AI-Tag // This was created with the help of Assistant, a Unity Artificial Intelligence product. using System.Collections.Generic; using UnityEngine; namespace Unity.AI.Assistant.Agent.Dynamic.Extension.Editor { [CommandDescription("Create parent objects for children under Garage_Props")] internal class CommandScript : IRunCommand { [CommandParameter(LookupType.Scene, "Garage_Props")] GameObject m_GarageProps; public void Execute(ExecutionResult result) { if (m_GarageProps != null) { Transform garagePropsTransform = m_GarageProps.transform; List<Transform> children = new List<Transform>(); // Collect all children of Garage_Props foreach (Transform child in garagePropsTransform) { children.Add(child); } foreach (Transform child in children) { // Create a new parent GameObject with the same name as the child GameObject parentObject = new GameObject(child.name); result.RegisterObjectCreation(parentObject); // Set the parent GameObject's position and hierarchy parentObject.transform.position = child.position; parentObject.transform.rotation = child.rotation; parentObject.transform.parent = garagePropsTransform; // Reparent the child under the new parent result.RegisterObjectModification(child); child.parent = parentObject.transform; result.Log("Created parent object %0 for child %1.", parentObject, child.gameObject); } } else { result.LogWarning("Garage_Props object was not found in the scene."); } } public void BuildPreview(PreviewBuilder builder) { builder.Append("For each child under <param>m_GarageProps</param>, a new parent GameObject will be created with the same name as the child."); builder.Append("The child will be reparented under the newly created parent."); } } }
C#
복사

시스템 구조 분석

namespace Unity.AI.Assistant.Agent.Dynamic.Extension.Editor라는 네임스페이스 이름을 보고 대략적인 구조를 파악할 수 있었습니다. 런타임에 에디터 코드를 생성해서 실행하는 방식으로 동작하는 것 같습니다.
IRunCommand 인터페이스가 핵심인 것 같은데, result.RegisterObjectCreation()이나 result.RegisterObjectModification() 같은 메서드들을 보면 아마 Undo와 같은 기능까지 고려해서 설계되어 있지 않을까? 싶었습니다.
C#이기에 가능한 방법이라고 생각합니다. 예전에 C# 공부할 때 Reflection이나 Expression 트리 같은 기능들이 대체 어디에 쓰일까 궁금했는데, 이런 곳에 활용되는 것을 보니 꽤 효율적인 접근법이라는 생각이 듭니다.

실행 결과와 편의 기능들

결과창
실제로 실행하면 진행 상황을 실시간으로 보여줍니다. 73개의 오브젝트가 처리되는 과정을 하나씩 확인할 수 있었습니다.
Undo History 창
Undo History 창 - Undo 실행
더욱 인상적인 것은 Undo History 창이 자동으로 열린다는 점입니다. 각 작업이 개별적으로 기록되어 특정 시점까지 되돌리기가 가능합니다.
클릭 한 번으로 원하는 지점까지 되돌릴 수 있어서, 실험적인 작업을 할 때도 안심이 됩니다.

추가 활용 사례들

다수 오브젝트 수정 명령
LOD Group 생성 후에도 추가 작업이 필요했습니다. 기본적으로 3개의 LOD가 생성되는데, 하나만 남기고 나머지를 제거해야 했습니다. 보통은 Multi 편집이 안 되어서 하나씩 처리해야 하는 번거로운 작업이지만, AI Assistant로 간단히 해결했습니다.
스크립터블 에셋 만들기
더 나아가서 모든 자식 오브젝트에 대해 특정 폴더에 같은 이름을 가진 ScriptableObject 에셋을 생성하고 적절하게 매칭하는 작업도 수행해보았습니다.
흥미로운 점은 AI가 Unity API의 세부 사항들을 어떻게 파악하는지입니다. Property 이름이나 메서드 시그니처 같은 정보들을 정확히 알고 있다는 것은, 아마도 작업을 분할해서 필요한 부분들을 검색하여 가져오는 방식으로 동작하는 것 같습니다.

사용성과 장점

이런 기능들의 가장 큰 장점은 일회성 작업에 최적화되어 있다는 점입니다. 보통 에디터 코드를 작성하려면 Editor 폴더부터 만들어야 하는 번거로움이 있지만, 이렇게 임시로 생성되는 코드는 사용자 입장에서도 일회성으로 사용하기 매우 편리합니다.
Unity 로직 내에서 동작하니 코드를 검토하기도 좋습니다. 위의 코드에서도 순회하면서 자식 GameObject들을 수집하고, Transform들을 조작하는 로직이 명확히 보이므로, 실행 전에 어떤 결과가 나올지 예상할 수 있습니다.
변수 할당 가능
또 하나의 세심한 기능은 Tasks에서 오브젝트나 수치 부분들을 수정할 수 있다는 점입니다. 처음에는 생각하지 못했는데, 임의로 수치들을 바꿔서 실행할 수 있도록 해준 것은 정말 디테일한 배려라고 생각합니다.

아쉬운 점들

에러 발생
물론 완벽하지는 않습니다. 가끔 에러가 발생할 때가 있는데, 에러 트레이스가 제대로 되지 않아서 정확히 어느 라인에서 문제가 생겼는지 파악하기 어렵습니다. Undo로 되돌릴 수는 있지만, 디버깅 측면에서는 아쉬움이 있습니다.
하지만 생각해보면 이것은 AI가 생성한 코드이므로, 에러가 발생하면 다시 명령을 내려서 수정하도록 하는 것이 올바른 사용법일 수도 있겠습니다.

비용과 접근성

현재는 베타 기간이라 무료로 사용할 수 있습니다. 정식 출시 후의 비용 구조가 궁금하긴 하지만, 베타 기간 동안은 최대한 활용해볼 계획입니다.
특히 반복적인 에디터 작업이 많은 프로젝트에서는 상당한 시간 절약 효과를 기대할 수 있을 것 같습니다.

마치며

Unity AI Assistant는 기존의 AI 도구들과는 다른 접근 방식으로 실질적인 도움을 주는 도구라고 평가합니다. 코드나 이미지를 생성하는 것이 아니라, Unity 에디터의 반복 작업을 자동화해주는 것에 특화되어 있어서 실제 개발 워크플로우에 바로 적용할 수 있습니다.
물론 완벽하지는 않고, 에러 처리나 디버깅 측면에서 개선이 필요한 부분들이 있습니다. 하지만 73개의 오브젝트를 수작업으로 처리해야 했던 상황에서 몇 초 만에 해결할 수 있게 해준 것만으로도 충분히 가치 있는 도구라고 생각합니다.
앞으로 더 다양한 상황에서 테스트해보면서, Unity 개발의 생산성 향상에 얼마나 기여할 수 있는지 지켜볼 계획입니다. 특히 레벨 디자인이나 에셋 관리 같은 반복 작업이 많은 영역에서 더욱 활용도가 높을 것으로 예상됩니다.