概要
v1.7.2より実行時にスケーリングが可能となりました。
またv1.7.6よりマイナススケール(フリップ)が可能となりました。
ただし、これには幾つかの制約があります。
ここではその制約とスケーリング時の注意点について記載しておきます。
Unityバージョンによる制約
Unity2019.2.13以前を使用する場合は、スケーリングに対して次の制約が発生します。
Unity2019.2.14以上を使用する場合は、このような制約はありません。
パフォーマンスへの影響
Unity2019.2.13以前ではTransformのスケーリング取得がメインスレッドでしか行なえません。
これはJobSystem + Burstコンパイラの恩恵を受けられないことを意味します。
従って、クロスコンポーネントで使用するボーン(Transform)の数に比例してパフォーマンスが多少低下します。
この負荷はプロファイラの[ReadBoneScale]で確認することが可能です。
Unity2019.2.14以上では、このようなパフォーマンスの低下はありません。
MagicaPhysicsManagerの設定
Unity2019.2.13以前で実行時スケーリングを有効にするには、MagicaPhysicsManagerの[Update Bone Scale]をONにする必要があります。
OFF(デフォルト)の場合は、実行時スケーリングは機能しませんので注意してください。
また、現在はワールド全体に対してのみ、実行時スケーリングの有無を指定できます。
クロスコンポーネント個別には指定できませんので注意してください。
Unity2019.2.14以上では、この指定は不要なので表示されません。
MagicaClothデータバージョンによる制約
実行時スケーリングを行うためには、MagicaClothにスケーリング用のデータが必要です。
このため、MagicaCloth1.7.2以上のバージョンでデータを作成する必要があります。
もし、データが古い場合は次のようにクロスインスペクターに警告が表示されます。
この警告は無視できますが、実行時スケーリングは有効となりませんので注意してください。
[Create]ボタンを押して再度データを作成すれば、この警告は表示されなくなります。
スケーリングの制約
キャラクタのスケーリングには幾つかの制約があります。
基本的には均等スケーリングを行っていれば特に問題はありません。
次はスケーリング状態に別の制限となります。
状態 | 制約 | 説明 |
均等スケーリング | ○ | xyzを均等にスケーリングする場合には特に制限はありません。 |
不均等スケーリング | ✕ | xyzを不均等にスケーリングする場合、衝突判定が正確に計算できません。 非推奨となります。 |
マイナススケール (フリップ) |
△ | マイナススケールはxyzの1つの軸のみに制限されます。 2つ以上の軸をマイナススケールに設定することはできません。 |
スケール時のシミュレーション動作
スケール後のクロスシミュレーション動作は、スケール前(100%)のシミュレーション動作をそのまま引き継ぎます。
例えばキャラクタを10倍に拡大したとしても、そのキャラクタのクロスシミュレーションは等倍の時と見た目が変わりません。
縮小時も同じです。
従って、1mの布を10mに拡大したとしても、実際の10mの布とは異なる動作となります。
これはリアル性よりもゲームでの利用を想定してこのような設定になっています。
スケーリング判定
クロスコンポーネントは[World Influence]パラメータの[Influence Target]ボーンをスケーリングの判定に使用します。
つまり、ここで指定したボーンのスケールを見てシミュレーションに反映しています。
[Influence Target]が(None)の場合は、自身のコンポーネントのTransformが参照されます。