直接上代码
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ResetModelMeshRenderScaleMyTools
{
[MenuItem("My Tools/模型MeshRenderer的缩放归一化", false)]
public static void ResetModelScale()
{
if (!Selection.activeTransform)
{
Debug.LogError("需要选中根节点!");
return;
}
Transform root = Selection.activeTransform;
for (int i = root.transform.childCount - 1; i >= 0; i--)
{
Transform childTrans = root.transform.GetChild(i);
SetScale(childTrans, root);
}
EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
EditorSceneManager.SaveScene(SceneManager.GetActiveScene());
}
private static void SetScale(Transform tran, Transform root)
{
if (tran.childCount > 0)
{
for (int i = tran.childCount - 1; i >= 0; i--)
{
Transform childTrans = tran.GetChild(i);
SetScale(childTrans, tran);
}
}
if (tran.GetComponent<MeshRenderer>() == null)
{
return;
}
if (tran.localScale == Vector3.one)
{
return;
}
GameObject tempRoot = new GameObject(tran.name);
tempRoot.transform.SetParent(tran, false);
tempRoot.transform.SetParent(root.transform, true);
tran.SetParent(tempRoot.transform, true);
tran.localScale = Vector3.one;
tran.localEulerAngles = Vector3.zero;
tran.localPosition = Vector3.zero;
}
}
试试看看批处理有没有变。