67 lines
2.1 KiB
C#
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());
|
|
}
|
|
}
|
|
} |