Page 1 of 1

SendTrigger後、無限ループが発生しUnityがクラッシュする

Posted: 2021/08/10 05:41
by Iko2
OS: Windows10
Unity バージョン: 2020.3.12f
Arborバージョン: 3.8.3
再現方法: https://imgur.com/a/qlrPQwb

OnStateBeginでSendTriggerし、常駐ステートからTriggerTransitionでログ出力用のステートにTransition Timing Imeddiateで遷移させると、Unityがクラッシュします。

Editor.logを確認したところ、以下のようなものが大量に出ていました。
*****
ログ
UnityEngine.StackTraceUtility:ExtractStackTrace ()
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:Log (object)
Log:OnStateBegin () (at Assets/Log.cs:9)
Arbor.StateBehaviour:Arbor.Playables.IPlayableBehaviourCallbackReceiver.OnStart () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/StateBehaviour.cs:824)
Arbor.Playables.PlayableBehaviour:CallActiveEvent () (at Assets/Plugins/Arbor/Internal/Scripts/Playables/PlayableBehaviour.cs:80)
Arbor.Playables.PlayableBehaviour:ActivateInternal (bool,bool) (at Assets/Plugins/Arbor/Internal/Scripts/Playables/PlayableBehaviour.cs:212)
Arbor.Playables.PlayableBehaviourExtensions:Activate (Arbor.Playables.PlayableBehaviour,bool,bool) (at Assets/Plugins/Arbor/Internal/Scripts/Playables/PlayableBehaviourExtensions.cs:57)
Arbor.State:Activate (bool) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/State.cs:944)
Arbor.ArborFSMInternal:ChangeState (Arbor.State) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1394)
Arbor.ArborFSMInternal:NextState () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1232)
Arbor.ArborFSMInternal:SendTrigger (string,Arbor.SendTriggerFlags) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1793)
Arbor.ArborFSMInternal:ChangeState (Arbor.State) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1413)
Arbor.ArborFSMInternal:NextState () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1232)
Arbor.ArborFSMInternal:SendTrigger (string,Arbor.SendTriggerFlags) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1793)
Arbor.ArborFSMInternal:ChangeState (Arbor.State) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1413)
Arbor.ArborFSMInternal:NextState () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1232)
Arbor.ArborFSMInternal:SendTrigger (string,Arbor.SendTriggerFlags) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1793)
Arbor.ArborFSMInternal:ChangeState (Arbor.State) (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1413)
Arbor.ArborFSMInternal:NextState () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:1232)
Arbor.ArborFSMInternal:OnUpdate () (at Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.cs:547)
Arbor.NodeGraph:CallOnUpdate (bool) (at Assets/Plugins/Arbor/Internal/Scripts/NodeGraph.cs:3576)
Arbor.NodeGraph:Update () (at Assets/Plugins/Arbor/Internal/Scripts/NodeGraph.cs:3569)
*****

このログが大量に出るので無限ループしていると思われます。


ArborFSMInternal.cs:1413
ArborFSMInternal.cs:1232
ArborFSMInternal.cs:1793
は、回数を重ねるごとに増えていきます。



(画像の「Log」クラス)
public class Log : StateBehaviour
{
public override void OnStateBegin()
{
Debug.Log("ログ");
}
}

Re: SendTrigger後、無限ループが発生しUnityがクラッシュする

Posted: 2021/08/10 06:48
by caitsithware
ご報告ありがとうございます。

確認したところ再現できましたので修正いたします。
発生条件としましては、「SendTriggerの送り先が自FSM」かつ「常駐ステートのTriggerTransitionからImmediateで遷移する」で間違いなさそうです。

暫定対処方法:
  • Assets/Plugins/Arbor/Internal/Scripts/StateMachine/ArborFSMInternal.csを開く。
  • 1410行目から1415行目(SendTrigger呼び出しループ部分)を以下のように変更する。

    Code: Select all

    Trigger[] triggers = _Triggers.ToArray();
    _Triggers.Clear();
    
    for (int i = 0; i < triggerCount; ++i)
    {
    	Trigger trigger = triggers[i];
    	SendTrigger(trigger.message, trigger.flags);
    }
または、SendTriggerの送り先が自FSMになっているのは遷移線の省略程度の意味しかないかと思うのでGoToTransition等で普通に遷移するようにしてください。

Re: SendTrigger後、無限ループが発生しUnityがクラッシュする

Posted: 2021/08/13 23:21
by caitsithware
Arbor 3.8.4にて修正いたしました。
アセットストアから再DLし、リリースノートやreadme記載の更新手順に従って再インポートしてください。
Arbor 3.8.4 リリース | Arbor 3

これにてこのトピックはクローズといたします。