Search Unity

매즈 나이홈(Mads Nyholm), 2018년 6월 20일

테크놀로지

Unity에서 가장 많이 요청을 받은 추가 기능은 바로 네스티드 프리팹(nested prefab)입니다. 네스티드 프리팹뿐 아니라 프리팹 워크플로에 더 많은 기능이 업데이트되기를 바라는 많은 분들을 위해 재사용이 가능하고 보다 많은 부분을 제어하며, 모든 과정을 안전하게 수행하는 데 중점을 두고 프리팹 시스템을 전반적으로 개선하고 있습니다. 이후 적용될 개선 사항을 계속해서 블로그를 통해 소개할 것이며, 이 게시물은 그 첫 번째 글입니다. 어제 Unite Berlin 기조 연설에서 공개된 새로운 프리팹 시스템이 추가된 Unity 빌드의 프리뷰 버전은 여기에서 다운로드할 수 있습니다.

우선 Unity에 탑재된 프리팹의 기본 사항을 정리해보겠습니다. 기본적으로 프리팹 에셋은 게임 오브젝트 및 그 자식들의 템플릿과 같습니다. 프리팹 에셋의 인스턴스를 사용하면 여러 씬에 걸쳐 게임 오브젝트의 복사본을 여러 개 생성할 수 있습니다. 프리팹 에셋이 변경될 경우 모든 프리팹 인스턴스도 자동으로 업데이트됩니다.

Unity는 다양한 인디 스튜디오 및 AAA급 스튜디오와 이야기를 나누고 게임 개발자들이 현재 프리팹을 어떻게 활용하는지 자세히 알아보았습니다. 이 과정에서 발견한 문제점은, 프리팹 에셋을 편집하려면 계층 구조(Hierarchy)의 열린 씬(Scene)으로 에셋을 드래그하여 수정한 다음 변경 사항을 적용하고, 에셋을 다시 삭제해야 한다는 것이었습니다. 또 다른 문제는 인스펙터(Inspector)의 프리팹 인스턴스 적용(Apply) 버튼이었습니다. 이 버튼 사용 시 변경 내용이 적용되는 대상 및 범위를 확인하지 못한 상태로 프리팹 에셋에 변경 사항이 바로 적용되었기 때문입니다.

Unity는 이러한 문제를 해결하기 위해 다양한 기능을 새롭게 추가했습니다. 먼저 이전 버전과 호환할 수 있으며 중첩과 상속도 지원하는 프리팹 백엔드를 구현했습니다. 또한 프리팹 인스턴스의 프로퍼티 시각화와 오브젝트 오버라이드를 개선하고, 여러 세부 요소별로(프로퍼티당, 컴포넌트/게임 오브젝트당 또는 이전처럼 전체 프리팹 인스턴스별로) 오버라이드를 적용하는 기능을 추가했습니다. 마지막으로, 별도의 창에서 프리팹 에셋을 편집할 수 있는 프리팹 모드를 추가했습니다.

프리팹 모드

프리팹 모드는 프리팹으로 작업하는 방식을 근본적으로 바꿔놓을 것입니다. 프리팹 모드를 사용하면 프리팹 변경 시 프리팹 인스턴스에 변경 사항을 적용하거나 프리팹 에셋을 직접 수정하는 방식 중에서 선택할 수 있습니다.

프리팹 모드에서는 구조적 요소의 변경을 비롯한 모든 변경 작업 시 프리팹 연결을 해제하지 않고도 변경 사항을 프리팹 에셋에 적용할 수 있으므로, 프리팹 에셋 편집 작업을 더욱 면밀하게 제어할 수 있습니다. 또한 프리팹 모드에서는 추후 에셋에 변경 사항을 적용하기 위해 프리팹 인스턴스를 일시적으로 변경할 필요가 없습니다. 이에 따라 오버라이드로 유지되어야 하는 기존의 다른 오버라이드를 적용하는 실수를 저지를 가능성이 크게 줄어들었습니다. 따라서 프리팹 에셋 변경 시 프리팹 모드를 사용하고, 꼭 필요한 경우에만 프리팹 인스턴스를 오버라이드할 것을 권장합니다. 참고로 적용(Apply) 워크플로도 대폭 개선되었으며, 이에 관한 자세한 내용은 다음에 게시할 블로그에서 다루겠습니다.

프리팹 모드는 계층 구조와 씬 뷰를 대신하여 프리팹 에셋을 별도의 창에 표시합니다. 계층 구조 및 씬 뷰의 새로운 헤더로 프리팹 모드를 알아볼 수 있으며, 프리팹 모드의 배경 색상은 환경 설정(Preferences)에서 커스터마이즈할 수 있습니다.

예를 들어 위 그림에서 빨간색 원으로 표시된 화살표를 클릭하여 씬에서 프리팹 모드를 실행하면 계층 구조에 프리팹 헤더가 표시되며, 씬 뷰에 이동 경로 헤더가 나타납니다(위 그림의 빨간색 상자).

프리팹 모드를 실행하는 방법에는 다음의 세 가지가 있습니다.

  • 프로젝트(Project) 창에서 프리팹(Prefab)을 더블 클릭합니다.
  • 프리팹 인스턴스의 루트 게임 오브젝트 옆에 있는 계층 구조(Hierarchy) 창에서 새롭게 추가된 화살표 버튼을 클릭합니다.
  • 인스펙터(Inspector)의 열기(Open) 버튼을 클릭하여 프리팹 에셋이나 프리팹 인스턴스의 루트 게임 오브젝트를 엽니다.

프리팹 에셋으로 작업하기

프리팹 중첩을 사용할 수 있도록 프리팹 백엔드에 기술적 변경 사항을 적용했습니다. 따라서 엄밀히 말하면 프리팹은 이제 임포트된 에셋이므로, 더 이상 프리팹 게임 오브젝트를 프로젝트(Project) 창에서 편집할 수 없습니다. 프로젝트(Project) 창에서 직접 오브젝트를 편집했던 기존의 워크플로와는 달리 프리팹 모드에서는 어느 뎁스에서든 오브젝트를 편집하고, 씬 뷰에서 진행하는 작업의 결과물을 확인할 수도 있습니다.

프리팹 인스턴스로 작업하기

프리팹 중첩을 제공하면서 변경된 또 다른 사항은 더 이상 프리팹 인스턴스 연결을 해제하여 해당 인스턴스의 구조를 변경할 수 없다는 점입니다. 따라서 이제 게임 오브젝트를 삭제하거나, 게임 오브젝트의 부모 자식 관계를 재지정하거나, 트랜스폼(Transform)을 RectTransform으로 대체하거나 그 반대로 대체하는 등의 변경 작업을 모두 프리팹 모드에서 수행할 수 있습니다. 또는 프리팹 인스턴스와 프리팹 에셋의 연결을 완전히 해제하고 그 결과로 만들어지는 일반 게임 오브젝트 간의 연결 구조를 재구성하기 위해서는 프리팹 인스턴스의 패키지를 언팩하면 됩니다.

프리팹 단계

에디터에서의 ‘단계(stage)’는 다른 게임 오브젝트와 격리된 여러 게임 오브젝트를 가리킵니다. 프리팹 모드에서는 씬 뷰 상단의 이동 경로가 각기 다른 단계를 나타내며, 각 단계는 별도의 ‘월드’와 같습니다. 기본적으로는 사용자가 로드하고 계층 구조에서 확인할 수 있는 모든 씬이 표시되는 기본 단계(Main Stage)가 있습니다. 프리팹 모드에서 프리팹을 열면 해당 프리팹의 콘텐츠에 대한 프리팹 단계가 생성됩니다. 프리팹 단계를 연 상태에서는 기본 단계 게임 오브젝트가 언로드되지 않으며, 따라서 이러한 게임 오브젝트는 계속해서 게임(Game) 뷰에 표시됩니다.

씬 뷰와 계층 구조는 항상 현재 단계, 즉 가장 오른쪽에 있는 이동 경로에 해당하는 단계를 표시합니다. 씬이 표시되는 기본 단계로 돌아가려면 씬 뷰에 있는 이동 경로의 ‘씬(Scenes)’ 버튼이나, 계층 구조의 돌아가기(Back) 화살표 버튼을 클릭하세요.

아래 비디오에서 새로운 워크플로의 실제 사용 사례를 확인해 보세요.

새로운 프리팹 기능을 사용해 보려면 Unity 프리팹 페이지에서 프리뷰 빌드를 다운로드하세요. 자세한 정보, 질문과 피드백은 개선된 프리팹에 관한 Unity 포럼에서 확인하세요.

라이브: Unite Berlin의 개선된 프리팹 관련 세션

개선된 프리팹 워크플로의 실제 사용 사례를 확인하고 싶다면 YouTube나 Twitch에서 Unite Berlin의 라이브 스트리밍을 시청해 보세요. 이 스트리밍 방송에서는 치로 콘티니시오(Ciro Continisio)가 진행하는 Improved Prefab Workflow(개선된 프리팹 워크플로) 세션을 시청할 수 있으며, 이어서 루네 스코보 야콥센(Rune Skovbo Jacobsen)과 스틴 룬드(Steen Lund)가 Technical Deep Dive into the New Prefab System(새로운 프리팹 시스템의 세부 기술 사항) 세션을 진행하며, Unity가 구현한 새로운 기능의 장단점을 자세히 설명합니다. 이러한 세션은 컨퍼런스 후 1개월 내에 편집을 거쳐 Unity의 YouTube 채널에 업로드될 예정입니다.

23 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. Hey the Windows download link is not working.

    1. I just checked https://beta.unity3d.com/download/ff19e2e229d2/public_download.html and had no issues – must have been a short outage – please try again. :)

  2. What beta release of 2018.2 will include prefab workflows? if any? I have been using the preview build to play with prefabs, but I dont see shadergraph in package manager.. I’m really excited to get a build with all the new features! going to be amazing!!

    thank you so much!
    Brian Acker

    1. Kristyna Hougaard

      7월 6, 2018 12:22 오후

      Improved prefab workflows are currently slated for 2018.3. What’s available now is a custom preview build.

  3. This is so amazing, like my heart goes out to all the people that made this possible!! By the way, I know the preview build is out, but do we know yet what the first Unity version will have this built-in?

  4. Dvdduplicatorrental

    6월 23, 2018 4:37 오전

    Mads Nyholm, thanks! And thanks for sharing your great posts every week!

  5. Jérôme Foucher

    6월 22, 2018 6:15 오후

    Great Feature and implementation !
    But… When adding an object in the hierarchy of an FBX file, prefab already created with this fbx doesn’t automaticly updated. Need to break and make the prefab again as before. FBX should be prefab too from start
    (just tried with the preview release)

    1. Could you please ask you question in the forum
      https://forum.unity.com/forums/improved-prefabs.158/

      To me is sounds like what you are trying to do can be achieved with a Variant.

    2. You need to create a Variant of the model first: Right click on your model in the Project Browser and select Create -> Prefab Variant. This will generate a Prefab Variant next to your model. Now use this variant in your scenes to have it automatically update when you change the source model in your DCC while keeping your overrides to the model.

  6. Bardelot Alexandre

    6월 22, 2018 8:18 오전

    Finally !!!

    This is the strict minimum of what we needed for prefabs, but that is cool that you did it. I hope that everything will work without any issues.

  7. If I instantiate the same prefab multiple times in the scene, how is the serialization? Right now same prefabs take a lot of storage in the scene. Will that also be improved?

    1. There are no changes to how scenes are serialized for players.

  8. We can no longer edit prefabs from the project view, by design. This seems like a serious regression because now we can no longer multi select prefabs and change a value.

    1. Now you don’t need to select multiple prefabs and change their value: you can change the value of prefab variant (just once).

      But I think that you still have an option to do that in scene like you said.

    2. Yes this a limitation of the new system, and we understand this can be frustrating. Just like model prefabs, normal prefabs are now imported assets so they cannot be edited directly in the Project Browser. See the FAQ for more details: https://forum.unity.com/threads/faq.536647/

  9. Are there any changes to the serialization system with this update? Will it be possible to have polymorphic serialization?

    1. No these features are unrelated

  10. What about UI prefabs? does the prefab mode put them on a temp canvas?

    1. Whoah, that’s a really nice question. I hope it does.

    2. Yes we use a default Canvas for UI Prefabs. You can also specify your own UI Environment Scene for UI Prefabs by creating a Scene with your own Canvas and assign this in the Editor Settings (Look for ‘UI Environment’ under ’‘Prefab Editing Environments’)

  11. Hey, Unity, great job! Just to be clear, can prefab contain other prefab instances as children? Thanks

    1. Yes; Prefabs can contain other Prefab instances. I recommend to watch the video above to get a good overview of the new features (if you haven’t already).

  12. Really nice workflow :)