在我们的项目进行中,通常会有许多修改预制体的人员,为了确保他们对预制体修改的合法性,我们可以使用下面这个工具来做一些合法性的校验,给修改人员相应的提示,防止它们的误修改操作。
主要涉及到的Unity的方法有PrefabStage的prefabStageClosing回调监听,在退出预制体修改时触发。
namespace PrefabUtilityTool
{
public static class CheckPrefabValidTool
{
[InitializeOnLoadMethod]
private static void Load()
{
PrefabStage.prefabStageClosing -= OnPrefabClosed;
PrefabStage.prefabStageClosing += OnPrefabClosed;
}
//仅在关闭时做一次检测
private static void OnPrefabClosed(PrefabStage obj)
{
OnPrefabInstanceSaved(obj.prefabContentsRoot);
//Debug.Log($"OnPrefabClosed {obj.prefabContentsRoot}");
}
//检测它保存的合法性
private static void OnPrefabInstanceSaved(GameObject obj)
{
if (!CheckValidPrefab(obj))
{
EditorUtility.DisplayDialog("错误!", $"{obj.name}检测到不合法预制体修改!", "好的");
}
}
//检测合法性的函数,在这里可以做一些合法性的具体校验
private static bool CheckValidPrefab(GameObject obj)
{
return true;
}
}
}