2026-04-22 모듈러 에셋 포함

This commit is contained in:
2026-04-22 10:25:40 +09:00
parent abaf994ebf
commit 7bdb7b7cd1
2466 changed files with 208897 additions and 4 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -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

View File

@@ -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
{
}
}
}
}

View File

@@ -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

View File

@@ -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();
}
}
}

View File

@@ -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

View File

@@ -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();
}
}
}

View File

@@ -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