/// <summary> /// 获取指定物体的各层级顺序数据(即各层级的sibling Index) /// </summary> /// <param name="tran">指定物体</param> public static GameObjectHierarchyOrderData GetHierarchyOrderData(Transform tran) { GameObjectHierarchyOrderData orderData = new GameObjectHierarchyOrderData(tran.gameObject); Transform parent = tran; while (parent) { orderData.orderData.Insert(0, parent.GetSiblingIndex()); parent = parent.parent; } return(orderData); }
//比较两个物体的层级顺序(true: a的层级顺序>b的层级顺序, false: a < b) public static bool CompareGameObjectHierarchyOrder(GameObjectHierarchyOrderData a, GameObjectHierarchyOrderData b) { int count_a = a.orderData.Count; int count_b = b.orderData.Count; int compareCount = Mathf.Min(count_a, count_b); //先比较相同的层级 for (int i = 0; i < compareCount; i++) { if (a.orderData[i] != b.orderData[i]) { return(a.orderData[i] < b.orderData[i]); //同一层级内,sibling越小,处于的位置就越靠上 } } return(count_a < count_b); //如果前面没有返回,说明这两个物体为父子关系(这里父子可以指多层的父子关系),那么只要比较层级数量,层级数量越小的越靠上 }