Page 1 of 1

アクションノードに付与したデコレータースクリプトが引き起こすOver 1000 interruptsの件について

Posted: 2021/06/14 08:12
by Guest
お世話になっております。

題意通り、ビヘイビアツリーにてアクションノードに付与したデコレーターが"Over 10000 interrupts"と警告を出してフリーズします。

何度も重い判定処理をSelectorが反復していることが原因だと思いますが、対処が思いつきませんでした。
判定処理は扇の範囲内に指定のオブジェクトが入っているかどうかを判定しています。

こういったケースでは何かいい対処はないでしょうか。

回答に際して不明瞭な点があれば指摘していただければと思います

Re: アクションノードに付与したデコレータースクリプトが引き起こすOver 1000 interruptsの件について

Posted: 2021/06/14 08:35
by caitsithware
ご利用ありがとうございます。

"Over 10000 interrupts"は1フレーム中に10000回(実際にはDebugInfiniteLoopSettings.maxLoopCount)以上割り込みされた場合に表示される警告となっており、意図せずその回数分割り込まれているのでしたら実質無限ループになっている可能性が高いです。

例えば
  1. 「扇の範囲内に指定のオブジェクトが入っているかどうか」の条件に合致してアクションノードが実行される。
  2. アクションノードが即時成功/失敗を返す。
  3. 優先度の低いノード(グラフ上で見て右側)へ遷移される。
  4. 優先度の高い「扇の範囲内に指定のオブジェクトが入っているかどうか」が再評価され条件が一致すれば再実行される
  5. 1フレーム中にこれが何度も繰り返される
という状況が考えられるので、範囲内に指定のオブジェクトが入っている間はアクションノードから抜けないようにする必要があります。

アクションノードの成功/失敗条件を見直し、即時成功/失敗を返さないように1フレーム以上アクションノードが実行されるようにしてみてください。