AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

VRMキャラの全ボーンにプレイヤーの両手のコライダーを登録する

 VRoidでExportしたVRMのsecondaryという要素に、すべてのSpringBone登録があり、そこにあるColliderGroupsに、反発するコライダーがすべて登録してある。
 そこで、そのColliderGroupsをすべて取得して、右手と左手のSpringBoneColliderを自動的に登録する。
  ob[0]は、ドレスキャラのsecondaryを登録してある。
 playerRightHandは、右手のSpringBoneCollider
 playerLeftHandは、左手のSpringBoneCollider
 ColliderGroup配列の要素を2つふやして右手・左手のコライダーを追加登録。
 動的な配列の追加は色々やり方があるみたいだけど、とりあえずこれでやってみた。
 まずは動くことが大事。

 VRM.VRMSpringBone[] bones = ob[0].GetComponents<VRM.VRMSpringBone>();

for (int i=0;i<bones.Length;i++)
{
    VRM.VRMSpringBoneColliderGroup[] a = bones[i].ColliderGroups;
    VRM.VRMSpringBoneColliderGroup[] b = new VRM.VRMSpringBoneColliderGroup[a.Length + 2];
    System.Array.Copy(bones[i].ColliderGroups, b, a.Length);
    b[a.Length] = playerRightHand;
    b[a.Length + 1] = playerLeftHand;
    bones[i].ColliderGroups = b;
}

 これで、髪の毛・胸・スカートといったボーンがある部分すべてに干渉できるようになった。
 ま、揺れる程度だけど。
 スカートをつまんで持ち上げようなどとする場合は、スカートボーンを掴んで、動かすといった動作でできそうな気がする。
 LateUpdateのタイミングでSpringBoneが動いているので、つまんだ場合の位置の設定は、さらにその後に動く必要があるかな。

 あと、スカートが太ももと反発してる理由が分かった。
 スカートのボーンが太ももの子供になっている。
 だから太ももが動くとスカートが連動して動いているだけで反発しているわけじゃない。
 スカートのボーンは縦糸しかないので、横糸が無い。だからSpringBoneとしては反発できないけど、横糸を作るにはClothシミュレーションみたいな処理が必要なので、とりあえず簡単にやるならこれでいいのだろう。