
Unity AI - 당신이 알아야 할 모든 것
요약
Unity의 새로운 AI 기능과 오픈 베타에 대한 종합 가이드입니다. 어시스턴트와 생성기를 중심으로 3D 에셋, 스크립트 생성 및 외부 LLM(Claude 등)과의 연동 방법을 설명합니다.
핵심 포인트
- 텍스트 기반 3D 에셋, 스프라이트, 사운드 생성 기능
- Unity 전용 에이전트를 통한 인터페이스 제어 및 스크립트 생성
- Claude 등 외부 LLM API 연결 및 MCP 서버를 통한 Cursor 연동 지원
- 계획(Plan) 모드를 활용한 단계별 기능 구현 프로세스
동영상: Unity AI - 당신이 알아야 할 모든 것
채널: SpeedTutor
길이: 26분 55초
출처: 자막 (자동 생성, 영어)
전사:
안녕하세요 여러분, Matt입니다. SpeedTutor에 오신 것을 환영합니다. 저는 Unity의 새로운 AI와 오픈 베타 (open beta) [음악]에 대해 여러분이 알아야 할 모든 것과, 이를 여러분의 워크플로 (workflows)에 도입하여 사용할 가치가 있는지에 대해 안내해 드리겠습니다. 그리고 타임스탬프 (timestamps)를 타임라인 전체에 배치할 예정이니, 관심 있는 부분으로 건너뛰어 시청하실 수 있습니다. 그래서 그들이 무엇을 추가했는지, 그리고 새로운 도구들을 설명하기 위해 작은 그래픽을 만들었습니다. 기억하세요, 이것은 어시스턴트 (assistant)와 생성기 (generators)를 중심으로 구축되었습니다. 어시스턴트는 이제 생성기와 대화할 수 있으며, 여러분이 생성기를 구체적으로 열 필요 없이 텍스트 형식만으로 3D 에셋 (3D assets), 스프라이트 (sprites), 사운드 (sounds) 등을 생성할 수 있습니다. 어시스턴트를 살펴보면, Unity 전용 에이전트 (agent)를 가지고 있습니다. 인터페이스를 제어하고 게임 오브젝트 (game objects)를 만들거나 스크립트 (scripts)를 생성하기 위해 ask, plan과 같은 특정 에이전트 도구들을 사용할 수 있으며, 모두 훌륭한 기능들입니다. 우리의 에이전트는 이제 AI 게이트웨이 (AI gateway)를 가지고 있습니다. 따라서 이미 구독 중인 Claude와 같은 외부 도구가 있다면, API 키를 어시스턴트에 연결하여 사용할 수 있습니다. 다만, 이러한 서비스 중 어느 것이라도 사용하려면 Unity AI 구독 또는 Unity Pro 이상의 버전이 필요하다는 점을 말씀드립니다. 가격에 대해서는 영상 뒷부분에서 다루겠습니다. 또한 Unity AI 외에도, 다른 외부 LLM (Large Language Model)이나 다양한 앱을 연결하는 데 관한 MCP 서버 (MCP server)가 있습니다. 예를 들어 Cursor를 사용하고 있다면, 해당 애플리케이션을 Unity와 연결하여 Cursor 내에서 명령을 내리면 Unity 에디터 (editor)에서 명령이 실행되도록 할 수 있습니다. 이제 어시스턴트를 어떻게 사용할 수 있는지 몇 가지 빠른 실습 예제를 보여드리겠습니다. 생성기 (generators)를 살펴보고 모든 설정과 주요 기능들을 보여드리겠습니다. 우선, 어시스턴트를 사용하여 제가 Unity 에셋 스토어 (asset store)에 올려둔 'my door interaction kit' 같은 것을 만들어보고 싶었습니다.
이것은 문과 상호작용하거나, 상자를 열고, UI 팝업을 띄우고, 열쇠를 수집하는 것을 도와줍니다. 어시스턴트 (Assistant)를 사용하여 이것을 간단하게 구현할 수 있을까요? 그래서 저는 먼저 계획 모드 (plan mode)로 시작한 다음, 그 계획을 실행에 옮길 것입니다. 그리고 어시스턴트를 클릭하여 Unity Assistant를 열면, 여기서부터 사용을 시작할 수 있습니다.
그래서 저는 어시스턴트를 '계획 (plan)' 모드로 설정하고 프롬프트 (prompt)를 추가했습니다. 프롬프트 내용은 '플레이어가 열쇠를 수집해야 하고, 열쇠 없이 문을 열려고 하면 메시지가 표시되며, 열쇠를 가진 후에만 문을 열 수 있는 간단한 잠긴 문 기능을 만들어줘. 단, 변경 사항을 만들기 전에 먼저 계획을 세워줘'였습니다. 그러면 어시스턴트는 이 모든 과정을 실행하며, 서로 다른 파일들을 생성할 때마다 매번 승인을 요청했습니다. 그리고 '잠긴 문 기능 계획 (lock door feature plan)'을 생성했는데, 이는 구현 계획 (implementation plan)이었으며, 이를 새로운 'assets/plans' 폴더에 저장하여 열어볼 수 있었습니다.
탐색 (explore) 기능을 통해 환경을 조성하고, 잠긴 문을 확인하고, 상호작용을 시도하는 과정을 살펴보면, 1인칭 컨트롤러 (first-person controller)를 만들기 위한 다양한 움직임과 카메라 시선 처리가 포함되어 있습니다. 또한 이를 구현하기 위해 플레이어 인벤토리 (player inventory), 상호작용 가능한 인터페이스 (interactable interface), 열쇠, 문, 그리고 UI Toolkit을 위한 요소들을 생성해야 했습니다. 그 후, 문(큐브 형태)과 열쇠(구 형태)를 배치할 수 있도록 씬 통합 (scene integration)에 대해서도 언급할 것입니다. 우리는 이 문서를 편집하여 계획을 따르도록 다시 전달할 수도 있는데, 이는 우리가 원하는 대로 조절하고 싶을 때 유용할 것입니다.
그다음 저는 해당 계획을 승인하려고 시도했고, 그러면 어시스턴트는 액션 생성, 플레이어 이동, 상호작용 가능 요소 등을 포함한 작업 목록 (task list)을 만들었습니다. 과정을 계속 진행함에 따라 어시스턴트는 천천히 이를 처리해 나갔고, 저는 생성을 위해 '허용 (allow)'을 선택해야 했습니다. 어시스턴트는 새로운 씬 (scene)을 추가하고, 새로운 폴더를 추가했으며, 새로운 항목이 추가될 때마다 매번 상세 정보를 제공했습니다. 그 후 제가 한 일은 씬 뷰 (scene view)로 이동하는 것이었고, 여기서 제가 씬 뷰 안에서 움직이는 것을 볼 수 있습니다. 그리고 저는 열쇠 주변을 둘러보고 있었습니다. [IMG:1]
그들이 콜라이더 (colliders)를 추가했고, 이 아이템을 인벤토리 (inventory)에 수집할 수 있도록 하는 ID용 스크립트 (script)를 추가한 것을 볼 수 있었습니다. 그래서 이것이 실제로 무엇을 하는지, 그리고 무엇을 생성하는지 확인하기 위해 열어보고 싶었습니다. 그래서 우리는 그것을 열어보았고, 그것은 플레이어 인벤토리 (player inventory)에 접근합니다. 그것은 해당 인벤토리를 찾아 키 ID (key ID)를 추가한 다음, 기능을 끕니다. 그리고 UI 툴킷 (UI Toolkit)에 표시하기 위한 실제 문자열 (string)도 가지고 있습니다. 그다음 저는 문을 잠시 살펴보았는데, 문을 실제로 사용할 수 있도록 적절한 피벗 (pivot)이 설정되어 있는지, 피벗이 제대로 작동할지 궁금했기 때문입니다. 확인해 보니 실제로 올바른 위치에 배치되어 있어서 문이 제대로 작동할 것이라는 것을 알 수 있었습니다. 그리고 후드 (hood)도 잠시 살펴보았는데, 일부 부품이 연결되지 않은 것 같아서 아마 작동하지 않을 것이라고 생각했습니다. 하지만 이건 일단 넘어가죠. 플레이어를 살펴보겠습니다. 플레이어 인벤토리 (player inventory), 플레이어 상호작용기 (player interactor), 그리고 각각의 설정이 포함된 플레이어 이동 (player movement)이 있는 것을 볼 수 있습니다. 그래서 인벤토리를 잠시 살펴볼 필요가 있었습니다. 그것이 우리가 이미 키를 가지고 있는지 확인하기 위해 키 ID (key IDs)를 사용한다는 것을 볼 수 있었습니다. 그리고 has key를 위한 메서드 (method)도 있고, 레이캐스트 (ray cast)를 사용하는 플레이어 상호작용기 (player interactor)를 통해 우리가 액션 (action)을 실행할 때 그것을 설정하게 된다는 것도 알 수 있었습니다. 그러고 나서 빠르게 테스트를 해보았는데, 캐릭터 컨트롤러 (character controller)는 제대로 작동했습니다. 저는 E 키가 수집 키가 될 것이라고 가정했습니다. 저는 그 키를 수집했습니다. 그러고 나서 문을 열 수 있었는데, 작은 구체나 작은 키를 줍기 전에는 문과 상호작용할 수 없었습니다. 일단 그것을 하고 나니 문을 열 수 있었습니다. 따라서 제대로 작동하고 있다는 것이 타당해 보였습니다. 그래서 다시 그것을 열어보았는데, 아까 제가 후드 (hood)가 작동하지 않고 아무것도 표시되지 않는다고 말했었죠. 그래서 수정이 필요했습니다. AI는 작동을 위해 XML 문서 (XML document)가 실제로 연결되지 않았다는 전체적인 맥락을 파악하고 있었습니다. 작은 팝업창에서 볼 수 있듯이 UI 문서 (UI document)가 누락되었다는 것을 알고 있었고, 이제 그것을 변경할 것입니다. 이제 제가 후드를 클릭했을 때, 그 안에 문서가 포함되어 있는 것을 볼 수 있습니다.
그리고 이제 중앙에 조준점 (crosshair)이 있는 것을 볼 수 있는데, 이것이 조금 더 도움이 됩니다. 제가 메인 도어 키 (main door key)를 수집했다는 것을 인식할 수 있습니다. 그리고 문을 열었을 때 문이 열렸습니다. 그러고 나서 메시지들이 즉시 전달되었습니다. 그다음 저는 상호작용 가능한 오브젝트 (interactable objects) 위에 마우스를 올릴 때 UI 조준점이 변하지 않도록 요청해야겠다고 생각했습니다. 그래서 그렇게 요청했습니다. 또한, 상호작용을 더 쉽게 만들기 위해 키를 사용한 후 문을 열고 닫을 수 있기를 원했습니다. 그러자 AI는 제가 원하는 것을 이해했고, UI 툴킷 (UI toolkit) 문서, UI 매니저 (UI manager)에 몇 가지 사항을 추가하고 추가 정보를 생성할 수 있도록 했습니다. 그래서 이제 이것을 테스트해 보니, 마우스를 올렸을 때 더 큰 하이라이트와 녹색 표시가 나타났습니다. 문에 대해서도 동일하게 작동했습니다. 그리고 시선을 돌렸다가 다시 보더라도, 문이 열려 있는 동안 여전히 문과 상호작용할 수 있었습니다. 그래서 상호작용을 통해 문을 열고 닫을 수 있었습니다.
그리고 문을 확인해 보았는데, 문이 잠겨 있을 수 있는 기능이 있다는 것을 볼 수 있습니다. 이 문은 서로 다른 타겟 (targets)을 가지고 있으며, 플레이어 인벤토리 (player inventory)를 확인하는 기능이 있습니다. 문을 토글 (toggle)할 수 있고 위치를 기준으로 문을 애니메이션화할 수 있어 언제든 사용할 수 있습니다. 이 작업은 계획부터 실행까지 아마 10분 정도 걸렸을 것입니다. 이제 불을 뿜는 날아다니는 드래곤을 직접 만들 수 있는 시스템을 사용하는 또 다른 빠른 게임플레이 예시를 보여드리고 싶습니다. 그래서 저는 수많은 애니메이션이 포함된 애니메이션 컨트롤러 (animation controller)가 있는 이 드래곤 캐릭터 팩을 가져와서, [snorts] 이것을 애니메이션이 있는 컨트롤러로 만들 수 있는지 맥락을 이해하여 사용할 수 있게 하고 싶습니다. 그래서 이 드레이크 (drake) 캐릭터를 그냥 드래그해서 넣겠습니다. 저는 별도의 걷기 (walk) 및 달리기 (run) 애니메이션을 사용하여 간단한 드래곤 캐릭터 컨트롤러 (character controller)를 만들고, 이들이 애니메이션 컨트롤러에서 입력 (inputs)과 연결되도록 하고 싶다고 말했습니다. 이 드래곤 주변을 회전할 수 있으며, 현재 제가 이 드래곤의 대기 (idle) 포즈 상태인 것을 볼 수 있습니다.
왼쪽 마우스로 걷게 만들었습니다. 마우스 움직임을 사용하여 캐릭터를 회전할 수 있습니다. 그다음 Shift 키를 눌러 실제로 질주 (sprint) 할 수 있고, 다시 원래의 애니메이션 상태로 돌아갈 수 있습니다. 그다음 보시다시피, 입력 (inputs)이 평면 중력 (plane gravity) 및 이동 (movement)과 연결된 드레이크 컨트롤러 (drake controller)를 갖추고 있습니다. 또한 이동 속도 (move speed)에 따라 어떤 애니메이션을 재생해야 할지 감지할 수 있도록 애니메이터 (animator)에 대한 참조 (reference)를 가지고 있는 것을 볼 수 있습니다. 이 애니메이션 컨트롤러 (animation controller)가 상당히 무거움에도 불구하고, 여전히 걷기 (walk), 대기 (idle), 그리고 달리기 (running) 사이의 차이를 구분해냈습니다. 이를 완성하는 데 약 6분 정도 소요되었습니다. 3인칭 카메라 (third-person camera)가 고정되어 있기보다는 실제로 플레이어를 따라다니도록 약간 수정해야 했는데, 여기에 2분이 더 걸렸습니다.
그리고 저는 또한 우리가 구현한 그 애니메이션들을 가져와서, 스페이스 바 (space bar)를 눌러 점프하고 비행 상태 (flying state)로 전환할 수 있는지 확인하고 싶었습니다. 그러면 새로운 입력 시스템 (new input system)을 사용하여 주변을 날아다닐 수 있습니다. 그래서 저는 비행 애니메이션 (flying animations)을 사용하도록 프롬프트 (prompt)를 입력했습니다. 특정 애니메이션을 지정하지는 않았고, 스페이스 바를 눌러 하늘로 점프하면 애니메이션을 사용하여 활공 (glide) 할 수 있도록 만들었습니다. 그 후에는 카메라를 사용하는 방식이 약간 어색했기 때문에 위아래로 움직이기 위해 Q, E 키를 사용하고 싶었습니다. 또한 불을 뿜는 효과 (breathing fire effect)를 추가하고 싶었습니다. 그래서 파티클 시스템 (particle system)을 생성하고, 그에 맞는 머티리얼 (material)을 생성한 다음, 주변을 둘러보며 불을 뿜을 수 있도록 동일한 애니메이션을 통합하도록 했습니다. 몇 번의 반복 (iterations)과 약 10분간의 시도 끝에 제가 무엇을 만들어냈는지 보실 수 있습니다. 에디터 툴 (editor tool) 제작, 프로파일러 (profiler)를 통한 성능 (performance) 확인, 그리고 씬 블록아웃 (scene blockout)에 대한 몇 가지 빠른 예시를 보여드리고 싶었습니다.
저는 방금 배터리 명명 (battery naming)에 관한 에디터 툴 (editor tool)을 만들고 싶었습니다.
따라서, 여러 개의 게임 오브젝트 (game objects)를 가져와서 쉽고 깔끔하게 이름을 바꿀 수 있는데, 아마 이 작업은 약 2분 정도 걸렸을 것이며 UI Tool Kit을 사용하여 디자인했습니다. 여기 보시면 제가 만들어 달라고 요청한 배터리 네이머 (battery namer) 툴이 생성된 것을 볼 수 있습니다. 저는 제가 원하는 모든 오브젝트를 선택했고, 접두사 (prefix) 이름으로 'cube'를 설정하겠습니다. 기본 이름 (base name)은 'underscore_environment'로 하고, 접미사 (suffix) 이름도 설정할 수 있습니다. 0부터 시작하도록 설정한 뒤 'rename selected'를 클릭하면, 'cube_environment_0'부터 'cube_environment_14'까지 생성되는 것을 볼 수 있습니다. 이는 단순한 이름 변경기 (renamer)입니다.
또한 프로파일러 (profiler) 내의 캡처를 살펴볼 수도 있습니다. 프로파일러 데이터가 있다면, 그것을 분석하여 주요 또는 보조 병목 현상 (bottlenecks)이 무엇인지, 그리고 어디에서 찾을 수 있는지를 알려줍니다. 그다음으로는 메시 액세스 (mesh access)에 대한 최적화 (optimizations) 제안을 제공하며, 제가 배터리 명명 (battery naming)을 위해 만들었던 것과 같이 무거운 윈도우 (windows)들을 비활성화하여 에디터 (editor)에서 스톨 (stalls, 멈춤 현상)이 발생하지 않도록 할 수 있습니다.
이제 제가 인터넷에서 찾은 이미지를 사용하여, 제 씬 (scene) 내에서 프리미티브 (primitives)와 플레이스홀더 에셋 (placeholder assets)을 사용해 블록아웃 (blockout)을 할 수 있는지 확인해 보고 싶었습니다. 상당히 복잡한 이미지를 복제하도록 주었지만, 도로 양옆의 건물들과 차량들, 그리고 최소한 기본적인 가로등 같은 형태는 갖춰진 것 같습니다. 실제로 이것을 재구성된 건물들과 모든 요소가 합쳐진 서로 다른 유닛 (units)들로 배치해 줍니다.
제너레이터 (generators)에 대해 짧게 개요를 살펴보겠습니다. 새로운 3D 모델을 생성하려면 맨 상단의 AI 탭으로 가서 'generate new'를 선택한 뒤 '3D object'를 선택할 수 있습니다. 그러면 이 박스가 나타납니다. 생성 (generate)을 할지, 아니면 리토폴로지 (retopology)나 텍스처링 (texturing)을 할지 선택할 수 있습니다. 추가된 특정 모델 중 하나로 생성할 수도 있으며, 만들고자 하는 것과 더 유사하게 만들고 싶다면 이미지 참조 (image reference)를 추가할 수도 있습니다.
그래서 저는 좀 무리해서 물총을 추가해보고 싶었고, 여기서 바로 생성해 보려고 합니다. 제 씬 (scene)에 있는 프리팹 (prefab)을 보시면, 모델 자체와 텍스트, 그리고 많은 디테일이 포함되어 상당히 정확하게 표현된 것을 볼 수 있습니다. 이것이 얼마나 최적화 (optimized)되어 있을지는 잘 모르겠습니다. 보시다시피 150만 개의 폴리곤 (polygons)이라는 엄청난 양이니까요. 와이어프레임 (wireframe) 모드에서 볼 수 있듯이 최적화된 메쉬 (mesh)는 아닙니다. 하지만 리토폴로지 (retopology)를 사용하고 싶다면, 이 옵션을 시도해 볼 수 있습니다. 모델을 선택하고 싶다면, 'tripo-retopology'를 시도해 보겠습니다. 그런 다음 선택된 메쉬를 여기로 드래그하여 FBX로 만듭니다. 면 (face)의 제한을 아마도 10,000개 이상은 되지 않도록 설정하고 싶네요.
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube SpeedTutor (Unity)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기