UnityのClothをスクリプトから操る

最近仕事でめっちゃCloth使ったのだが、Clothはスクリプトからcoefficientsを利用することで操れて楽しい。以下、簡単にClothについて箇条書き。

  • Clothがついてると拡大縮小が出来ないが、ClothをDestroyすると可能になる
    • Cloth、実は実行中でもDestroyとAddComponetが可能だったりする
    • パラメータをどこかに保存しておけば布の状態を復元できる
  • Clothの制約、coefficientsはコードから変更できる
    • 通常GUIから変更すると書いてあるが実際はコードから変更可能
    • 普通に左上が原点のマトリクスだった(下にPlaneのcofficientsを変更するコードを貼っておく)
    • これにより動的に布の動き方を制御することが可能
      • 固定点を上部にした状態と、下部にした状態を使い分けたり、布に片方がだけはためくなどの状態を作り出せる
const int meshWidth = 11;
const int meshHeight = 11;
const int meshNum = meshWidth * meshHeight;	

ClothSkinningCoefficient[] frontSkin = new ClothSkinningCoefficient[meshNum];
ClothSkinningCoefficient[] backSkin = new ClothSkinningCoefficient[meshNum];

void Start(){
	for (int i = 0; i < meshNum; i++) {
		frontSkin [i].maxDistance = float.MaxValue;
		frontSkin [i].collisionSphereDistance = float.MaxValue;
		backSkin [i].maxDistance = float.MaxValue;
		backSkin [i].collisionSphereDistance = float.MaxValue;
	}
	for (int i = 0; i < 11; i++) {
		frontSkin [i ].maxDistance = 1.5f;
		frontSkin [i + 11*10].maxDistance = 0;

		backSkin [i + 110].maxDistance = 1.5f;
		backSkin [i].maxDistance = 0;
	}
}

public void ChangeFront(){
	GetComponent<Cloth> ().coefficients = frontSkin;
}