Files
JJBB/Assets/Project/Script/Shader/Editor/DirectionalLightEditor.cs
2024-08-23 15:49:34 +08:00

67 lines
2.1 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
[CustomEditor(typeof(DirectionalLightSetter))]
public class DirectionalLightEditor : Editor
{
private DirectionalLightSetter _target;
private Light _light;
private Quaternion _lastRotation;
private Color _lastColor;
private float _lastAtten;
private Vector3 _lastSpecularEular;
private void OnEnable()
{
_target = (DirectionalLightSetter)target;
_light = _target.GetComponent<Light>();
if (_light == null)
Debug.LogError("Directional Light Setter 上不存在光源组件!");
else
{
_target.SetLight(_light);
_lastSpecularEular = _target.specularRotation.eulerAngles;
CacheProperties();
}
}
private void CacheProperties()
{
_lastColor = _light.color;
_lastAtten = _light.intensity;
_lastRotation = _target.transform.rotation;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (_light != null)
{
if (_lastRotation != _target.transform.rotation ||
_lastColor != _light.color ||
_lastAtten != _light.intensity)
{
_target.SetLight(_light);
CacheProperties();
}
var eular = EditorGUILayout.Vector3Field("Specular Dir Eular", _lastSpecularEular);
if (eular != _lastSpecularEular)
{
_target.specularRotation = Quaternion.Euler(eular);
_lastSpecularEular = eular;
_target.SetLight(_light);
EditorUtility.SetDirty (_target);
EditorSceneManager.MarkSceneDirty (EditorSceneManager.GetActiveScene());
}
}
if (GUILayout.Button("Reset Specular Dir"))
{
_target.specularRotation = _target.transform.rotation;
_lastSpecularEular = _target.specularRotation.eulerAngles;
_target.SetLight(_light);
EditorUtility.SetDirty (_target);
EditorSceneManager.MarkSceneDirty (EditorSceneManager.GetActiveScene());
}
}
}