2026-04-22 모듈러 에셋 포함
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace Bozo
|
||||
{
|
||||
public class BSMC_Tools : MonoBehaviour
|
||||
{
|
||||
[MenuItem("Tools/BoZo Tools/Open JSON Location")]
|
||||
private static void OpenJsonPath()
|
||||
{
|
||||
var path = Application.persistentDataPath;
|
||||
if (System.IO.Directory.Exists(path))
|
||||
{
|
||||
Process.Start(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6533e60d5f07a47419b4da385601a540
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 323550
|
||||
packageName: 'BoZo: Modular Anime Characters - Base Pack'
|
||||
packageVersion: 1.8.4
|
||||
assetPath: Assets/BoZo_ModularAnimeCharacters/Scripts/Editor/BSMC_Tools.cs
|
||||
uploadId: 903394
|
||||
@@ -0,0 +1,60 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Bozo.AnimeCharacters
|
||||
{
|
||||
|
||||
|
||||
[InitializeOnLoad]
|
||||
public static class BoZo_AutoIncludeShaders
|
||||
{
|
||||
static BoZo_AutoIncludeShaders()
|
||||
{
|
||||
AddShaderToAlwaysIncluded("Shader Graphs/BoZo_ColorEditor");
|
||||
AddShaderToAlwaysIncluded("BoZo/BakeTexture");
|
||||
AddShaderToAlwaysIncluded("Hidden/BoZo_DecalProjector");
|
||||
}
|
||||
public static void AddShaderToAlwaysIncluded(string shaderName)
|
||||
{
|
||||
Shader shader = Shader.Find(shaderName);
|
||||
if (shader == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. Get the GraphicsSettings object
|
||||
Object graphicsSettingsAsset = AssetDatabase.LoadAssetAtPath<Object>("ProjectSettings/GraphicsSettings.asset");
|
||||
if (graphicsSettingsAsset == null) return;
|
||||
|
||||
SerializedObject graphicsSettings = new SerializedObject(graphicsSettingsAsset);
|
||||
SerializedProperty alwaysIncludedShaders = graphicsSettings.FindProperty("m_AlwaysIncludedShaders");
|
||||
|
||||
// 2. Check if the shader is already in the list to avoid duplicates
|
||||
bool exists = false;
|
||||
for (int i = 0; i < alwaysIncludedShaders.arraySize; i++)
|
||||
{
|
||||
SerializedProperty element = alwaysIncludedShaders.GetArrayElementAtIndex(i);
|
||||
if (element.objectReferenceValue == shader)
|
||||
{
|
||||
exists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Add the shader if it's missing
|
||||
if (!exists)
|
||||
{
|
||||
int index = alwaysIncludedShaders.arraySize;
|
||||
alwaysIncludedShaders.InsertArrayElementAtIndex(index);
|
||||
alwaysIncludedShaders.GetArrayElementAtIndex(index).objectReferenceValue = shader;
|
||||
|
||||
graphicsSettings.ApplyModifiedProperties();
|
||||
Debug.Log($"Successfully added {shaderName} to Always Included Shaders.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47997bcef29578743bfa0562da99a336
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 323550
|
||||
packageName: 'BoZo: Modular Anime Characters - Base Pack'
|
||||
packageVersion: 1.8.4
|
||||
assetPath: Assets/BoZo_ModularAnimeCharacters/Scripts/Editor/BoZo_AutoIncludeShaders.cs
|
||||
uploadId: 903394
|
||||
@@ -0,0 +1,138 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Bozo.AnimeCharacters
|
||||
{
|
||||
[CustomEditor(typeof(Outfit))]
|
||||
[CanEditMultipleObjects]
|
||||
public class OutfitEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
Outfit outfit = (Outfit)target;
|
||||
Color originalColor = GUI.color;
|
||||
GUIStyle frameStyle = new GUIStyle(GUI.skin.box);
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
|
||||
GUILayout.Label("Character Creator Settings");
|
||||
GUILayout.BeginVertical(frameStyle);
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
GUILayout.BeginVertical(frameStyle);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("OutfitName"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("OutfitIcon"));
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("ColorChannels"));
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("material"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("materialIndex"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("materialPriority"));
|
||||
EditorGUILayout.Space(20);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TextureCatagory"));
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
|
||||
var decalsupport = serializedObject.FindProperty("supportDecals");
|
||||
EditorGUILayout.LabelField("Supports Decal", GUILayout.Width(200));
|
||||
decalsupport.boolValue = EditorGUILayout.Toggle(decalsupport.boolValue);
|
||||
|
||||
var patternsupport = serializedObject.FindProperty("supportPatterns");
|
||||
EditorGUILayout.LabelField("Supports Pattern", GUILayout.Width(200));
|
||||
patternsupport.boolValue = EditorGUILayout.Toggle(patternsupport.boolValue);
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
EditorGUILayout.LabelField("Available In Character Creator", GUILayout.Width(200));
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
|
||||
var buttonText = "";
|
||||
if (outfit.showCharacterCreator)
|
||||
{
|
||||
buttonText = "(Available)";
|
||||
}
|
||||
else
|
||||
{
|
||||
GUI.color = Color.yellow;
|
||||
buttonText = "(Hidden)";
|
||||
}
|
||||
|
||||
if (GUILayout.Button(buttonText))
|
||||
{
|
||||
outfit.showCharacterCreator = !outfit.showCharacterCreator;
|
||||
}
|
||||
|
||||
GUI.color = originalColor;
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.EndVertical();
|
||||
|
||||
if (outfit.OutfitIcon != null)
|
||||
{
|
||||
|
||||
// Control the size of the image
|
||||
float size = 128;
|
||||
Rect rect = GUILayoutUtility.GetRect(size, size, GUILayout.ExpandWidth(false));
|
||||
EditorGUI.DrawTextureTransparent(rect, outfit.OutfitIcon.texture);
|
||||
}
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
|
||||
GUILayout.Label("Outfit Settings");
|
||||
GUILayout.BeginVertical(frameStyle);
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("Type"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("AttachPoint"));
|
||||
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
|
||||
var customShader = serializedObject.FindProperty("customShader");
|
||||
EditorGUILayout.LabelField("Uses Custom Shader", GUILayout.Width(200));
|
||||
customShader.boolValue = EditorGUILayout.Toggle(customShader.boolValue);
|
||||
|
||||
var attachEditMode = serializedObject.FindProperty("AttachInEditMode");
|
||||
EditorGUILayout.LabelField("Follow Skeleton In Edit Mode", GUILayout.Width(200));
|
||||
attachEditMode.boolValue = EditorGUILayout.Toggle(attachEditMode.boolValue);
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("defaultColors"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("colors"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("optionalPieces"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("additionalBones"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("tags"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("LinkedColorSets"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("IncompatibleSets"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("HideTypes"));
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
GUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
|
||||
GUILayout.Label("Custom Settings");
|
||||
GUILayout.BeginVertical(frameStyle);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("decalDatas"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("currentSwatch"));
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("outfitSwatches"));
|
||||
EditorGUI.indentLevel--;
|
||||
GUILayout.EndVertical();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
|
||||
//base.OnInspectorGUI();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f3ec7e868ad30a4f991d95602aa2a40
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 323550
|
||||
packageName: 'BoZo: Modular Anime Characters - Base Pack'
|
||||
packageVersion: 1.8.4
|
||||
assetPath: Assets/BoZo_ModularAnimeCharacters/Scripts/Editor/OutfitEditor.cs
|
||||
uploadId: 903394
|
||||
@@ -0,0 +1,165 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Bozo.AnimeCharacters
|
||||
{
|
||||
|
||||
[CustomEditor(typeof(OutfitSystem))]
|
||||
public class OutfitSystemEditor : Editor
|
||||
{
|
||||
private bool showMergedOptions;
|
||||
private bool dependencies;
|
||||
private Texture2D banner;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
banner = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/BoZo_StylizedModularCharacters/Textures/Editor/Banner_OutfitSystem.png");
|
||||
}
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
OutfitSystem system = (OutfitSystem)target;
|
||||
Color originalColor = GUI.color;
|
||||
|
||||
|
||||
GUIStyle frameStyle = new GUIStyle(GUI.skin.box);
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
if (banner != null)
|
||||
{
|
||||
float maxWidth = EditorGUIUtility.currentViewWidth - 20;
|
||||
float aspect = (float)banner.width / banner.height;
|
||||
float desiredWidth = Mathf.Min(banner.width, maxWidth);
|
||||
float height = desiredWidth / aspect;
|
||||
|
||||
// Center it using flexible space
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.Label(banner, GUILayout.Width(desiredWidth), GUILayout.Height(height));
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
GUILayout.BeginVertical();
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("characterData"));
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("SaveID"));
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("loadMode"), GUILayout.ExpandWidth(true));
|
||||
|
||||
var async = serializedObject.FindProperty("async");
|
||||
EditorGUILayout.LabelField("Async", GUILayout.Width(50));
|
||||
async.boolValue = EditorGUILayout.Toggle(async.boolValue, GUILayout.Width(50));
|
||||
|
||||
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Save Character ID"))
|
||||
{
|
||||
system.SaveByID();
|
||||
}
|
||||
if (GUILayout.Button("Load Character ID"))
|
||||
{
|
||||
system.LoadFromID();
|
||||
}
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
|
||||
|
||||
GUILayout.EndVertical();
|
||||
|
||||
if (system.characterData)
|
||||
{
|
||||
if (system.characterData.GetCharacterIcon() != null)
|
||||
{
|
||||
float size = 64;
|
||||
Rect rect = GUILayoutUtility.GetRect(size, size, GUILayout.ExpandWidth(false));
|
||||
EditorGUI.DrawTextureTransparent(rect, system.characterData.GetCharacterIcon());
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
|
||||
|
||||
GUIContent mergedTooltip = new GUIContent("(Merged Mode)", "");
|
||||
GUIContent dyanmicTooltip = new GUIContent("(Dynamic Mode)", "");
|
||||
if (system.mergedMode)
|
||||
{
|
||||
GUI.color = Color.green;
|
||||
if (GUILayout.Button(mergedTooltip, GUILayout.Height(30)))
|
||||
{
|
||||
system.mergedMode = false;
|
||||
}
|
||||
GUI.color = originalColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button(dyanmicTooltip, GUILayout.Height(30)))
|
||||
{
|
||||
system.mergedMode = true;
|
||||
}
|
||||
GUI.color = originalColor;
|
||||
}
|
||||
|
||||
//MERGED OPTIONS
|
||||
showMergedOptions = EditorGUILayout.Foldout(showMergedOptions, "Advanced Options", true);
|
||||
|
||||
GUILayout.BeginVertical(frameStyle);
|
||||
if (showMergedOptions)
|
||||
{
|
||||
EditorGUI.indentLevel++;
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("mergeMaterial"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("prefabName"));
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("materialData"));
|
||||
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("liveEditMode"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("autoUpdate"));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
|
||||
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
|
||||
if (GUILayout.Button("Merge Character"))
|
||||
{
|
||||
system.MergeCharacter();
|
||||
}
|
||||
if (GUILayout.Button("Save as Prefab"))
|
||||
{
|
||||
system.SaveCharacterToPrefab();
|
||||
}
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
GUILayout.EndVertical();
|
||||
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("data"));
|
||||
|
||||
dependencies = EditorGUILayout.Foldout(dependencies, "Dependencies", true);
|
||||
if (dependencies)
|
||||
{
|
||||
GUILayout.BeginHorizontal(frameStyle);
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("CharacterBody"));
|
||||
GUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b5460613c21ed8c41b9ed135d1a20b49
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 323550
|
||||
packageName: 'BoZo: Modular Anime Characters - Base Pack'
|
||||
packageVersion: 1.8.4
|
||||
assetPath: Assets/BoZo_ModularAnimeCharacters/Scripts/Editor/OutfitSystemEditor.cs
|
||||
uploadId: 903394
|
||||
Reference in New Issue
Block a user