You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
3.1 KiB
C#
82 lines
3.1 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine.SceneManagement;
|
|
#endif
|
|
|
|
namespace FluffyGroomingTool {
|
|
public static class DuplicateCleaner {
|
|
#if UNITY_EDITOR
|
|
[MenuItem("Tools/Fluffy Grooming Tool/Cleanup Duplicates")]
|
|
private static void Cleanup() {
|
|
if (doDuplicateCheck() == 0) {
|
|
Debug.Log("Scene is clean and lean. All good to go.");
|
|
}
|
|
|
|
Debug.Log(
|
|
"Check the following link for info on this issue: https://danielzeller427.gitbook.io/fluffy-grooming-tool/troubleshooting/cleanup-duplicates");
|
|
}
|
|
#endif
|
|
/**
|
|
* There was a previous bug in Fluffy where the hidden GameObject of Fluffy was not cleaned from the project. These objects did not
|
|
* do anything but could contribute to increasing the scene size.
|
|
* This automatically cleans those objects. Only runs once per scene.
|
|
*/
|
|
public static void checkDuplicates() {
|
|
#if UNITY_EDITOR
|
|
var scenePath = SceneManager.GetActiveScene().path;
|
|
if (!PerProjectPreferences.hasKey(scenePath)) {
|
|
PerProjectPreferences.setInt(scenePath, 1);
|
|
doDuplicateCheck();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
private static int doDuplicateCheck() {
|
|
#if UNITY_EDITOR
|
|
var allRenderers = Object.FindObjectsOfType<MeshRenderer>();
|
|
var furRenderers = Object.FindObjectsOfType<FurRenderer>();
|
|
var hairRenderers = Object.FindObjectsOfType<HairRenderer>();
|
|
var leakedObjects = new List<GameObject>();
|
|
|
|
foreach (var go in allRenderers) {
|
|
if (go.name.Contains("FluffyRenderer")) {
|
|
var isLegitObject = false;
|
|
foreach (var furRenderer in furRenderers) {
|
|
if (furRenderer.renderersController.hairMeshRendererObject == go.gameObject ||
|
|
furRenderer.renderersController.motionVectorRendererObject == go.gameObject) {
|
|
isLegitObject = true;
|
|
}
|
|
}
|
|
|
|
foreach (var hairRenderer in hairRenderers) {
|
|
if (hairRenderer.fluffyRenderersController.hairMeshRendererObject == go.gameObject ||
|
|
hairRenderer.fluffyRenderersController.motionVectorRendererObject == go.gameObject) {
|
|
isLegitObject = true;
|
|
}
|
|
}
|
|
|
|
if (!isLegitObject) {
|
|
leakedObjects.Add(go.gameObject);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (leakedObjects.Count > 0) {
|
|
Debug.Log("Cleaned up " + leakedObjects.Count + " objects.");
|
|
foreach (var gameObject in leakedObjects) {
|
|
Object.DestroyImmediate(gameObject);
|
|
}
|
|
|
|
EditorSceneManager.SaveScene(SceneManager.GetActiveScene());
|
|
}
|
|
|
|
return leakedObjects.Count;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
}
|
|
} |