↓の記事で検証したんですが、同じクラスのコンポーネントの実行順はアタッチした順の逆順になります。
【Unity】同じクラスのコンポーネントの実行順はアタッチした順の逆順になる説
それだけ聞くと、だから何だって感じなんですが、実はこれがDynamicBoneの挙動に影響する場合があります。
以下のような場合です。
DynamicBoneで揺らすオブジェクトにDynamicBoneColliderをアタッチする
DynamicBone"A"と"B"があり、"A"にDynamicBoneCollider"C"がアタッチされていて、"B"は"C"と衝突するように設定されています。
そして、"A"に何らかの力が加わって右に揺れた場合を考えてみます。
"A"が先に実行された場合
その後、"B"がコライダーに押しのけられて右に移動します。
これは想定通りの動きですね。
"B"が先に実行された場合
問題はここからです。
まず"B"が先に実行されます。何の力も加わっていないので、"B"は動きません。
その後、"A"が右に揺れます。
この時、すでに"B"の計算は終わっているので"B"は動きません。
DynamicBoneは毎フレームDynamicBoneの影響を受けていない状態から計算するので、この場合では"B"が"A"の動きに影響されて動くことはありません。
DynamicBoneの子オブジェクトに別のDynamicBoneをアタッチした場合も、このような挙動になります。
これでは困りますね。
対策
同じクラスのコンポーネントは最後にアタッチしたものから順に実行されるので、コンポーネントをコピーしてから削除してアタッチし直すことで実行順を変えることが出来ます。
先に実行されて欲しいコンポーネントをアタッチし直しましょう。
この挙動の原因が分からなくて2時間くらいのたうち回ったので、この情報が誰かの役に立てば幸いです…