Contents
概要
MagicaCloth2は実行中のパラメータ変更をサポートします。
ここでは実行中にスクリプトからパラメータを操作する手法を解説します。
なお読者はUnityでのC#プログラミングを理解していることを前提としています。
変更手順
変更は次の手順で行います。
- 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フレームごとにコライダーを追加/削除します。
また重力を変更します。
この事例はパラメータ変更のすべてを内包しています。
この操作を応用することで他のパラメータも変更が可能です。