在工作的时候因为需要去调每一个模型的LOD细节度数过于麻烦,而自己去写的一个LOD的批量修改器。
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
[ExecuteInEditMode]
public class LodsEditorWindow : EditorWindow
{
[SerializeField]
public LODGroup Lods;
[SerializeField]
public List<LODGroup> LodsList = new List<LODGroup>();
public SerializedProperty _Lods;
public SerializedProperty _LodsList;
public SerializedObject LodsHelper;
void OnEnable()
{
LodsHelper = new UnityEditor.SerializedObject(this);
_Lods = LodsHelper.FindProperty("Lods");
_LodsList = LodsHelper.FindProperty("LodsList");
}
[MenuItem("GameObject/骚操作/Lod批量修改器")]
static void AddWindow()
{
LodsEditorWindow window = (LodsEditorWindow)EditorWindow.GetWindow(typeof(LodsEditorWindow), false, "Lod批量修改器");
window.Show();
}
private string text;
private string WaringText = "";
void OnGUI()
{
EditorGUILayout.LabelField(WaringText);
LodsHelper.Update();
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(_Lods, new GUIContent("模板LODs"), true);
if (GUILayout.Button("清除", GUILayout.Width(150)))
{
Lods = null;
}
EditorGUILayout.PropertyField(_LodsList, new GUIContent("需要修改的LODs列表"), true);
if (GUILayout.Button("清除列表", GUILayout.Width(150)))
{
LodsList.Clear();
}
if (GUILayout.Button("以模板Lods批量修改Lods列表里的值", GUILayout.Width(200)))
{
if (Lods)
{
string[,] LodName = new string[10, 10];
for (int i = 0; i < Lods.GetLODs().Length; i++)
{
for (int j = 0; j < Lods.GetLODs()[i].renderers.Length; j++)
{
LodName[i,j]= Lods.GetLODs()[i].renderers[j].name;
}
}
for (int i = 0; i < LodsList.Count; i++)
{
LOD[] LodGroup = new LOD[Lods.GetLODs().Length];
for (int j = 0; j < Lods.GetLODs().Length; j++)
{
Renderer[] render = new Renderer[Lods.GetLODs()[j].renderers.Length];
for (int n = 0; n < Lods.GetLODs()[j].renderers.Length; n++)
{
foreach (var t in LodsList[i].gameObject.GetComponentsInChildren<Renderer>())
{
if (t.name == LodName[j, n])
{
render[n] = t;
}
}
}
LodGroup[j] = new LOD(Lods.GetLODs()[j].screenRelativeTransitionHeight, render);
}
LodsList[i].SetLODs(LodGroup);
}
}
}
if (EditorGUI.EndChangeCheck())
{//提交修改
LodsHelper.ApplyModifiedProperties();
_Lods = LodsHelper.FindProperty("Lods");
_LodsList = LodsHelper.FindProperty("LodsList");
}
}
void OnInspectorUpdate()
{
this.Repaint();
}
}