過去バージョンの不具合についてのアーカイブです。
もし、再発していましたら不具合フォーラムにご報告お願いいたします。
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);