Upload project files
This commit is contained in:
12
Editor/LightPreset/LightPreset.cs
Normal file
12
Editor/LightPreset/LightPreset.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[Serializable]
|
||||
public struct LightPreset
|
||||
{
|
||||
public string Name;
|
||||
public Light Light;
|
||||
}
|
||||
}
|
||||
2
Editor/LightPreset/LightPreset.cs.meta
Normal file
2
Editor/LightPreset/LightPreset.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 16f8cb4e99dddd247bf03b8f2aee13ec
|
||||
15
Editor/LightPreset/LightPresetDatabase.asset
Normal file
15
Editor/LightPreset/LightPresetDatabase.asset
Normal file
@@ -0,0 +1,15 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 50750c71618d3d844962a4aeb2d1f438, type: 3}
|
||||
m_Name: LightPresetDatabase
|
||||
m_EditorClassIdentifier:
|
||||
lightPreset: []
|
||||
8
Editor/LightPreset/LightPresetDatabase.asset.meta
Normal file
8
Editor/LightPreset/LightPresetDatabase.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: abc9c872c1c7b3c49bcbadac3b973f93
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
26
Editor/LightPreset/LightPresetDatabase.cs
Normal file
26
Editor/LightPreset/LightPresetDatabase.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CreateAssetMenu(fileName = "LightPresetDatabase", menuName = "Lighting Tools/LightPresetDatabase")]
|
||||
public class LightPresetDatabase : ScriptableObject
|
||||
{
|
||||
public List<LightPreset> lightPreset = new();
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(LightPresetDatabase))]
|
||||
public class LightPresetDatabaseEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
|
||||
if (GUILayout.Button("Refresh Menu Item"))
|
||||
{
|
||||
LightPresetMenu.Initialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Editor/LightPreset/LightPresetDatabase.cs.meta
Normal file
2
Editor/LightPreset/LightPresetDatabase.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50750c71618d3d844962a4aeb2d1f438
|
||||
102
Editor/LightPreset/LightPresetMenu.cs
Normal file
102
Editor/LightPreset/LightPresetMenu.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
public static class LightPresetMenu
|
||||
{
|
||||
private const string DatabasePath = "Packages/com.misaki.art-tools/Editor/LightPreset/LightPresetDatabase.asset";
|
||||
private static LightPresetDatabase database;
|
||||
|
||||
private readonly static Type menuType = typeof(Menu);
|
||||
|
||||
[InitializeOnLoadMethod]
|
||||
public static void Initialize()
|
||||
{
|
||||
RemoveMenuItems();
|
||||
|
||||
database = AssetDatabase.LoadAssetAtPath<LightPresetDatabase>(DatabasePath);
|
||||
if (database == null)
|
||||
{
|
||||
Debug.LogError("LightPresetDatabase not found at path: " + DatabasePath);
|
||||
return;
|
||||
}
|
||||
|
||||
var addMenuItemMethod = menuType.GetMethod("AddMenuItem", BindingFlags.NonPublic | BindingFlags.Static);
|
||||
|
||||
foreach (var lightPreset in database.lightPreset)
|
||||
{
|
||||
AddMenuItem(addMenuItemMethod, lightPreset);
|
||||
}
|
||||
}
|
||||
|
||||
private static void RemoveMenuItems()
|
||||
{
|
||||
var removeMenuItemMethod = menuType.GetMethod("RemoveMenuItem", BindingFlags.NonPublic | BindingFlags.Static);
|
||||
if (removeMenuItemMethod == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
removeMenuItemMethod.Invoke(null, new object[] { "GameObject/Light/LightPreset" });
|
||||
}
|
||||
|
||||
private static void AddMenuItem(MethodInfo addMenuItemMethod, LightPreset lightPreset)
|
||||
{
|
||||
if (addMenuItemMethod == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var name = "GameObject/Light/LightPreset/" + lightPreset.Name;
|
||||
var shortcut = "";
|
||||
var @checked = false;
|
||||
var priority = 100;
|
||||
var execute = new Action(() => CreateLight(lightPreset));
|
||||
var validate = new Func<bool>(() => true);
|
||||
|
||||
addMenuItemMethod.Invoke(null, new object[] { name, shortcut, @checked, priority, execute, validate });
|
||||
}
|
||||
|
||||
private static void CreateLight(LightPreset lightPreset)
|
||||
{
|
||||
Light light;
|
||||
|
||||
if (Selection.activeGameObject == null)
|
||||
light = UnityEngine.Object.Instantiate(lightPreset.Light, Vector3.zero, Quaternion.identity);
|
||||
else
|
||||
light = UnityEngine.Object.Instantiate(lightPreset.Light, Selection.activeGameObject.transform.position, Quaternion.identity, Selection.activeGameObject.transform);
|
||||
|
||||
var parent = light.transform.parent;
|
||||
string[] nameArray;
|
||||
UnityEngine.Object[] childrenArray;
|
||||
|
||||
if (parent == null)
|
||||
{
|
||||
childrenArray = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects();
|
||||
nameArray = new string[childrenArray.Length];
|
||||
}
|
||||
else
|
||||
{
|
||||
nameArray = new string[parent.childCount];
|
||||
childrenArray = new UnityEngine.Object[parent.childCount];
|
||||
for (var i = 0; i < parent.childCount; i++)
|
||||
{
|
||||
childrenArray[i] = parent.GetChild(i).gameObject;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < nameArray.Length; i++)
|
||||
{
|
||||
nameArray[i] = childrenArray[i].name;
|
||||
}
|
||||
|
||||
light.name = ObjectNames.GetUniqueName(nameArray, lightPreset.Name);
|
||||
Selection.activeGameObject = light.gameObject;
|
||||
|
||||
Undo.RegisterCreatedObjectUndo(light, "Create " + lightPreset.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Editor/LightPreset/LightPresetMenu.cs.meta
Normal file
2
Editor/LightPreset/LightPresetMenu.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 96ed155eb747542469a93e5842969f10
|
||||
Reference in New Issue
Block a user