void CreateNodes(Node node, NodeObject parent, int layer) { GameObject go = Instantiate(nodeObject); NodeObject nodeObj = go.GetComponent <NodeObject>(); nodes.Add(nodeObj); nodeObj.node = node; // In the Json, the splitrule is only a string, we want to know which actual class the rule belongs to nodeObj.DetectSplitrule(); nodeObj.parent = parent; nodeObj.layer = layer; if (layer > highestNodeLayer) { highestNodeLayer = layer; } //if the parent is not null, set the previous node as the parent of this node if (parent != null) { //go.transform.SetParent(parent.transform); parent.childrenObjects.Add(nodeObj); } // if children are null, then it is a leaf if (node.children.Length == 0) { Debug.Log("Null children", nodeObj); return; } for (int i = 0; i < node.children.Length; i++) { if (node.children[i] != null) { // set up the edge EdgeObject edge = Instantiate(edgeObject); edge.transform.SetParent(go.transform); nodeObj.edges.Add(edge); edge.splitText.text = node.children[i].split; CreateNodes(node.children[i].targetNode, nodeObj, nodeObj.layer + 1); } } }