유니티 에셋/Magica Cloth 2
런타임 변경사항
스크립팅하는애님
2025. 3. 4. 22:09
개요
MagicaCloth2는 런타임 중 파라미터 변경을 지원합니다.
변경 방법은 두 가지가 있습니다.
- 스크립트를 사용하여 변경
- 애니메이션 키(Animation Key)를 사용하여 변경
그러나 애니메이션을 통해 제어할 수 있는 파라미터는 제한적이며,
스크립트를 사용하면 모든 파라미터에 접근하여 변경할 수 있습니다.
스크립트를 통한 변경 절차
다음 단계를 따라 MagicaCloth의 파라미터를 변경할 수 있습니다.
- MagicaCloth 구성 요소의 SerializeData 클래스 가져오기
- SerializeData의 내용을 변경하기
- MagicaCloth 구성 요소의 SetParameterChange() 호출하기
MagicaCloth의 모든 수정 가능한 파라미터는 SerializeData 클래스에 포함되어 있으며,
이 클래스를 직접 수정하여 설정을 변경할 수 있습니다.
하지만 모든 파라미터를 변경할 수 있는 것은 아닙니다.
변경 가능 여부는 소스 코드의 주석(Comment)을 통해 확인할 수 있습니다.
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
마지막으로, SetParameterChange()를 호출하여 시스템에 변경 사항을 알립니다.
사용된 API에 대한 자세한 내용은 ScriptingAPI 페이지를 참조하세요.
파라미터 변경 예제 (1)
using MagicaCloth2;
using UnityEngine;
public class RuntimeParameterTest : MonoBehaviour
{
public MagicaCloth cloth;
public ColliderComponent col;
bool sw = false;
void Start()
{
}
void Update()
{
if (cloth == null || col == null)
return;
// Check if MagicaCloth is running
if (cloth.IsValid() == false)
return;
if (Time.frameCount % 100 == 0)
{
sw = !sw;
UpdateParameter();
}
}
/// <summary>
/// Parameter change.
/// </summary>
void UpdateParameter()
{
// It manages all parameters that cloth.SerializeData can change at runtime.
var sdata = cloth.SerializeData;
if (sw)
{
// add collider.
sdata.colliderCollisionConstraint.colliderList.Add(col);
// gravity on
sdata.gravity = 5.0f;
}
else
{
// remove collider
sdata.colliderCollisionConstraint.colliderList.Remove(col);
// gravity off
sdata.gravity = 0.0f;
}
// change notification
cloth.SetParameterChange();
}
}
이 예제에서는 100프레임마다 콜라이더를 추가/제거하고 중력을 변경합니다.
이 방법을 사용하면 모든 파라미터 변경이 가능합니다.
다른 파라미터도 이 방식으로 변경할 수 있습니다.
애니메이션을 통한 변경 절차
일부 파라미터는 애니메이션 키(Animation Key)로 노출되어 있습니다.
애니메이션에 이러한 키를 추가하고 조작하면 파라미터를 변경할 수 있습니다.
애니메이션 키를 사용하여 변경하는 경우, 스크립트에서처럼 SetParameterChange()를 별도로 호출할 필요가 없습니다.