Unity利用拓展编辑器写一个批量修改物体LOD的工具

在工作的时候因为需要去调每一个模型的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();
    }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值