Known Issues(3.6.10)


An archive of past version defects.

If there is a recurrence, please report it to the Bug Report Forum.

Arbor 3.6.10

Copying and pasting ArborFSM or BehaviourTree from Inspector disconnects the data slot in the graph

The problem that the data slot cannot keep track of the connection data because the process of associating the data slot and the connection line during copy and paste was insufficient.

  • Status: Fixing.

Temporary solution

  • Open Assets/Plugins/Arbor/Internal/Editor/Clipboard.cs.
  • Add the following code around line 284 (the line next to “ComponentUtility.useEditorProcessor = cachedEnabled;”).
    for (int i = 0; i < dest.dataBranchRerouteNodes.count; i++)
    {
    	var rerouteNode = dest.dataBranchRerouteNodes[i];
    	if (rerouteNode != null)
    	{
    		RerouteSlot slot = rerouteNode.link;
    		if (slot != null)
    		{
    			slot.nodeGraph = dest;
    		}
    
    		IInputSlot inputSlot = slot as IInputSlot;
    		if (inputSlot != null)
    		{
    			DataBranch branch = inputSlot.GetInputBranch();
    			if (branch != null)
    			{
    				branch.inBehaviour = dest;
    				branch.inNodeID = rerouteNode.nodeID;
    			}
    		}
    
    		IOutputSlot outputSlot = slot as IOutputSlot;
    		if (outputSlot != null)
    		{
    			for (int j = 0; j < outputSlot.GetOutputBranchCount(); j++)
    			{
    				DataBranch branch = outputSlot.GetOutputBranch(j);
    				if (branch != null)
    				{
    					branch.outBehaviour = dest;
    					branch.outNodeID = rerouteNode.nodeID;
    				}
    			}
    		}
    	}
    }
    
  • Add the following code around line 454 (after adding the above code) (the line before “static void CopyChildGraphs (NodeBehaviour dest)”).
    static void MoveDataSlots(NodeBehaviour behaviour)
    {
    	NodeGraph nodeGraph = behaviour.nodeGraph;
    
    	for (int i = 0; i < behaviour.dataSlotFieldCount; i++)
    	{
    		var dataSlotField = behaviour.GetDataSlotField(i);
    		if (dataSlotField != null)
    		{
    			DataSlot slot = dataSlotField.slot;
    			if (slot != null)
    			{
    				slot.nodeGraph = nodeGraph;
    			}
    
    			IInputSlot inputSlot = slot as IInputSlot;
    			if (inputSlot != null)
    			{
    				DataBranch branch = inputSlot.GetInputBranch();
    				if (branch != null && branch.inBehaviour != behaviour)
    				{
    					branch.inBehaviour = behaviour;
    				}
    			}
    
    			IOutputSlot outputSlot = slot as IOutputSlot;
    			if (outputSlot != null)
    			{
    				for (int j = 0; j < outputSlot.GetOutputBranchCount(); j++)
    				{
    					DataBranch branch = outputSlot.GetOutputBranch(j);
    					if (branch != null && branch.outBehaviour != behaviour)
    					{
    						branch.outBehaviour = behaviour;
    					}
    				}
    			}
    		}
    	}
    }
    
  • Add the following code around line 574 (after the above code is added) (the line next to “dest.expanded = expanded;”).
    MoveDataSlots(dest);
    
    
  • Add the following code around line 615 (after the above code is added) (the line next to “dest.Initialize (nodeGraph, nodeID);”).
    MoveDataSlots(dest);