実行時のスケーリング変更

概要

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が参照されます。