您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

83 行
2.7 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(LPPVTool))]
public class LPPVToolEditor : Editor
{
public override void OnInspectorGUI()
{
EditorGUILayout.HelpBox("Use this tool to assign all renderers under this group that are not LightMapStatic to the LPP Volume selected below.", MessageType.Info);
DrawDefaultInspector();
var tool = (LPPVTool)target;
if (tool.Volume == null)
{
EditorGUILayout.HelpBox("No proxy volume assigned. This will never work...", MessageType.Warning);
return;
}
var all = FindThemAll(tool);
var unassigned = all.FindAll(delegate (GameObject go)
{
var r = go.GetComponent<Renderer>();
return r.lightProbeUsage != UnityEngine.Rendering.LightProbeUsage.UseProxyVolume || r.lightProbeProxyVolumeOverride != tool.Volume.gameObject;
});
GUILayout.Space(10);
GUILayout.Label("Unassigned: " + unassigned.Count, unassigned.Count > 0 ? EditorStyles.boldLabel : EditorStyles.label);
GUILayout.Space(20);
if (GUILayout.Button("Select all candidates (" + all.Count + ")"))
{
Selection.objects = all.ToArray();
}
GUILayout.BeginHorizontal();
if (GUILayout.Button("Select unassigned candidates (" + unassigned.Count + ")"))
{
Selection.objects = unassigned.ToArray();
}
if (GUILayout.Button("Assign (" + unassigned.Count + ")"))
{
Undo.RegisterCompleteObjectUndo(unassigned.ToArray(), "LPPV Tool");
foreach(var go in unassigned)
{
var r = go.GetComponent<Renderer>();
r.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.UseProxyVolume;
r.lightProbeProxyVolumeOverride = tool.Volume.gameObject;
}
}
GUILayout.EndHorizontal();
GUILayout.Space(20);
}
public void AssignThemAll(LPPVTool tool)
{
foreach (var g in FindThemAll(tool))
{
var r = g.GetComponent<Renderer>();
r.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.UseProxyVolume;
r.lightProbeProxyVolumeOverride = tool.Volume.gameObject;
}
}
public List<GameObject> FindThemAll(LPPVTool tool)
{
var result = new List<GameObject>();
foreach (var r in tool.transform.GetComponentsInChildren<Renderer>())
{
if ((GameObjectUtility.GetStaticEditorFlags(r.gameObject) & StaticEditorFlags.LightmapStatic) == StaticEditorFlags.LightmapStatic)
continue;
result.Add(r.gameObject);
}
return result;
}
}