//--------------------------------------------------------------------- public static Transform GetObject(string categoryName) { if (!IsInitialize()) { return(null); } // Find path or name if (m_CategoryMap.ContainsKey(categoryName)) { return(m_CategoryMap[categoryName]); } // Not Path if (categoryName.Contains("/")) { CreateObject(categoryName); return(m_CategoryMap[categoryName]); } // Find any contains the name foreach (var category in m_CategoryMap) { if (category.Key.Contains(categoryName)) { return(category.Value); } } // Lookup unknown node Transform categoryObject = m_UnknownParent.Find(categoryName); if (categoryObject != null) { return(categoryObject); } // Create to unknown child GameObject newObject = new GameObject(); newObject.name = categoryName; CClientCommon.AttachChild(m_UnknownParent, newObject.transform, true); newObject.transform.position = Vector3.zero; newObject.transform.rotation = Quaternion.identity; CClientCommon.NormalizeTransform(newObject); return(newObject.transform); }
//--------------------------------------------------------------------- public static bool Attach(Transform transform, string category, bool inheritLayer) { Transform categoryObject = GetObject(category); if (categoryObject == null) { return(false); } CClientCommon.SaveTransform(transform); CClientCommon.AttachChild(categoryObject, transform, inheritLayer); CClientCommon.RevertTransform(transform); if (Application.platform == RuntimePlatform.WindowsEditor) { UpdateCategoryCount(transform, categoryObject, category); } return(true); }
//--------------------------------------------------------------------- private static GameObject CreateObjectImpl(string category) { string[] pathItems = category.Split('/'); if (pathItems.Length == 0) { return(null); } GameObject categoryObject = null; GameObject parentObject = null; string currentPath = ""; for (int index = 0; index < pathItems.Length; ++index) { string itemName = pathItems[index]; if (currentPath.Length == 0) { currentPath += itemName; Transform[] transforms = GameObject.FindObjectsOfType( typeof(Transform)) as Transform[]; for (int i = 0; i < transforms.Length; ++i) { Transform child = transforms[i]; if (child.parent != null) { continue; } if (child.name == itemName) { categoryObject = child.gameObject; break; } } } else { currentPath += "/" + itemName; categoryObject = GameObject.Find(currentPath); } if (categoryObject == null) { categoryObject = new GameObject(); categoryObject.name = itemName; if (parentObject != null) { CClientCommon.AttachChild( parentObject.transform, categoryObject.transform, true); } else { //categoryObject.AddComponent<ImmortalComponent>(); UnityEngine.Object.DontDestroyOnLoad(categoryObject); } } parentObject = categoryObject; } if (categoryObject != null) { m_CategoryMap.Add(category, categoryObject.transform); } return(categoryObject); }