void Generate() { SkinnedMeshRenderer result = XUtility.FindOrCreateComponent <SkinnedMeshRenderer>(this); List <Transform> skeleton = new List <Transform>(); this.gameObject.GetComponentsInChildren <Transform>(true, skeleton); List <SkinnedMeshRenderer> renderers = new List <SkinnedMeshRenderer>(); foreach (Part p in this.mParts.Values) { if (p.element == null) { continue; } if (p.method == Method.Dress) { SkinnedMeshRenderer[] rs = p.element.GetComponentsInChildren <SkinnedMeshRenderer>(true); renderers.AddRange(rs); if (p.element.transform.parent != this.transform) { p.element.transform.parent = this.transform; } } else { // if p is not changed, dont destroy and attach if (p.changed) { GameObject locator = XUtility.FindGameObjectRecursively(this.gameObject, p.locator); XUtility.DestroyChildren(locator); XUtility.AttachGameObject(locator, p.element); p.element.SetActive(true); //XUtility.SetVisibleRecursively(p.element, true); } } } XUtility.CombineSkinnedMeshRenderer(result, skeleton, renderers); result.updateWhenOffscreen = true; }
public static GameObject FindGameObjectRecursively(GameObject root, string name) { if (root == null) { return(null); } if (root.name == name) { return(root); } GameObject result = null; foreach (Transform t in root.transform) { result = XUtility.FindGameObjectRecursively(t.gameObject, name); if (result != null) { return(result); } } return(null); }
public static GameObject FindGameObjectRecursively(GameObject root, int instanceId) { if (root == null) { return(null); } if (root.GetInstanceID() == instanceId) { return(root); } GameObject result = null; foreach (Transform t in root.transform) { result = XUtility.FindGameObjectRecursively(t.gameObject, instanceId); if (result != null) { return(result); } } return(null); }