캐릭터 인스턴스화 (Character Instantiation)
개요 (Overview)
MagicaCloth가 포함된 캐릭터를 런타임에 인스턴스화하면, MagicaCloth는 자동으로 초기화되며 작동을 시작합니다.
따라서 일반적으로 별도의 작업이 필요하지 않습니다.
그러나 초기화 과정에서 특정 상황에 따라 캐릭터의 자세 등에 제한이 가해질 수 있으며, 이는 MagicaCloth의 버전과 빌드 방식에 따라 다음 세 가지 유형으로 분류됩니다.
- v2.13.0 이전 버전의 런타임 빌드
- v2.13.0 이후 버전의 런타임 빌드
- 사전 빌드(Pre-built)
이제 각 방식의 차이점과 인스턴스화 내부 프로세스를 자세히 설명하겠습니다.
런타임 빌드와 사전 빌드 (Run-time and Pre-build)
MagicaCloth는 두 가지 방식으로 작동합니다: **런타임 빌드(Runtime Construction)**와 사전 빌드(Pre-construction).
일반적으로 런타임 빌드가 많이 사용됩니다.
런타임 빌드 (Runtime Construction)
런타임 빌드 방식에서는 Cloth 데이터가 런타임에 즉석에서 생성됩니다.
이 데이터 생성에는 평균적으로 10ms~30ms가 소요되며,
이 작업은 백그라운드에서 실행되므로 게임 진행에는 영향을 미치지 않습니다.
그러나 이 과정으로 인해 인스턴스화 후 Cloth 시뮬레이션이 실제로 시작되기까지 몇 프레임의 지연이 발생합니다.
사전 빌드 (Pre-built)
사전 빌드 방식에서는 Cloth 데이터를 편집 단계에서 미리 생성하여 에셋(Asset)으로 저장합니다.
이 방식은 런타임에 즉시 시뮬레이션을 시작할 수 있다는 장점이 있습니다.
그러나 에셋 데이터의 증가와 Cloth 데이터를 수동으로 빌드해야 하는 추가 작업이 필요하다는 단점이 있습니다.
자세한 내용은 사전 빌드(Pre-building) 문서를 참고하세요.
빌드 방식별 장단점 (Advantages and Disadvantages of Different Build Methods)
본격적인 설명에 앞서, 각 빌드 방식의 장점과 단점을 간략하게 정리합니다.
특히, v2.13.0 이후 런타임 빌드는 성능이 크게 개선되어 이전의 단점이 많이 줄어들었습니다.
장점(Pros) | 단점(Cons) | |
v2.13.0 이전 런타임 빌드 | MagicaCloth 버전 변경, 메쉬 또는 본(Bone) 구조 변경에도 영향 없음. 파라미터가 변경되어도 특별한 작업 없이 적용 가능. |
초기화 부하가 높음. 데이터 빌드 시간이 필요하여 시뮬레이션 시작 전 지연 발생. 캐릭터가 편집 당시의 자세 및 스케일로 초기화되어야 함. |
v2.13.0 이후 런타임 빌드 | MagicaCloth 버전 변경, 메쉬 또는 본 구조 변경에도 영향 없음. 파라미터 변경 시 별도의 작업이 필요 없음. 초기화 시 캐릭터의 자세와 스케일이 자유로움. 초기화 부하가 낮음. |
데이터 빌드 시간이 필요하여 시뮬레이션 시작 전 지연 발생. |
사전 빌드 (Pre-built) | 초기화 비용이 낮고, 시뮬레이션이 즉시 시작됨. 초기화 시 캐릭터의 자세와 스케일이 자유로움. |
Cloth 데이터를 생성하는 추가 작업 필요. MagicaCloth 버전, 메쉬, 본 구조가 변경되면 Cloth 데이터를 다시 생성해야 함. Cloth 파라미터가 변경될 때마다 데이터를 다시 빌드 해야 함. |
v2.13.0 이전 런타임 빌드 (Runtime Build for v2.13.0 and Earlier)
v2.13.0 이전 버전에서는 캐릭터가 편집 당시와 동일한 자세로 초기화되어야 합니다.
일반적으로 이는 A 포즈 또는 T 포즈입니다.
초기화 시 편집할 때와 다른 자세가 적용되면 버텍스 속성 데이터가 어긋나 시뮬레이션이 정상적으로 작동하지 않을 수 있습니다.
특히 다음 항목은 편집할 때와 동일해야 합니다.
- 캐릭터 자세 (Character Posture, Animation Pose)
- 캐릭터 스케일 (Character Scale)
좌표(Position) 및 회전(Rotation)은 변경해도 문제가 없습니다.
만약 인스턴스화 직후 캐릭터의 자세를 변경하려면, 변경 전에 수동으로 초기화를 호출해야 합니다.
이에 대한 방법은 문서의 마지막에서 설명됩니다.
v2.13.0 이후 런타임 빌드 (Runtime Build for v2.13.0 and Later)
v2.13.0부터는 편집 시 캐릭터의 자세가 자동으로 저장됩니다.
이 데이터를 **초기화 데이터(Initialization Data)**라고 합니다.
이전에는 편집할 때와 초기화할 때 자세가 동일해야 했지만,
v2.13.0 이후 버전에서는 이 제한이 제거되었습니다.
즉, 초기화 전에 캐릭터의 자세나 스케일을 변경하는 것이 가능합니다.
초기화 데이터 확인 (Check the Initialization Data)
컴포넌트가 초기화 데이터를 포함하고 있는지 여부는 Inspector의 Info 창에서 확인할 수 있습니다.
[Init Data]가 True이면, 해당 컴포넌트가 초기화 데이터를 보유하고 있음을 의미합니다.

Inspector의 Info 창에서는 런타임에서 초기화 데이터가 사용되었는지도 표시됩니다.
"Success"라고 표시되면, 빌드가 완료될 때 초기화 데이터가 올바르게 사용된 것입니다.
숫자와 메시지가 표시되면, 오류가 발생한 것이므로 초기화 데이터를 다시 생성해야 합니다.

초기화 데이터 생성 (Creating Initialization Data)
초기화 데이터는 자동으로 생성되므로 기본적으로 별도의 작업이 필요하지 않습니다.
그러나 어떤 이유로 초기화 데이터가 올바르게 생성되지 않은 경우, 다음 방법을 사용하여 수동으로 생성할 수 있습니다.
Vertex Paint를 한 번 실행한 후 즉시 종료하면 초기화 데이터가 생성됩니다.

또한, 컴포넌트 메뉴에서 "Rebuild InitData"를 선택하면 초기화 데이터를 강제로 다시 빌드할 수 있습니다.

v2.13.0 이전 컴포넌트에서 초기화 데이터를 활성화하는 방법
v2.13.0 이전의 컴포넌트에는 초기화 데이터가 포함되어 있지 않지만, 이를 쉽게 호환 가능하게 만들 수 있습니다.
아래 방법 중 하나를 수행하면 됩니다.
- 캐릭터가 프리팹(Prefab)으로 구성된 경우, 한 번 Prefab 모드로 들어가기
- 캐릭터를 씬(Scene)에 한 번 배치하기
위 방법을 수행하면 새로운 초기화 데이터가 자동으로 생성됩니다.
초기화 위치 변경 (Change the Initialization Location)
초기화는 기본적으로 MonoBehaviour의 Start()에서 수행되지만, 이를 Awake()에서 실행하도록 변경할 수 있습니다.
이 설정을 변경하려면 MagicaSettings 컴포넌트를 사용하면 됩니다.

자세한 내용은 MagicaSettings 컴포넌트 설명서를 참고하세요.
또한, 스크립팅 API를 통해 동일한 변경을 직접 적용할 수도 있습니다.
이를 위해 SetInitializationLocation() 메서드를 사용합니다.
MagicaManager.SetInitializationLocation(MagicaManager.InitializationLocation.Awake);
수동 초기화 (Manual Initialization)
초기화를 수동으로 호출할 수도 있습니다.
이를 위해 Initialize() 메서드를 사용합니다.
특히 v2.13.0 이전 버전에서는 캐릭터의 자세(Posture)나 스케일(Scale)을 변경하기 전에 반드시 Initialize()를 호출해야 합니다.
다음은 캐릭터를 인스턴스화한 후, 수동으로 초기화를 호출하고 스케일을 변경하는 예제 코드입니다.
var obj = Instantiate(prefab);
// MagicaCloth Initialize
var clothList = obj.GetComponentsInChildren<MagicaCloth>();
foreach (var cloth in clothList)
cloth.Initialize();
// Scale
obj.transform.localScale = new Vector3(2, 2, 2);
이렇게 하면 초기화가 완료된 후 캐릭터의 속성을 안전하게 변경할 수 있습니다.