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

87 行
2.9 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using System.Linq;
using System.Reflection;
namespace UnityEngine.Experimental.ScriptableRenderLoop
{
[CustomEditor(typeof(CommonSettings))]
public class CommonSettingsEditor
: Editor
{
private class Styles
{
public readonly GUIContent none = new GUIContent("None");
public readonly GUIContent skyRenderer = new GUIContent("Sky Renderer");
}
private static Styles s_Styles = null;
private static Styles styles
{
get
{
if (s_Styles == null)
s_Styles = new Styles();
return s_Styles;
}
}
private List<Type> m_SkyRendererTypes;
private List<GUIContent> m_SkyRendererTypeNames = new List<GUIContent>();
private List<int> m_SkyRendererTypeValues = new List<int>();
void OnEnable()
{
m_SkyRendererTypes = Assembly.GetAssembly(typeof(SkyRenderer))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(SkyRenderer)) && !t.IsGenericType)
.ToList();
// Prepare the list of available SkyRenderers for the IntPopup
m_SkyRendererTypeNames.Clear();
m_SkyRendererTypeValues.Clear();
for(int i = 0 ; i < m_SkyRendererTypes.Count ; ++i)
{
string longName = m_SkyRendererTypes[i].ToString();
char[] separators = {'.'};
string[] tokens = longName.Split(separators);
m_SkyRendererTypeNames.Add(new GUIContent(tokens[tokens.Length - 1]));
m_SkyRendererTypeValues.Add(i);
}
// Add default null value.
m_SkyRendererTypeNames.Add(styles.none);
m_SkyRendererTypeValues.Add(m_SkyRendererTypeValues.Count);
m_SkyRendererTypes.Add(null);
}
public override void OnInspectorGUI()
{
serializedObject.Update();
CommonSettings settings = target as CommonSettings;
// Retrieve the index of the current SkyRenderer
int index = -1;
for(int i = 0 ; i < m_SkyRendererTypeValues.Count ; ++i )
{
if(m_SkyRendererTypes[i] == settings.skyRendererType)
{
index = i;
break;
}
}
EditorGUI.BeginChangeCheck();
int newValue = EditorGUILayout.IntPopup(styles.skyRenderer, index, m_SkyRendererTypeNames.ToArray(), m_SkyRendererTypeValues.ToArray());
if(EditorGUI.EndChangeCheck())
{
settings.skyRendererType = m_SkyRendererTypes[newValue];
}
serializedObject.ApplyModifiedProperties();
}
}
}