Hi.
First, please forgive my English.
I made an editor with GraphView, which is in UI Builder.
I also made a copy and pasting of nodes and I tried making the copied nodes selected, but I don’t know how to do.
It’s like shader graph. When you copy and paste nodes with Ctrl+C and Crtl+V, the copied nodes are selected.
I tried AddToSelection() and Select() of GraphElement, but it didn’t work.
How can I make it?
It’s the whole code about copy and pasting.
public BehaviorTreeView() //is constructer
{
//others like AddManipulator, get stylesheet...
Undo.undoRedoPerformed += OnUndoRedo;
this.serializeGraphElements += CopyOperation;
this.unserializeAndPaste += PasteOperation;
}
List<NodeBase> nodesToCopy = new List<NodeBase>();
public string CopyOperation(IEnumerable<GraphElement> elements)
{
nodesToCopy.Clear();
foreach (GraphElement n in elements)
{
//NodeView is a class that drived from UnityEditor.Experimental.GraphView.Node
//It has intput/output ports and which node to show as field
NodeView nodeView = n as NodeView;
if(nodeView != null)
{
nodesToCopy.Add(nodeView.node);
}
}
return "Copy Nodes";
}
public void PasteOperation(string operationName, string data)
{
//NodeBase is a class that drived from ScriptableObject
//It has information of node, like guid and position of node
foreach (NodeBase originalNode in nodesToCopy)
{
//CreateNode(System.Type type, UnityEngine.Vector2 position)
//It makes node of which type is type(parameter) in position(parameter)
NodeView n = this.CreateNode(originalNode.GetType(), originalNode.position - new Vector2(2, 2));
}
PopulateView(tree); //== Refresh the editor window
}