using System.Text; using UnityEngine; namespace BingoBrain.Core { public static class GameObjectExtend { public static void SetParent(this GameObject gameObject, GameObject parentGo, bool worldPositionStays = false) { if (parentGo) { gameObject.transform.SetParent(parentGo.transform, worldPositionStays); } } public static void SetParent(this GameObject gameObject, Transform parentTf, bool worldPositionStays = false) { if (parentTf) { gameObject.transform.SetParent(parentTf, worldPositionStays); } } public static void SetLayer(this GameObject gameObject, string layerName) { Transform[] transArr = gameObject.transform.GetComponentsInChildren(); for (int i = 0; i < transArr.Length; i++) { transArr[i].gameObject.layer = LayerMask.NameToLayer(layerName); } } public static void SetLayer(this GameObject gameObject, LayerMask layer) { Transform[] transArr = gameObject.transform.GetComponentsInChildren(); for (int i = 0; i < transArr.Length; i++) { transArr[i].gameObject.layer = layer; } } public static void DestroyAllChild(this GameObject gameObject) { foreach (Transform child in gameObject.transform) { Object.Destroy(child.gameObject); } } public static T GetSoleComponent(this GameObject gameObject) where T : Component { T component = gameObject.GetComponent(); if (component == null) component = gameObject.AddComponent(); return component; } public static string GetGameObjectRelativePath(this GameObject gameObject, GameObject child) { string parentPath = gameObject.GetGameObjectPath(); string childPath = child.GetGameObjectPath(); if (childPath.StartsWith(parentPath)) { return childPath.Remove(0, parentPath.Length + 1); } else { return string.Empty; } } public static string GetGameObjectPath(this GameObject gameObject) { Transform transform = gameObject.transform; StringBuilder sb = new StringBuilder(); sb.Append(transform.name); while (transform.parent != null) { transform = transform.parent; sb.Insert(0, transform.name + "/"); } return sb.ToString(); } } }