Streamingle_URP/Assets/External/NiloToonURP/Editor/VolumePresetPicker/NiloToonVolumePresetPickerEditor.cs
2025-10-31 03:28:00 +09:00

120 lines
5.2 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
namespace NiloToon.NiloToonURP
{
[CustomEditor(typeof(NiloToonVolumePresetPicker))]
public class NiloToonVolumePresetPickerEditor : Editor
{
SerializedProperty currentIndex;
SerializedProperty weight;
SerializedProperty mode;
SerializedProperty priority;
SerializedProperty volumeProfiles;
private void OnEnable()
{
currentIndex = serializedObject.FindProperty("_currentIndex");
weight = serializedObject.FindProperty("weight");
mode = serializedObject.FindProperty("mode");
priority = serializedObject.FindProperty("priority");
volumeProfiles = serializedObject.FindProperty("volumeProfiles");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
NiloToonVolumePresetPicker volumeProfilePicker = (NiloToonVolumePresetPicker)target;
EditorGUILayout.HelpBox(
"1. Pick a Volume ID (001 & 002 are good start).\n" +
"2. Clone the volume profile as your own asset.\n"+
"3. After cloning, unpack completely this prefab and remove this script.\n" +
"(Don't directly modify NiloToon's profile; changes are lost in future updates.)\n"+
"(NiloToon's profile may change in future updates, if you don't want to be affected, always do step2+3)", MessageType.Info);
EditorGUILayout.LabelField("Which volume?", EditorStyles.boldLabel);
EditorGUI.BeginChangeCheck(); // Start tracking changes
currentIndex.intValue = EditorGUILayout.IntSlider("Volume ID", currentIndex.intValue, 0, volumeProfilePicker.volumeProfiles.Count - 1);
if (EditorGUI.EndChangeCheck()) {
EditorUtility.SetDirty(target); // Mark the object as dirty when changes are made
}
// error check
if (volumeProfilePicker == null || volumeProfilePicker.volumeProfiles == null || volumeProfilePicker.volumeProfiles.Count == 0)
{
Debug.LogError("Did you manually added a NiloToonVolumePresetPicker script? Don't do that, instead, add via + > Create Other > NiloToon > VolumePresetPicker");
return;
}
// Display the name of the child at the current index
EditorGUILayout.LabelField(volumeProfilePicker.volumeProfiles[currentIndex.intValue].name);
// Add the buttons here
if (GUILayout.Button("Enable Next"))
{
volumeProfilePicker.EnableNext();
EditorUtility.SetDirty(target); // Mark the object as dirty
}
if (GUILayout.Button("Enable Previous"))
{
volumeProfilePicker.EnablePrevious();
EditorUtility.SetDirty(target); // Mark the object as dirty
}
EditorGUILayout.Space(); // Add some space between the sections
EditorGUILayout.LabelField("Volume settings", EditorStyles.boldLabel);
weight.floatValue = EditorGUILayout.Slider("Weight", weight.floatValue, 0, 1);
mode.enumValueIndex = (int)(VolumeMode)EditorGUILayout.EnumPopup("Mode", (VolumeMode)mode.enumValueIndex);
priority.intValue = EditorGUILayout.IntField("Priority", priority.intValue);
EditorGUILayout.Space(); // Add some space between the sections
EditorGUILayout.LabelField("Internal Volume profiles", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(volumeProfiles);
serializedObject.ApplyModifiedProperties();
}
static void CreateNiloToonVolumePresetPicker(MenuCommand menuCommand)
{
// Make sure the prefab is located in a Resources folder
string prefabPath = "NiloToonVolumePresetPicker";
GameObject prefab = Resources.Load(prefabPath, typeof(GameObject)) as GameObject;
if (prefab != null)
{
GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
if (instance != null)
{
GameObjectUtility.SetParentAndAlign(instance, menuCommand.context as GameObject);
Undo.RegisterCreatedObjectUndo(instance, "Create " + instance.name);
Selection.activeObject = instance;
}
else
{
Debug.LogError("Failed to instantiate prefab: " + prefabPath);
}
}
else
{
Debug.LogError("Failed to load prefab at path: " + prefabPath);
}
}
[MenuItem("GameObject/Volume/NiloToon/VolumePresetPicker", false, 10)]
static void CreateNiloToonVolumePresetPicker_PathA(MenuCommand menuCommand)
{
CreateNiloToonVolumePresetPicker(menuCommand);
}
[MenuItem("GameObject/Create Other/NiloToon/VolumePresetPicker", false, 10)]
static void CreateNiloToonVolumePresetPicker_PathB(MenuCommand menuCommand)
{
CreateNiloToonVolumePresetPicker(menuCommand);
}
}
}
#endif