public static Differ getDiffer(Transform node, Transform _node, int i) { int _count = node.childCount; Differ _rootDiffer = Differ.getDifferValue(node, _node, i); if (_count > 0) { List <Differ> _childs = new List <Differ>(); //遍历子对象 for (int _i = 0; _i < node.childCount; _i++) { Transform tmp = node.GetChild(_i); Transform _tmp = _node.GetChild(_i); Differ __differ = Differ.getDiffer(tmp, _tmp, _i); if (__differ != null) { _childs.Add(__differ); } } if (_childs.Count > 0) { if (_rootDiffer == null) { _rootDiffer = new Differ(); _rootDiffer.index = i; } _rootDiffer.child = _childs; } } return(_rootDiffer); }
public void SetNode(Transform node) { if (ExportToJson.IsPrefabAsset(node, true)) { string path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(node); GameObject go = AssetDatabase.LoadAssetAtPath <GameObject>(path); prefabName = go.name; //获取差异数据 Transform _node = go.transform; if (_node.childCount > 0) { differ = new Differ(); for (int i = 0; i < _node.childCount; i++) { if (differ.child == null) { differ.child = new List <Differ>(); } Transform tmp = _node.GetChild(i); Transform _tmp = node.GetChild(i); Differ _differ = Differ.getDiffer(tmp, _tmp, i); if (_differ != null) { differ.child.Add(_differ); } } if (differ.child == null || differ.child.Count == 0) { differ = null; } } return; } nodeTran = node; for (int i = 0; i < nodeTran.childCount; i++) { Transform tmp = nodeTran.GetChild(i); if (child == null) { child = new List <Child>(); } child.Add(ExportToJson.SetChild(tmp)); } }