//------------------------------------------------------------------------- protected void SelectAllInstances(AlphaMeshColliderRegistry registry) { int numInstances = 0; foreach (AlphaMeshColliderRegistry.ColliderGroup colliderGroup in registry.mColliderGroups) { if (colliderGroup.mAlphaMeshColliderObjects != null) { numInstances += colliderGroup.mAlphaMeshColliderObjects.Count; } } GameObject[] newSelection = new GameObject[numInstances]; int selectionIndex = 0; foreach (AlphaMeshColliderRegistry.ColliderGroup colliderGroup in registry.mColliderGroups) { if (colliderGroup.mAlphaMeshColliderObjects != null) { foreach (System.WeakReference colliderInstanceRef in colliderGroup.mAlphaMeshColliderObjects) { AlphaMeshCollider instance = (AlphaMeshCollider)colliderInstanceRef.Target; newSelection[selectionIndex++] = instance.gameObject; } } } Selection.objects = newSelection; }
//------------------------------------------------------------------------- public override void OnInspectorGUI() { AlphaMeshColliderRegistry registry = (AlphaMeshColliderRegistry)target; //EditorGUIUtility.LookLikeInspector(); EditorGUILayout.TextField("Collider Groups", registry.mColliderGroups.Count.ToString()); foreach (AlphaMeshColliderRegistry.ColliderGroup colliderGroup in registry.mColliderGroups) { EditorGUI.indentLevel = 0; // Indent 0 string path = colliderGroup.mFullColliderMeshPath; int pointCount = 0; if ((colliderGroup.FirstColliderMesh) && (colliderGroup.FirstColliderMesh.triangles != null) && (colliderGroup.FirstColliderMesh.triangles.Length > 0)) { pointCount = colliderGroup.FirstColliderMesh.triangles.Length / 6; } else if (colliderGroup.mAlphaMeshColliderObjects != null && colliderGroup.mAlphaMeshColliderObjects.Count != 0) { AlphaMeshCollider firstInstance = (AlphaMeshCollider)colliderGroup.mAlphaMeshColliderObjects[0].Target; pointCount = firstInstance.ColliderRegionsTotalMaxPointCount; } else if (colliderGroup.mGeneratedColliderData != null && colliderGroup.mGeneratedColliderData.Length > 0 && colliderGroup.mGeneratedColliderData[0].mOutlineAlgorithm != null) { pointCount = colliderGroup.mGeneratedColliderData[0].mOutlineAlgorithm.MaxPointCount; } bool showGroup = mShowGroupAtPath.ContainsKey(path) && mShowGroupAtPath[path]; string foldoutString = System.IO.Path.GetFileName(path); if (pointCount != 0) { foldoutString += "\t [" + pointCount + " vertices]"; } if (colliderGroup.mAlphaMeshColliderObjects != null) { foldoutString += "\t " + colliderGroup.mAlphaMeshColliderObjects.Count + "x"; } mShowGroupAtPath[path] = EditorGUILayout.Foldout(showGroup, foldoutString); if (mShowGroupAtPath[path]) { EditorGUI.indentLevel = 1; // Indent 1 EditorGUILayout.TextField("Collider Mesh Path", path); if (pointCount != 0) { EditorGUILayout.IntField("Outline Vertex Count", pointCount); } else { EditorGUILayout.TextField("Outline Vertex Count", "<not yet calculated>"); } EditorGUILayout.ObjectField("Mesh", colliderGroup.FirstColliderMesh, typeof(Mesh), true); if (colliderGroup.mAlphaMeshColliderObjects == null) { EditorGUILayout.LabelField("No Instances"); } else { int index = 1; foreach (System.WeakReference colliderInstanceRef in colliderGroup.mAlphaMeshColliderObjects) { AlphaMeshCollider instance = (AlphaMeshCollider)colliderInstanceRef.Target; EditorGUILayout.ObjectField("Instance " + index++, instance, typeof(AlphaMeshCollider), true); } if (GUILayout.Button("Select Instances")) { GameObject[] newSelection = new GameObject[colliderGroup.mAlphaMeshColliderObjects.Count]; int selectionIndex = 0; foreach (System.WeakReference colliderInstanceRef in colliderGroup.mAlphaMeshColliderObjects) { AlphaMeshCollider instance = (AlphaMeshCollider)colliderInstanceRef.Target; newSelection[selectionIndex++] = instance.gameObject; } Selection.objects = newSelection; } } } } if (GUILayout.Button("Select All Instances")) { SelectAllInstances(registry); } EditorGUI.indentLevel = 0; //EditorGUIUtility.LookLikeControls(); }
//------------------------------------------------------------------------- protected void SelectAllInstances(AlphaMeshColliderRegistry registry) { int numInstances = 0; foreach (AlphaMeshColliderRegistry.ColliderGroup colliderGroup in registry.mColliderGroups) { if (colliderGroup.mAlphaMeshColliderObjects != null) { numInstances += colliderGroup.mAlphaMeshColliderObjects.Count; } } GameObject[] newSelection = new GameObject[numInstances]; int selectionIndex = 0; foreach (AlphaMeshColliderRegistry.ColliderGroup colliderGroup in registry.mColliderGroups) { if (colliderGroup.mAlphaMeshColliderObjects != null) { foreach (System.WeakReference colliderInstanceRef in colliderGroup.mAlphaMeshColliderObjects) { AlphaMeshCollider instance = (AlphaMeshCollider) colliderInstanceRef.Target; newSelection[selectionIndex++] = instance.gameObject; } } } Selection.objects = newSelection; }