113 lines
4.8 KiB
C#
113 lines
4.8 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
|
|
}
|
|
|
|
// 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 |