#if UNITY_EDITOR using System.Collections.Generic; using UnityEditor; using UnityEngine; public class DynamicBonesCollidersFiller : UnityEditor.EditorWindow { //Created By Plague <3 //Copyright Reserved [MenuItem("GameObject/Set DynamicBones To Have All Colliders", false, -10)] private static void Set() { //Check If The User Has Even Got A GameObject Selected - Prevents NullReferenceExceptions Due To Such. if (Selection.gameObjects.Length == 0) { Debug.LogError("You Have No GameObjects Selected!"); return; } //Define Object Reference GameObject RootArmature = null; //Define Variables int DynBonesFound = 0; //Retrieve The Armature Of The Avatar //Enumerate The First Child GameObject Of Each GameObject for (int i = 0; i < Selection.activeGameObject.transform.root.childCount; i++) { //Object Reference GameObject obj2 = Selection.activeGameObject.transform.root.GetChild(i).gameObject; //Check If Found GameObject Is The Armature if (obj2.name == "Armature") { //If So, Add It To The Object Reference For Later Use RootArmature = obj2; break; } } //If No Armature Was Found, Don't Continue if (RootArmature == null) { Debug.LogError("Armature == null!"); return; } //Recursively Check Every GameObject In The Armature For DynamicBoneColliders Helpers.CheckTransform(RootArmature.transform); //Check If No DynamicBoneColliders Were Found - Prevents NullReferenceExceptions Due To Such. if (Helpers.DynamicBoneColliders == null) { Debug.LogError("Helpers.DynamicBoneColliders == null!"); return; } //Enumerate Selected GameObjects foreach (var CurrentGameObject in Selection.gameObjects) { //Ignore Empty GameObjects if (CurrentGameObject == null) { continue; } //Enumerate DynamicBones On GameObject foreach (DynamicBone DynBone in CurrentGameObject.GetComponents()) { //Ignore Invalid DynamicBone Components In GameObject if (DynBone == null) { continue; } //Raise DynBonesFound By 1 DynBonesFound++; //Set Colliders On DynamicBone DynBone.m_Colliders = Helpers.DynamicBoneColliders; } } //If No DynamicBones Were Found And Therefore Effected, Print To Console if (DynBonesFound == 0) { Debug.LogError("No Dynamic Bones Were Found So None Were Effected!"); } } public class Helpers { //Define Object Reference public static List DynamicBoneColliders; //Init public static void CheckTransform(Transform transform) { //Reset Object Reference DynamicBoneColliders = new List(); //Don't Act On A Invalid Transform if (transform == null) { return; } //Call Recursive Method GetChildren(transform); } //Recursive Method public static void GetChildren(Transform transform) { //If There Is A DynamicBoneCollider On This Transform if (transform.GetComponent()) { //Add It To List For Use Later DynamicBoneColliders.Add(transform.GetComponent()); } //Recursive Re-Call for (int i = 0; i < transform.childCount; i++) { GetChildren(transform.GetChild(i)); } } } } #endif