既知の問題(3.6.10)


過去バージョンの不具合についてのアーカイブです。

もし、再発していましたら不具合フォーラムにご報告お願いいたします。

Arbor 3.6.10

InspectorからArborFSMやBehaviourTreeをコピー&ペーストするとグラフ内のデータスロットの接続が切れる

コピー&ペースト時のデータスロットと接続線の関連付け処理が不十分だったため、データスロットが接続データを追えなくなってしまう問題。

  • 対応状況:修正中。

暫定対処方法

  • Assets/Plugins/Arbor/Internal/Editor/Clipboard.csを開く。
  • 284行目(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;
    				}
    			}
    		}
    	}
    }
    
  • (上記コード追加後の)454行目(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;
    					}
    				}
    			}
    		}
    	}
    }
    
  • (上記コード追加後の)574行目(dest.expanded = expanded;の次の行)あたりに以下のコードを追加。
    MoveDataSlots(dest);
    
  • (上記コード追加後の)615行目(dest.Initialize(nodeGraph, nodeID);の次の行)あたりに以下のコードを追加。
    MoveDataSlots(dest);