유니티 에셋/Magica Cloth 2

런타임 변경사항

스크립팅하는애님 2025. 3. 4. 22:09

개요


MagicaCloth2는 런타임 중 파라미터 변경을 지원합니다.
변경 방법은 두 가지가 있습니다.

  1. 스크립트를 사용하여 변경
  2. 애니메이션 키(Animation Key)를 사용하여 변경

그러나 애니메이션을 통해 제어할 수 있는 파라미터는 제한적이며,
스크립트를 사용하면 모든 파라미터에 접근하여 변경할 수 있습니다.

 

 

 

 

스크립트를 통한 변경 절차


다음 단계를 따라 MagicaCloth의 파라미터를 변경할 수 있습니다.

  1. MagicaCloth 구성 요소의 SerializeData 클래스 가져오기
  2. SerializeData의 내용을 변경하기
  3. 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()를 별도로 호출할 필요가 없습니다.