Page 1 of 1

リルートが切断される

Posted: 2018/07/24 13:07
by kudou
arbor3.2.1
unity2018 1.0 f2

リルートを作成するとエラーが発生して切断されます。

Image

Code: Select all

   [AddComponentMenu("")]
    public class StringFormatCalculator : Calculator
    {
        [ConstantMultiline]
        public FlexibleString format;
        public List<InputSlotAny> args;
        public OutputSlotString outputValue;

        public override void OnCalculate()
        {
            var objs = new object[args.Count];
            for(int i = 0; i < args.Count; i++)
            {
                args[i].GetValue(ref objs[i]);
            }
             
            outputValue.SetValue(String.Format(format.value, objs));
        }

        public override bool OnCheckDirty()
        {
            return true;
        }
    }
    
StackOverflowException: The requested operation caused a stack overflow.
Arbor.NodeGraph.CheckLoopDataBranch (Int32 inputNodeID, UnityEngine.Object inputObj, Int32 outputNodeID, UnityEngine.Object outputObj) (at Assets/Plugins/Arbor/Internal/Scripts/NodeGraph.cs:2425)

NullReferenceException: Object reference not set to an instance of an object
ArborEditor.NodeGraphEditor.DrawDataBranch (Arbor.DataBranch branch) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:1094)
ArborEditor.NodeGraphEditor.DrawDataBranchies () (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:1169)
ArborEditor.NodeGraphEditor.BeginGraphGUI (Boolean useOverlayLayer) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:486)
ArborEditor.ArborEditorWindow.GraphGUI () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:2016)
ArborEditor.ArborEditorWindow.GraphViewGUI () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:1975)
ArborEditor.ArborEditorWindow.<SetupGUI>m__C () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:2416)
UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:206)

NullReferenceException: Object reference not set to an instance of an object
ArborEditor.NodeGraphEditor.IsHoverBezier (Vector2 mousePosition, Arbor.Bezier2D bezier, Boolean arrow, Single arrowWidth, System.Single& distance) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:883)
ArborEditor.NodeGraphEditor.IsHoverBezier (Vector2 mousePosition, Arbor.Bezier2D bezier, System.Single& distance) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:916)
ArborEditor.NodeGraphEditor.DrawDataBranch (Arbor.DataBranch branch) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:1008)
ArborEditor.NodeGraphEditor.DrawDataBranchies () (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:1169)
ArborEditor.NodeGraphEditor.BeginGraphGUI (Boolean useOverlayLayer) (at Assets/Plugins/Arbor/Internal/Editor/GraphEditors/NodeGraphEditor.cs:486)
ArborEditor.ArborEditorWindow.GraphGUI () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:2016)
ArborEditor.ArborEditorWindow.GraphViewGUI () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:1975)
ArborEditor.ArborEditorWindow.<SetupGUI>m__C () (at Assets/Plugins/Arbor/Internal/Editor/Windows/ArborEditorWindow.cs:2416)
UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:206)

Re: リルートが切断される

Posted: 2018/07/24 14:06
by caitsithware
ご報告ありがとうございます。

再現確認を行いましたが、確認できませんでした。
以下の手順で行いましたが、ほかに補足などありますでしょうか?
  • Unty2018.1.0f2でプロジェクトを作成しArbor3.2.1をインポート
  • 貼っていただいたStringFormatCalculatorをAssetsフォルダ下に作成。
  • Hierarchyの「Create」ボタンをクリックし、「Arbor / ArborFSM」を選択。
  • ArborFSMオブジェクトを選択し、Inspectorで「Open Editor」ボタンをクリック。
  • Arbor Editorのグラフビューを右クリックし、「演算ノード作成」を選択。
  • 「String / String.Concat」を選択。
  • 再度、Arbor Editorのグラフビューを右クリックし、「演算ノード作成」を選択。
  • 「Scripts / StringFormatCalculator」を選択。
  • StringFormatCalculatorノードの「Args / Size」を「1」に変更。
  • Striing.Concatの「Result」とStringFormatCalculatorの「Element 0」を接続。
  • データの接続線を右クリックし、「リルート」を選択。
CheckInsertDateReroute.gif
CheckInsertDateReroute.gif (1.21 MiB) Viewed 3924 times
また、Arborの更新をインポートする際に、readmeやリリースノートにある「更新手順」を確認していただけたでしょうか?
上書きインポートをするだけですと、場合によっては不要なファイルが残ったり、更新前のデータが不自然に残るなどにより、Arbor Editorに問題が発生する場合があります。
もし上書きインポートのみしていましたら、一度ご確認の上インポートし直してください。
(また、Unityを再起動するだけでも正常動作に戻る可能性もあります)

ご不便おかけして申し訳ありませんが、ご確認よろしくお願いします。

Re: リルートが切断される

Posted: 2018/07/24 14:39
by kudou
接続元を削除して新規に作り直したものからの接続線のリルートはエラーが発生しませんでした。
Arborを更新手順のとおりにインポートしなおしてみましたが発生しておりました。
作り直してからはエラーはでていないので、様子を見てみます。

現在制作しているゲームで使用するクラスが含まれているので、そのままは使えませんが参考に接続元のソースも貼り付けます。
他になにか必要な情報とかはございますか?
まことに申し訳ありませんが、本日はもう就寝しますので返信は明日の夜になると思います。

Code: Select all

    [AddComponentMenu("")]
    public class ItemAssetCalculator : Calculator
    {
        public FlexibleItemAsset itemAsset;
        public OutputSlotInt uid;
        public OutputSlotString gameName;
        public OutputSlotInt num;
        public OutputSlotInt maxNum;
        public OutputSlotInt level;
        public OutputSlotBool got;

        public override void OnCalculate()
        {
            var asset = itemAsset.value;
            uid.SetValue(asset.uid);
            gameName.SetValue(asset.gameName);
            num.SetValue(SaveData.Instance.GetPartyStatus(0).itemBag.GetItem(asset.uid).num);
            maxNum.SetValue(asset.maxNum);
            var itemDictionary = SaveData.Instance.itemDictionary[asset.uid];
            level.SetValue(itemDictionary.level);
            got.SetValue(itemDictionary.got);
        }

        public override bool OnCheckDirty()
        {
            return true;
        }
    }

Re: リルートが切断される

Posted: 2018/07/24 22:15
by caitsithware
ご確認ありがとうございました。

接続元ノードの削除でエラーが出なくなったのですね。
もしかすると、以前作業した際に何らかの理由で参照切れが起きていた可能性もありますね。
(例えば、以前の更新時にArborを上書きインポートをして不完全な状態で作業を継続していたとか、UnityやArborの何らかの不具合で既に参照が切れていた、など)

また発生するようでしたら、その発生するグラフのシーンファイルかプレハブファイルのみでも添付していただけると助かります。
yamlを直接見て不自然な参照切れ等がないか確認したいと思います。