概要
MagicaCloth2は実行中のパラメータ変更をサポートします。
変更にはスクリプトから操作する方法と、アニメーションキーによりアニメーションから操作する方法の2つがあります。
ただし、アニメーションからは一部のパラメータしか操作することができません。
スクリプトからはすべてのパラメータにアクセス可能です。
スクリプトによる変更手順
変更は次の手順で行います。
- MagicaClothコンポーネントのSerializeDataクラスを取得する
- SerializeDataの内容を変更する
- MagicaClothコンポーネントのSetParameterChange()を呼び出す
MagicaClothの変更可能なパラメータはすべてこのSerializeDataクラスに内包されています。
このクラスを直接書き換えます。
ただしすべてのパラメータが変更できるわけではありません。
そのパラメータが実行時に変更できるかできないかはソースコードのコメントに記載されています。
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
最後にSetParameterChange()を呼び出すことでシステムに変更を通知します。
使われるAPIについてはScripttingAPIのページを参照してください。
パラメータ変更事例(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フレームごとにコライダーを追加/削除します。
また重力を変更します。
この事例はパラメータ変更のすべてを内包しています。
この操作を応用することで他のパラメータも変更が可能です。
アニメーションによる変更手順
一部のパラメータはアニメーションキーとして公開されています。
これらのキーをアニメーションに追加して操作することでパラメータが変更可能です。
アニメーションキーによる変更の場合は、スクリプトのように別途SetParameterChange()を呼ぶ必要はありません。