LoginSignup
0
0

More than 1 year has passed since last update.

DynamicBoneはアタッチした順番によって挙動が変わる場合がある

Posted at

↓の記事で検証したんですが、同じクラスのコンポーネントの実行順はアタッチした順の逆順になります。
【Unity】同じクラスのコンポーネントの実行順はアタッチした順の逆順になる説

それだけ聞くと、だから何だって感じなんですが、実はこれがDynamicBoneの挙動に影響する場合があります。
以下のような場合です。

DynamicBoneで揺らすオブジェクトにDynamicBoneColliderをアタッチする

DynamicBone"A"と"B"があり、"A"にDynamicBoneCollider"C"がアタッチされていて、"B"は"C"と衝突するように設定されています。
そして、"A"に何らかの力が加わって右に揺れた場合を考えてみます。
DynamicBoneの実行順について_00.png
DynamicBoneの実行順について_01.png

"A"が先に実行された場合

まず"A"が先に実行され、右に揺れます。
DynamicBoneの実行順について_01.png

その後、"B"がコライダーに押しのけられて右に移動します。
DynamicBoneの実行順について_02.png
これは想定通りの動きですね。

"B"が先に実行された場合

問題はここからです。

まず"B"が先に実行されます。何の力も加わっていないので、"B"は動きません。
DynamicBoneの実行順について_03.png

その後、"A"が右に揺れます。
DynamicBoneの実行順について_04.png
この時、すでに"B"の計算は終わっているので"B"は動きません。
DynamicBoneは毎フレームDynamicBoneの影響を受けていない状態から計算するので、この場合では"B"が"A"の動きに影響されて動くことはありません。
DynamicBoneの子オブジェクトに別のDynamicBoneをアタッチした場合も、このような挙動になります。

これでは困りますね。

対策

同じクラスのコンポーネントは最後にアタッチしたものから順に実行されるので、コンポーネントをコピーしてから削除してアタッチし直すことで実行順を変えることが出来ます。
先に実行されて欲しいコンポーネントをアタッチし直しましょう。

この挙動の原因が分からなくて2時間くらいのたうち回ったので、この情報が誰かの役に立てば幸いです…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0