Compare commits
49 Commits
d3708ff0a5
...
60dc73a60f
| Author | SHA1 | Date | |
|---|---|---|---|
| 60dc73a60f | |||
|
|
33f07529d3 | ||
|
|
2914667223 | ||
|
|
8ca8bd0df9 | ||
|
|
b9b394935e | ||
|
|
106e7f51be | ||
|
|
9d02afd8e8 | ||
|
|
b64c3e10bc | ||
|
|
ad10e24d13 | ||
|
|
739a62eb9b | ||
|
|
0333b83b57 | ||
|
|
200a7faa6b | ||
|
|
b19fb56c8c | ||
|
|
15886dc1f9 | ||
|
|
85f270fd83 | ||
|
|
93e1423525 | ||
|
|
df6d3e3b5a | ||
|
|
97bbb789ed | ||
|
|
a38efd756e | ||
|
|
a7fc12f32f | ||
|
|
18af2fc9c6 | ||
|
|
c1f5d2c208 | ||
|
|
acd430c5d7 | ||
|
|
c9af0d2d6f | ||
|
|
8181eae4c6 | ||
|
|
297ca29082 | ||
|
|
f2d0f3d423 | ||
|
|
097436a8b0 | ||
|
|
99f9c3b26d | ||
|
|
59d473c87b | ||
|
|
e00953de52 | ||
|
|
fd8f8c6de0 | ||
|
|
ee86f93814 | ||
|
|
c8ff7b503d | ||
|
|
538c8a081e | ||
|
|
24e7f038fe | ||
|
|
eee00cfad6 | ||
|
|
ecbc7e8e4a | ||
|
|
ec2a367245 | ||
|
|
e1f2ac5b02 | ||
|
|
6ae48ff30e | ||
|
|
71831dd4c3 | ||
|
|
ef4e86820c | ||
|
|
b7776f3af0 | ||
|
|
430fb27a10 | ||
|
|
91ca3c0468 | ||
|
|
a9423b7479 | ||
|
|
b5b815170f | ||
|
|
a75d48265a |
@@ -6,7 +6,38 @@
|
||||
"Bash(mkdir:*)",
|
||||
"Bash(cat:*)",
|
||||
"Bash(move:*)",
|
||||
"Bash(find:*)"
|
||||
"Bash(find:*)",
|
||||
"Bash(claude mcp add:*)",
|
||||
"Bash(claude mcp list:*)",
|
||||
"Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\Input\\\\NumberStepper.cs\")",
|
||||
"Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\Modal\\\\UTKColorPickerHSV.cs\")",
|
||||
"mcp__UnityMCP__read_console",
|
||||
"Bash(git mv:*)",
|
||||
"Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Tab\\\\UTKTab.uss\")",
|
||||
"Bash(cmd //c \"del /f \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Tab\\\\UTKTab.uss\"\"\")",
|
||||
"mcp__UnityMCP__execute_menu_item",
|
||||
"mcp__UnityMCP__manage_editor",
|
||||
"Bash(timeout:*)",
|
||||
"mcp__UnityMCP__manage_asset",
|
||||
"mcp__UnityMCP__manage_scene",
|
||||
"Bash(git checkout:*)",
|
||||
"Bash(git -C \"d:/works/2025/02.Studio/dev/base/XRBase\" checkout HEAD -- \"Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss\" \"Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss\" \"Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss\" \"Assets/Resources/UIToolkit/Tab/UTKTabView.uss\" \"Assets/Resources/UIToolkit/List/UTKListView.uss\" \"Assets/Resources/UIToolkit/Style/UTKComponents.uss\")",
|
||||
"Bash(cmd /c \"cd /d d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase && git log --oneline -10 -- Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss\")",
|
||||
"Bash(New-Item -ItemType Directory -Path \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Sample\\\\Window\" -Force)",
|
||||
"Bash(cmd /c \"echo ^<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?^>^<ui:UXML xmlns:ui=\"\"UnityEngine.UIElements\"\" xmlns:utk=\"\"UVC.UIToolkit\"\"^>^<utk:UTKLabel name=\"\"label\"\" text=\"\"Label\"\" class=\"\"utk-property-item-view__label\"\" /^>^<ui:VisualElement name=\"\"value-container\"\" class=\"\"utk-property-item-view__value\"\"^>^</ui:VisualElement^>^</ui:UXML^>\")",
|
||||
"Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKBoolPropertyItemView.uxml\")",
|
||||
"Bash(del:*)",
|
||||
"Bash(cmd /c \"del /q \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKIntPropertyItemViewSliderUss.uss\"\" \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKFloatPropertyItemViewSliderUss.uss\"\"\")",
|
||||
"mcp__UnityMCP__refresh_unity",
|
||||
"Bash(powershell \"Get-Process Unity -ErrorAction SilentlyContinue | Select-Object -First 1 | Format-List\")",
|
||||
"Bash(cmd /c \"mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\ToolBar\\\\Data\"\" && mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\ToolBar\\\\Items\"\" && mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\ToolBar\"\"\")",
|
||||
"Bash(/bin/ls:*)",
|
||||
"Bash(/bin/mkdir -p:*)",
|
||||
"Bash(/bin/rm:*)",
|
||||
"WebFetch(domain:docs.unity3d.com)",
|
||||
"Bash(ls:*)",
|
||||
"WebFetch(domain:discussions.unity.com)",
|
||||
"mcp__ai-game-developer__screenshot-game-view"
|
||||
],
|
||||
"deny": [],
|
||||
"ask": []
|
||||
|
||||
2
.github/copilot-instructions.md
vendored
Normal file
2
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
프로젝트 루트 폴더의 CLAUDE.md를 참조해
|
||||
답변은 항상 한국어로 작성해
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -86,4 +86,5 @@ crashlytics-build.properties
|
||||
|
||||
|
||||
.DS_Store
|
||||
.idea/
|
||||
.idea/
|
||||
.vscode/
|
||||
8
.mcp.json
Normal file
8
.mcp.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"ai-game-developer": {
|
||||
"type": "http",
|
||||
"url": "http://localhost:55726"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ebf477f3ba4991c439a8729dc21abac7
|
||||
guid: 025311df5d1d7e54aa8d7ccaf9367bf3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
148
Assets/Editor/FixMCPEditorPrefs.cs
Normal file
148
Assets/Editor/FixMCPEditorPrefs.cs
Normal file
@@ -0,0 +1,148 @@
|
||||
#nullable enable
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// MCP for Unity EditorPrefs 설정 확인 및 수정 도구
|
||||
/// </summary>
|
||||
public static class FixMCPEditorPrefs
|
||||
{
|
||||
private const string GitUrlOverrideKey = "MCPForUnity.GitUrlOverride";
|
||||
|
||||
[MenuItem("Tools/MCP/Fix EditorPrefs Issue")]
|
||||
public static void FixEditorPrefs()
|
||||
{
|
||||
Debug.Log("=== MCP EditorPrefs 확인 시작 ===");
|
||||
|
||||
// 현재 저장된 값 확인
|
||||
string currentValue = EditorPrefs.GetString(GitUrlOverrideKey, "");
|
||||
|
||||
Debug.Log($"현재 GitUrlOverride 값: '{currentValue}'");
|
||||
Debug.Log($"값 길이: {currentValue.Length}");
|
||||
|
||||
if (!string.IsNullOrEmpty(currentValue))
|
||||
{
|
||||
// 잘못된 문자가 있는지 확인
|
||||
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
|
||||
bool hasInvalidChars = currentValue.IndexOfAny(invalidChars) >= 0;
|
||||
|
||||
if (hasInvalidChars)
|
||||
{
|
||||
Debug.LogWarning($"⚠️ 잘못된 경로 문자가 감지되었습니다!");
|
||||
Debug.LogWarning($"문제가 있는 값: '{currentValue}'");
|
||||
|
||||
// 잘못된 값 제거
|
||||
EditorPrefs.DeleteKey(GitUrlOverrideKey);
|
||||
Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("경로 문자 검증: 정상");
|
||||
|
||||
// Path.IsPathRooted() 테스트
|
||||
try
|
||||
{
|
||||
bool isRooted = System.IO.Path.IsPathRooted(currentValue);
|
||||
Debug.Log($"IsPathRooted 테스트: {isRooted} (정상)");
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError($"❌ IsPathRooted 호출 실패: {ex.Message}");
|
||||
Debug.LogWarning("잘못된 값을 제거합니다...");
|
||||
EditorPrefs.DeleteKey(GitUrlOverrideKey);
|
||||
Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("GitUrlOverride 값이 비어있습니다. (정상)");
|
||||
}
|
||||
|
||||
Debug.Log("=== MCP EditorPrefs 확인 완료 ===");
|
||||
Debug.Log("Unity 에디터를 재시작하거나 MCP 윈도우를 다시 열어주세요.");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/MCP/Show All MCP EditorPrefs")]
|
||||
public static void ShowAllMCPPrefs()
|
||||
{
|
||||
Debug.Log("=== 모든 MCP EditorPrefs 값 ===");
|
||||
|
||||
string[] keys = new[]
|
||||
{
|
||||
"MCPForUnity.GitUrlOverride",
|
||||
"MCPForUnity.UseHttpTransport",
|
||||
"MCPForUnity.HttpTransportScope",
|
||||
"MCPForUnity.UvxPath",
|
||||
"MCPForUnity.ClaudeCliPath",
|
||||
"MCPForUnity.HttpUrl",
|
||||
"MCPForUnity.HttpRemoteUrl",
|
||||
};
|
||||
|
||||
foreach (string key in keys)
|
||||
{
|
||||
if (EditorPrefs.HasKey(key))
|
||||
{
|
||||
string value = EditorPrefs.GetString(key, "");
|
||||
Debug.Log($"{key}: '{value}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"{key}: (설정되지 않음)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("Tools/MCP/Clear All MCP EditorPrefs")]
|
||||
public static void ClearAllMCPPrefs()
|
||||
{
|
||||
bool confirm = EditorUtility.DisplayDialog(
|
||||
"MCP EditorPrefs 초기화",
|
||||
"모든 MCP for Unity 설정을 초기화하시겠습니까?\n이 작업은 되돌릴 수 없습니다.",
|
||||
"초기화",
|
||||
"취소"
|
||||
);
|
||||
|
||||
if (!confirm)
|
||||
{
|
||||
Debug.Log("취소되었습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log("=== MCP EditorPrefs 초기화 시작 ===");
|
||||
|
||||
string[] keys = new[]
|
||||
{
|
||||
"MCPForUnity.GitUrlOverride",
|
||||
"MCPForUnity.UseHttpTransport",
|
||||
"MCPForUnity.HttpTransportScope",
|
||||
"MCPForUnity.LastLocalHttpServerPid",
|
||||
"MCPForUnity.LastLocalHttpServerPort",
|
||||
"MCPForUnity.LastLocalHttpServerStartedUtc",
|
||||
"MCPForUnity.LastLocalHttpServerPidArgsHash",
|
||||
"MCPForUnity.LastLocalHttpServerPidFilePath",
|
||||
"MCPForUnity.LastLocalHttpServerInstanceToken",
|
||||
"MCPForUnity.UvxPath",
|
||||
"MCPForUnity.ClaudeCliPath",
|
||||
"MCPForUnity.HttpUrl",
|
||||
"MCPForUnity.HttpRemoteUrl",
|
||||
"MCPForUnity.DebugLogs",
|
||||
"MCPForUnity.ValidationLevel",
|
||||
"MCPForUnity.UnitySocketPort",
|
||||
"MCPForUnity.ResumeHttpAfterReload",
|
||||
"MCPForUnity.ResumeStdioAfterReload",
|
||||
};
|
||||
|
||||
foreach (string key in keys)
|
||||
{
|
||||
if (EditorPrefs.HasKey(key))
|
||||
{
|
||||
EditorPrefs.DeleteKey(key);
|
||||
Debug.Log($"✅ 삭제: {key}");
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log("=== MCP EditorPrefs 초기화 완료 ===");
|
||||
Debug.Log("Unity 에디터를 재시작해주세요.");
|
||||
}
|
||||
}
|
||||
2
Assets/Editor/FixMCPEditorPrefs.cs.meta
Normal file
2
Assets/Editor/FixMCPEditorPrefs.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 955b75403593bb74fbf0ba110a3e1b83
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 65214e892d855cf4cb0219bebe3ecfbb
|
||||
guid: d07e558de63aead44a5de53bc3a61d4d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
775
Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs
Normal file
775
Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs
Normal file
@@ -0,0 +1,775 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UVC.UIToolkit.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// 이미지 아이콘 폴더를 스캔하여 아이콘 경로 상수 클래스를 자동 생성하는 에디터 도구입니다.
|
||||
/// </summary>
|
||||
public class UTKImageIconsGenerator : EditorWindow
|
||||
{
|
||||
#region EditorPrefs Keys
|
||||
|
||||
private const string PrefKeyIconsFolder = "UTK_ImageIcons_IconsFolder";
|
||||
private const string PrefKeyOutputPath = "UTK_ImageIcons_OutputPath";
|
||||
private const string PrefKeyClassName = "UTK_ImageIcons_ClassName";
|
||||
private const string PrefKeyNamespace = "UTK_ImageIcons_Namespace";
|
||||
private const string PrefKeyIncludeSubfolders = "UTK_ImageIcons_IncludeSubfolders";
|
||||
private const string PrefKeyGeneratePreview = "UTK_ImageIcons_GeneratePreview";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Default Values
|
||||
|
||||
private const string DefaultIconsFolder = "Assets/Resources/Icons";
|
||||
private const string DefaultOutputPath = "Assets/Scripts/UVC/UIToolkit/Common/UTKImageIcons.cs";
|
||||
private const string DefaultClassName = "UTKImageIcons";
|
||||
private const string DefaultNamespace = "UVC.UIToolkit";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Supported Extensions
|
||||
|
||||
private static readonly string[] SupportedExtensions = { ".png", ".jpg", ".jpeg", ".tga", ".psd", ".gif", ".bmp" };
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private string _iconsFolder = DefaultIconsFolder;
|
||||
private string _outputPath = DefaultOutputPath;
|
||||
private string _className = DefaultClassName;
|
||||
private string _namespace = DefaultNamespace;
|
||||
private bool _includeSubfolders = true;
|
||||
private bool _generatePreview = true;
|
||||
|
||||
private Vector2 _scrollPosition;
|
||||
private List<IconInfo>? _previewIcons;
|
||||
|
||||
#endregion
|
||||
|
||||
private class IconInfo
|
||||
{
|
||||
public string FilePath { get; set; } = "";
|
||||
public string FileName { get; set; } = "";
|
||||
public string FieldName { get; set; } = "";
|
||||
public string ResourcePath { get; set; } = "";
|
||||
public string RelativePath { get; set; } = "";
|
||||
public Texture2D? Preview { get; set; }
|
||||
}
|
||||
|
||||
[MenuItem("Tools/UTK/Image Icons Generator")]
|
||||
public static void ShowWindow()
|
||||
{
|
||||
var window = GetWindow<UTKImageIconsGenerator>("Image Icons Generator");
|
||||
window.minSize = new Vector2(500, 400);
|
||||
window.LoadSettings();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/UTK/Generate Image Icons Class (Quick)")]
|
||||
public static void GenerateQuick()
|
||||
{
|
||||
var iconsFolder = EditorPrefs.GetString(PrefKeyIconsFolder, DefaultIconsFolder);
|
||||
var outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
|
||||
var className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
|
||||
var namespaceName = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
|
||||
var includeSubfolders = EditorPrefs.GetBool(PrefKeyIncludeSubfolders, true);
|
||||
|
||||
Generate(iconsFolder, outputPath, className, namespaceName, includeSubfolders);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
LoadSettings();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
ClearPreviewTextures();
|
||||
}
|
||||
|
||||
private void LoadSettings()
|
||||
{
|
||||
_iconsFolder = EditorPrefs.GetString(PrefKeyIconsFolder, DefaultIconsFolder);
|
||||
_outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
|
||||
_className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
|
||||
_namespace = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
|
||||
_includeSubfolders = EditorPrefs.GetBool(PrefKeyIncludeSubfolders, true);
|
||||
_generatePreview = EditorPrefs.GetBool(PrefKeyGeneratePreview, true);
|
||||
}
|
||||
|
||||
private void SaveSettings()
|
||||
{
|
||||
EditorPrefs.SetString(PrefKeyIconsFolder, _iconsFolder);
|
||||
EditorPrefs.SetString(PrefKeyOutputPath, _outputPath);
|
||||
EditorPrefs.SetString(PrefKeyClassName, _className);
|
||||
EditorPrefs.SetString(PrefKeyNamespace, _namespace);
|
||||
EditorPrefs.SetBool(PrefKeyIncludeSubfolders, _includeSubfolders);
|
||||
EditorPrefs.SetBool(PrefKeyGeneratePreview, _generatePreview);
|
||||
}
|
||||
|
||||
private void ClearPreviewTextures()
|
||||
{
|
||||
_previewIcons = null;
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Image Icons Class Generator", EditorStyles.boldLabel);
|
||||
EditorGUILayout.Space(5);
|
||||
EditorGUILayout.HelpBox("이미지 아이콘 폴더를 스캔하여 Resources.Load로 사용할 수 있는 C# 정적 클래스를 생성합니다.", UnityEditor.MessageType.Info);
|
||||
EditorGUILayout.Space(10);
|
||||
|
||||
// 아이콘 폴더 경로
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
_iconsFolder = EditorGUILayout.TextField("Icons Folder", _iconsFolder);
|
||||
if (GUILayout.Button("...", GUILayout.Width(30)))
|
||||
{
|
||||
var path = EditorUtility.OpenFolderPanel("Select Icons Folder", "Assets", "");
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
// 상대 경로로 변환
|
||||
if (path.StartsWith(Application.dataPath))
|
||||
{
|
||||
path = "Assets" + path.Substring(Application.dataPath.Length);
|
||||
}
|
||||
_iconsFolder = path;
|
||||
ClearPreviewTextures();
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// 출력 파일 경로
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
_outputPath = EditorGUILayout.TextField("Output File", _outputPath);
|
||||
if (GUILayout.Button("...", GUILayout.Width(30)))
|
||||
{
|
||||
var directory = Path.GetDirectoryName(_outputPath) ?? "Assets";
|
||||
var filename = Path.GetFileName(_outputPath);
|
||||
var path = EditorUtility.SaveFilePanel("Save Generated Class", directory, filename, "cs");
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
// 상대 경로로 변환
|
||||
if (path.StartsWith(Application.dataPath))
|
||||
{
|
||||
path = "Assets" + path.Substring(Application.dataPath.Length);
|
||||
}
|
||||
_outputPath = path;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.Space(5);
|
||||
|
||||
// 클래스명
|
||||
_className = EditorGUILayout.TextField("Class Name", _className);
|
||||
|
||||
// 네임스페이스
|
||||
_namespace = EditorGUILayout.TextField("Namespace", _namespace);
|
||||
|
||||
EditorGUILayout.Space(5);
|
||||
|
||||
// 옵션
|
||||
_includeSubfolders = EditorGUILayout.Toggle("Include Subfolders", _includeSubfolders);
|
||||
_generatePreview = EditorGUILayout.Toggle("Show Preview", _generatePreview);
|
||||
|
||||
EditorGUILayout.Space(10);
|
||||
|
||||
// 폴더 존재 여부 및 아이콘 수 표시
|
||||
var folderExists = Directory.Exists(_iconsFolder);
|
||||
var outputExists = File.Exists(_outputPath);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Icons Folder:", GUILayout.Width(100));
|
||||
EditorGUILayout.LabelField(folderExists ? "Found" : "Not Found",
|
||||
folderExists ? EditorStyles.label : EditorStyles.boldLabel);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if (folderExists)
|
||||
{
|
||||
var iconCount = CountIcons(_iconsFolder, _includeSubfolders);
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Icons Found:", GUILayout.Width(100));
|
||||
EditorGUILayout.LabelField($"{iconCount} images");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Output File:", GUILayout.Width(100));
|
||||
EditorGUILayout.LabelField(outputExists ? "Exists (will overwrite)" : "New file");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.Space(10);
|
||||
|
||||
// 버튼들
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
|
||||
GUI.enabled = folderExists;
|
||||
if (GUILayout.Button("Scan & Preview", GUILayout.Height(25)))
|
||||
{
|
||||
SaveSettings();
|
||||
ScanIcons();
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Generate", GUILayout.Height(25)))
|
||||
{
|
||||
SaveSettings();
|
||||
Generate(_iconsFolder, _outputPath, _className, _namespace, _includeSubfolders);
|
||||
}
|
||||
GUI.enabled = true;
|
||||
|
||||
if (GUILayout.Button("Reset", GUILayout.Height(25)))
|
||||
{
|
||||
_iconsFolder = DefaultIconsFolder;
|
||||
_outputPath = DefaultOutputPath;
|
||||
_className = DefaultClassName;
|
||||
_namespace = DefaultNamespace;
|
||||
_includeSubfolders = true;
|
||||
_generatePreview = true;
|
||||
SaveSettings();
|
||||
ClearPreviewTextures();
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// 미리보기 영역
|
||||
if (_generatePreview && _previewIcons != null && _previewIcons.Count > 0)
|
||||
{
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField($"Preview ({_previewIcons.Count} icons)", EditorStyles.boldLabel);
|
||||
|
||||
_scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUILayout.ExpandHeight(true));
|
||||
|
||||
var iconSize = 48;
|
||||
var padding = 4;
|
||||
var labelHeight = 16;
|
||||
var itemWidth = iconSize + padding * 2;
|
||||
var itemHeight = iconSize + labelHeight + padding * 2;
|
||||
|
||||
var windowWidth = position.width - 20;
|
||||
var columns = Mathf.Max(1, (int)(windowWidth / itemWidth));
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
var currentColumn = 0;
|
||||
|
||||
foreach (var icon in _previewIcons)
|
||||
{
|
||||
if (currentColumn >= columns)
|
||||
{
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
currentColumn = 0;
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginVertical(GUILayout.Width(itemWidth), GUILayout.Height(itemHeight));
|
||||
|
||||
// 아이콘 이미지
|
||||
var rect = GUILayoutUtility.GetRect(iconSize, iconSize);
|
||||
if (icon.Preview != null)
|
||||
{
|
||||
GUI.DrawTexture(rect, icon.Preview, ScaleMode.ScaleToFit);
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUI.DrawRect(rect, new Color(0.2f, 0.2f, 0.2f));
|
||||
}
|
||||
|
||||
// 필드명
|
||||
var style = new GUIStyle(EditorStyles.miniLabel)
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
clipping = TextClipping.Clip
|
||||
};
|
||||
EditorGUILayout.LabelField(icon.FieldName, style, GUILayout.Width(itemWidth), GUILayout.Height(labelHeight));
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
currentColumn++;
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
}
|
||||
|
||||
private void ScanIcons()
|
||||
{
|
||||
ClearPreviewTextures();
|
||||
_previewIcons = GetIconInfos(_iconsFolder, _includeSubfolders);
|
||||
|
||||
// 프리뷰 텍스처 로드
|
||||
foreach (var icon in _previewIcons)
|
||||
{
|
||||
icon.Preview = AssetDatabase.LoadAssetAtPath<Texture2D>(icon.FilePath);
|
||||
}
|
||||
}
|
||||
|
||||
private static int CountIcons(string folder, bool includeSubfolders)
|
||||
{
|
||||
var searchOption = includeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
|
||||
var count = 0;
|
||||
|
||||
foreach (var ext in SupportedExtensions)
|
||||
{
|
||||
count += Directory.GetFiles(folder, $"*{ext}", searchOption).Length;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
private static List<IconInfo> GetIconInfos(string folder, bool includeSubfolders)
|
||||
{
|
||||
var result = new List<IconInfo>();
|
||||
var searchOption = includeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
|
||||
var usedNames = new HashSet<string>();
|
||||
|
||||
// Resources 폴더 기준 경로 계산
|
||||
var resourcesIndex = folder.IndexOf("Resources/", StringComparison.OrdinalIgnoreCase);
|
||||
var isInResources = resourcesIndex >= 0;
|
||||
var resourcesBasePath = isInResources ? folder.Substring(resourcesIndex + "Resources/".Length) : "";
|
||||
|
||||
foreach (var ext in SupportedExtensions)
|
||||
{
|
||||
var files = Directory.GetFiles(folder, $"*{ext}", searchOption);
|
||||
foreach (var file in files)
|
||||
{
|
||||
var normalizedPath = file.Replace("\\", "/");
|
||||
var fileName = Path.GetFileNameWithoutExtension(normalizedPath);
|
||||
var relativePath = normalizedPath.Substring(folder.Length).TrimStart('/');
|
||||
var relativeDir = Path.GetDirectoryName(relativePath)?.Replace("\\", "/") ?? "";
|
||||
|
||||
// Resources.Load용 경로 (확장자 제외)
|
||||
string resourcePath;
|
||||
if (isInResources)
|
||||
{
|
||||
var fullRelative = string.IsNullOrEmpty(resourcesBasePath)
|
||||
? relativePath
|
||||
: $"{resourcesBasePath}/{relativePath}";
|
||||
resourcePath = Path.ChangeExtension(fullRelative, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
resourcePath = normalizedPath; // Resources 외부면 전체 경로 사용
|
||||
}
|
||||
|
||||
var fieldName = ConvertToFieldName(fileName, relativeDir, usedNames);
|
||||
|
||||
result.Add(new IconInfo
|
||||
{
|
||||
FilePath = normalizedPath,
|
||||
FileName = fileName,
|
||||
FieldName = fieldName,
|
||||
ResourcePath = resourcePath,
|
||||
RelativePath = relativePath
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return result.OrderBy(i => i.FieldName).ToList();
|
||||
}
|
||||
|
||||
public static void Generate(string iconsFolder, string outputPath, string className, string namespaceName, bool includeSubfolders)
|
||||
{
|
||||
if (!Directory.Exists(iconsFolder))
|
||||
{
|
||||
Debug.LogError($"아이콘 폴더를 찾을 수 없습니다: {iconsFolder}");
|
||||
return;
|
||||
}
|
||||
|
||||
var icons = GetIconInfos(iconsFolder, includeSubfolders);
|
||||
if (icons.Count == 0)
|
||||
{
|
||||
Debug.LogError("아이콘을 찾을 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var code = GenerateCode(icons, className, namespaceName, iconsFolder);
|
||||
|
||||
// 디렉토리 생성
|
||||
var directory = Path.GetDirectoryName(outputPath);
|
||||
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
|
||||
{
|
||||
Directory.CreateDirectory(directory);
|
||||
}
|
||||
|
||||
File.WriteAllText(outputPath, code, Encoding.UTF8);
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
Debug.Log($"{className}.cs 생성 완료: {icons.Count}개 아이콘 ({outputPath})");
|
||||
}
|
||||
|
||||
private static string GenerateCode(List<IconInfo> icons, string className, string namespaceName, string sourceFolder)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
// Resources 폴더 여부 확인
|
||||
var isInResources = sourceFolder.Contains("Resources");
|
||||
|
||||
sb.AppendLine("// <auto-generated>");
|
||||
sb.AppendLine("// 이 파일은 UTKImageIconsGenerator에 의해 자동 생성되었습니다.");
|
||||
sb.AppendLine("// 직접 수정하지 마세요. Tools > UTK > Image Icons Generator 메뉴로 재생성하세요.");
|
||||
sb.AppendLine($"// Source: {sourceFolder}");
|
||||
sb.AppendLine("// </auto-generated>");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("#nullable enable");
|
||||
sb.AppendLine("using System.Collections.Generic;");
|
||||
sb.AppendLine("using System.Threading;");
|
||||
sb.AppendLine("using Cysharp.Threading.Tasks;");
|
||||
sb.AppendLine("using UnityEngine;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine($"namespace {namespaceName}");
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 이미지 아이콘 리소스 경로 상수 클래스입니다.");
|
||||
sb.AppendLine($" /// 총 {icons.Count}개의 아이콘을 포함합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <example>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine($" /// // 상수로 리소스 경로 사용");
|
||||
sb.AppendLine($" /// string path = {className}.Home;");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 동기 Sprite 로드 (캐싱됨)");
|
||||
sb.AppendLine($" /// Sprite sprite = {className}.LoadSprite({className}.Home);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 비동기 Sprite 로드 (UniTask, 캐싱됨)");
|
||||
sb.AppendLine($" /// Sprite? sprite = await {className}.LoadSpriteAsync({className}.Home, cancellationToken);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 동기 Texture2D 로드 (캐싱됨)");
|
||||
sb.AppendLine($" /// Texture2D texture = {className}.LoadTexture({className}.Settings);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 비동기 Texture2D 로드 (UniTask, 캐싱됨)");
|
||||
sb.AppendLine($" /// Texture2D? texture = await {className}.LoadTextureAsync({className}.Settings, cancellationToken);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 이름으로 Sprite 로드");
|
||||
sb.AppendLine($" /// Sprite icon = {className}.LoadSpriteByName(\"home\");");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 이름으로 비동기 Sprite 로드");
|
||||
sb.AppendLine($" /// Sprite? icon = await {className}.LoadSpriteByNameAsync(\"home\", cancellationToken);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 이름으로 경로 조회");
|
||||
sb.AppendLine($" /// string iconPath = {className}.GetPath(\"settings\");");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 아이콘 존재 여부 확인");
|
||||
sb.AppendLine($" /// if ({className}.HasIcon(\"search\")) {{ }}");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 전체 아이콘 이름 순회");
|
||||
sb.AppendLine($" /// foreach (var name in {className}.GetAllIconNames()) {{ }}");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 캐시 클리어");
|
||||
sb.AppendLine($" /// {className}.ClearCache();");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// </example>");
|
||||
sb.AppendLine(" /// <remarks>");
|
||||
sb.AppendLine(" /// <para><b>UXML에서 사용하기:</b></para>");
|
||||
sb.AppendLine(" /// <para>UXML에서 이미지 아이콘을 사용하려면 USS에서 background-image를 설정합니다.</para>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine(" /// /* USS 파일 */");
|
||||
sb.AppendLine(" /// .my-icon {");
|
||||
sb.AppendLine(" /// width: 24px;");
|
||||
sb.AppendLine(" /// height: 24px;");
|
||||
sb.AppendLine(" /// background-image: resource('UIToolkit/Images/icon_setting_22');");
|
||||
sb.AppendLine(" /// }");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine(" /// <!-- UXML 파일 -->");
|
||||
sb.AppendLine(" /// <ui:VisualElement class=\"my-icon\" />");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// <para><b>C# 코드에서 UXML 요소에 이미지 적용:</b></para>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine($" /// var iconElement = root.Q<VisualElement>(\"my-icon\");");
|
||||
sb.AppendLine($" /// var texture = {className}.LoadTextureByName(\"icon_setting_22\");");
|
||||
sb.AppendLine(" /// iconElement.style.backgroundImage = new StyleBackground(texture);");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// <para><b>Image 요소에서 사용:</b></para>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine($" /// var image = root.Q<Image>(\"my-image\");");
|
||||
sb.AppendLine($" /// image.sprite = {className}.LoadSpriteByName(\"btn_close_16\");");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// </remarks>");
|
||||
sb.AppendLine($" public static class {className}");
|
||||
sb.AppendLine(" {");
|
||||
|
||||
// 아이콘 경로 상수 생성
|
||||
foreach (var icon in icons)
|
||||
{
|
||||
sb.AppendLine($" /// <summary>{icon.RelativePath}</summary>");
|
||||
sb.AppendLine($" public const string {icon.FieldName} = \"{icon.ResourcePath}\";");
|
||||
}
|
||||
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #region Lookup & Load");
|
||||
sb.AppendLine();
|
||||
|
||||
// 이름으로 경로 조회 딕셔너리
|
||||
sb.AppendLine(" private static readonly Dictionary<string, string> _pathsByName = new()");
|
||||
sb.AppendLine(" {");
|
||||
foreach (var icon in icons)
|
||||
{
|
||||
sb.AppendLine($" [\"{icon.FileName}\"] = \"{icon.ResourcePath}\",");
|
||||
}
|
||||
sb.AppendLine(" };");
|
||||
sb.AppendLine();
|
||||
|
||||
// 캐시 딕셔너리
|
||||
sb.AppendLine(" private static readonly Dictionary<string, Sprite?> _spriteCache = new();");
|
||||
sb.AppendLine(" private static readonly Dictionary<string, Texture2D?> _textureCache = new();");
|
||||
sb.AppendLine();
|
||||
|
||||
// 조회 메서드
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 리소스 경로를 조회합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 파일명 (확장자 제외)</param>");
|
||||
sb.AppendLine(" /// <returns>리소스 경로, 없으면 빈 문자열</returns>");
|
||||
sb.AppendLine(" public static string GetPath(string iconName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" return _pathsByName.TryGetValue(iconName, out var path) ? path : string.Empty;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘이 존재하는지 확인합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static bool HasIcon(string iconName) => _pathsByName.ContainsKey(iconName);");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 모든 아이콘 이름 목록을 반환합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static IEnumerable<string> GetAllIconNames() => _pathsByName.Keys;");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 리소스 경로로 아이콘 이름을 조회합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"resourcePath\">리소스 경로 (예: Icons/Home)</param>");
|
||||
sb.AppendLine(" /// <returns>아이콘 이름, 없으면 빈 문자열</returns>");
|
||||
sb.AppendLine(" public static string GetIconName(string resourcePath)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" foreach (var kvp in _pathsByName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (kvp.Value == resourcePath) return kvp.Key;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" return string.Empty;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 전체 아이콘 수를 반환합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine($" public static int Count => {icons.Count};");
|
||||
sb.AppendLine();
|
||||
|
||||
// 동기 로드 메서드들
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 리소스 경로로 Sprite를 동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"resourcePath\">리소스 경로 (예: Icons/Home)</param>");
|
||||
sb.AppendLine(" public static Sprite? LoadSprite(string resourcePath)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_spriteCache.TryGetValue(resourcePath, out var cached))");
|
||||
sb.AppendLine(" return cached;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var sprite = Resources.Load<Sprite>(resourcePath);");
|
||||
sb.AppendLine(" _spriteCache[resourcePath] = sprite;");
|
||||
sb.AppendLine(" return sprite;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 리소스 경로로 Sprite를 비동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"resourcePath\">리소스 경로 (예: Icons/Home)</param>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" public static async UniTask<Sprite?> LoadSpriteAsync(string resourcePath, CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_spriteCache.TryGetValue(resourcePath, out var cached))");
|
||||
sb.AppendLine(" return cached;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var request = Resources.LoadAsync<Sprite>(resourcePath);");
|
||||
sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var sprite = request.asset as Sprite;");
|
||||
sb.AppendLine(" _spriteCache[resourcePath] = sprite;");
|
||||
sb.AppendLine(" return sprite;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 리소스 경로로 Texture2D를 동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"resourcePath\">리소스 경로 (예: Icons/Home)</param>");
|
||||
sb.AppendLine(" public static Texture2D? LoadTexture(string resourcePath)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_textureCache.TryGetValue(resourcePath, out var cached))");
|
||||
sb.AppendLine(" return cached;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var texture = Resources.Load<Texture2D>(resourcePath);");
|
||||
sb.AppendLine(" _textureCache[resourcePath] = texture;");
|
||||
sb.AppendLine(" return texture;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 리소스 경로로 Texture2D를 비동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"resourcePath\">리소스 경로 (예: Icons/Home)</param>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" public static async UniTask<Texture2D?> LoadTextureAsync(string resourcePath, CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_textureCache.TryGetValue(resourcePath, out var cached))");
|
||||
sb.AppendLine(" return cached;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var request = Resources.LoadAsync<Texture2D>(resourcePath);");
|
||||
sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var texture = request.asset as Texture2D;");
|
||||
sb.AppendLine(" _textureCache[resourcePath] = texture;");
|
||||
sb.AppendLine(" return texture;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 Sprite를 동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 파일명 (확장자 제외)</param>");
|
||||
sb.AppendLine(" public static Sprite? LoadSpriteByName(string iconName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var path = GetPath(iconName);");
|
||||
sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : LoadSprite(path);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 Sprite를 비동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 파일명 (확장자 제외)</param>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" public static async UniTask<Sprite?> LoadSpriteByNameAsync(string iconName, CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var path = GetPath(iconName);");
|
||||
sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : await LoadSpriteAsync(path, ct);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 Texture2D를 동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 파일명 (확장자 제외)</param>");
|
||||
sb.AppendLine(" public static Texture2D? LoadTextureByName(string iconName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var path = GetPath(iconName);");
|
||||
sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : LoadTexture(path);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 Texture2D를 비동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 파일명 (확장자 제외)</param>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" public static async UniTask<Texture2D?> LoadTextureByNameAsync(string iconName, CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var path = GetPath(iconName);");
|
||||
sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : await LoadTextureAsync(path, ct);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 캐시를 클리어합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static void ClearCache()");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" _spriteCache.Clear();");
|
||||
sb.AppendLine(" _textureCache.Clear();");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #endregion");
|
||||
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static string ConvertToFieldName(string fileName, string relativeDir, HashSet<string> usedNames)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
// 서브폴더가 있으면 접두사로 추가
|
||||
if (!string.IsNullOrEmpty(relativeDir))
|
||||
{
|
||||
var dirParts = relativeDir.Split('/');
|
||||
foreach (var part in dirParts)
|
||||
{
|
||||
AppendPascalCase(sb, part);
|
||||
}
|
||||
sb.Append('_');
|
||||
}
|
||||
|
||||
// 파일명 변환
|
||||
AppendPascalCase(sb, fileName);
|
||||
|
||||
var result = sb.ToString();
|
||||
|
||||
// 숫자로 시작하면 앞에 _ 추가
|
||||
if (result.Length > 0 && char.IsDigit(result[0]))
|
||||
{
|
||||
result = "_" + result;
|
||||
}
|
||||
|
||||
// 빈 문자열이면 기본값
|
||||
if (string.IsNullOrEmpty(result))
|
||||
{
|
||||
result = "_Icon";
|
||||
}
|
||||
|
||||
// 중복 처리
|
||||
var originalResult = result;
|
||||
var counter = 2;
|
||||
while (usedNames.Contains(result))
|
||||
{
|
||||
result = $"{originalResult}_{counter}";
|
||||
counter++;
|
||||
}
|
||||
|
||||
usedNames.Add(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void AppendPascalCase(StringBuilder sb, string input)
|
||||
{
|
||||
// 특수문자를 구분자로 사용
|
||||
var words = input.Split(new[] { '_', '-', ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
foreach (var word in words)
|
||||
{
|
||||
if (word.Length == 0) continue;
|
||||
|
||||
// 첫 글자 대문자
|
||||
sb.Append(char.ToUpper(word[0]));
|
||||
if (word.Length > 1)
|
||||
{
|
||||
// 나머지는 소문자로 (단, 연속 대문자면 유지)
|
||||
for (int i = 1; i < word.Length; i++)
|
||||
{
|
||||
if (char.IsUpper(word[i]) && i + 1 < word.Length && char.IsUpper(word[i + 1]))
|
||||
{
|
||||
sb.Append(word[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(char.ToLower(word[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs.meta
Normal file
2
Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d7dbdad9e333f4478d838c2d78bb2be
|
||||
615
Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs
Normal file
615
Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs
Normal file
@@ -0,0 +1,615 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UVC.UIToolkit.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// MaterialSymbolsOutlinedCodepoints.txt 파일을 파싱하여
|
||||
/// UTKMaterialIcons.cs 정적 클래스를 자동 생성하는 에디터 도구입니다.
|
||||
/// </summary>
|
||||
public class UTKMaterialIconsGenerator : EditorWindow
|
||||
{
|
||||
#region EditorPrefs Keys
|
||||
|
||||
private const string PrefKeyCodepointsPath = "UTK_MaterialIcons_CodepointsPath";
|
||||
private const string PrefKeyOutputPath = "UTK_MaterialIcons_OutputPath";
|
||||
private const string PrefKeyClassName = "UTK_MaterialIcons_ClassName";
|
||||
private const string PrefKeyNamespace = "UTK_MaterialIcons_Namespace";
|
||||
private const string PrefKeyFontPath = "UTK_MaterialIcons_FontPath";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Default Values
|
||||
|
||||
private const string DefaultCodepointsPath = "Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt";
|
||||
private const string DefaultOutputPath = "Assets/Scripts/UVC/UIToolkit/Common/UTKMaterialIcons.cs";
|
||||
private const string DefaultClassName = "UTKMaterialIcons";
|
||||
private const string DefaultNamespace = "UVC.UIToolkit";
|
||||
private const string DefaultFontPath = "Fonts/Icons/MaterialSymbolsOutlined";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private string _codepointsPath = DefaultCodepointsPath;
|
||||
private string _outputPath = DefaultOutputPath;
|
||||
private string _className = DefaultClassName;
|
||||
private string _namespace = DefaultNamespace;
|
||||
private string _fontPath = DefaultFontPath;
|
||||
|
||||
#endregion
|
||||
|
||||
[MenuItem("Tools/UTK/Material Icons Generator")]
|
||||
public static void ShowWindow()
|
||||
{
|
||||
var window = GetWindow<UTKMaterialIconsGenerator>("Material Icons Generator");
|
||||
window.minSize = new Vector2(450, 250);
|
||||
window.LoadSettings();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/UTK/Generate Material Icons Class (Quick)")]
|
||||
public static void GenerateQuick()
|
||||
{
|
||||
var codepointsPath = EditorPrefs.GetString(PrefKeyCodepointsPath, DefaultCodepointsPath);
|
||||
var outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
|
||||
var className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
|
||||
var namespaceName = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
|
||||
var fontPath = EditorPrefs.GetString(PrefKeyFontPath, DefaultFontPath);
|
||||
|
||||
Generate(codepointsPath, outputPath, className, namespaceName, fontPath);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
LoadSettings();
|
||||
}
|
||||
|
||||
private void LoadSettings()
|
||||
{
|
||||
_codepointsPath = EditorPrefs.GetString(PrefKeyCodepointsPath, DefaultCodepointsPath);
|
||||
_outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
|
||||
_className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
|
||||
_namespace = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
|
||||
_fontPath = EditorPrefs.GetString(PrefKeyFontPath, DefaultFontPath);
|
||||
}
|
||||
|
||||
private void SaveSettings()
|
||||
{
|
||||
EditorPrefs.SetString(PrefKeyCodepointsPath, _codepointsPath);
|
||||
EditorPrefs.SetString(PrefKeyOutputPath, _outputPath);
|
||||
EditorPrefs.SetString(PrefKeyClassName, _className);
|
||||
EditorPrefs.SetString(PrefKeyNamespace, _namespace);
|
||||
EditorPrefs.SetString(PrefKeyFontPath, _fontPath);
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Material Icons Class Generator", EditorStyles.boldLabel);
|
||||
EditorGUILayout.Space(5);
|
||||
EditorGUILayout.HelpBox("Codepoints 파일을 파싱하여 C# 정적 클래스를 생성합니다.", UnityEditor.MessageType.Info);
|
||||
EditorGUILayout.Space(10);
|
||||
|
||||
// Codepoints 파일 경로
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
_codepointsPath = EditorGUILayout.TextField("Codepoints File", _codepointsPath);
|
||||
if (GUILayout.Button("...", GUILayout.Width(30)))
|
||||
{
|
||||
var path = EditorUtility.OpenFilePanel("Select Codepoints File", "Assets", "txt");
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
// 상대 경로로 변환
|
||||
if (path.StartsWith(Application.dataPath))
|
||||
{
|
||||
path = "Assets" + path.Substring(Application.dataPath.Length);
|
||||
}
|
||||
_codepointsPath = path;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// 출력 파일 경로
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
_outputPath = EditorGUILayout.TextField("Output File", _outputPath);
|
||||
if (GUILayout.Button("...", GUILayout.Width(30)))
|
||||
{
|
||||
var directory = Path.GetDirectoryName(_outputPath) ?? "Assets";
|
||||
var filename = Path.GetFileName(_outputPath);
|
||||
var path = EditorUtility.SaveFilePanel("Save Generated Class", directory, filename, "cs");
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
// 상대 경로로 변환
|
||||
if (path.StartsWith(Application.dataPath))
|
||||
{
|
||||
path = "Assets" + path.Substring(Application.dataPath.Length);
|
||||
}
|
||||
_outputPath = path;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.Space(5);
|
||||
|
||||
// 클래스명
|
||||
_className = EditorGUILayout.TextField("Class Name", _className);
|
||||
|
||||
// 네임스페이스
|
||||
_namespace = EditorGUILayout.TextField("Namespace", _namespace);
|
||||
|
||||
// 폰트 경로 (Resources 기준)
|
||||
_fontPath = EditorGUILayout.TextField("Font Path (Resources)", _fontPath);
|
||||
EditorGUILayout.HelpBox("Resources.Load에 사용할 폰트 경로 (확장자 제외)", UnityEditor.MessageType.None);
|
||||
|
||||
EditorGUILayout.Space(15);
|
||||
|
||||
// 파일 존재 여부 표시
|
||||
var codepointsExists = File.Exists(_codepointsPath);
|
||||
var outputExists = File.Exists(_outputPath);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Codepoints File:", GUILayout.Width(100));
|
||||
EditorGUILayout.LabelField(codepointsExists ? "Found" : "Not Found",
|
||||
codepointsExists ? EditorStyles.label : EditorStyles.boldLabel);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Output File:", GUILayout.Width(100));
|
||||
EditorGUILayout.LabelField(outputExists ? "Exists (will overwrite)" : "New file",
|
||||
EditorStyles.label);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.Space(15);
|
||||
|
||||
// 버튼들
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
|
||||
GUI.enabled = codepointsExists;
|
||||
if (GUILayout.Button("Generate", GUILayout.Height(30)))
|
||||
{
|
||||
SaveSettings();
|
||||
Generate(_codepointsPath, _outputPath, _className, _namespace, _fontPath);
|
||||
}
|
||||
GUI.enabled = true;
|
||||
|
||||
if (GUILayout.Button("Reset to Defaults", GUILayout.Height(30)))
|
||||
{
|
||||
_codepointsPath = DefaultCodepointsPath;
|
||||
_outputPath = DefaultOutputPath;
|
||||
_className = DefaultClassName;
|
||||
_namespace = DefaultNamespace;
|
||||
_fontPath = DefaultFontPath;
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
public static void Generate(string codepointsPath, string outputPath, string className, string namespaceName, string fontPath = DefaultFontPath)
|
||||
{
|
||||
if (!File.Exists(codepointsPath))
|
||||
{
|
||||
Debug.LogError($"Codepoints 파일을 찾을 수 없습니다: {codepointsPath}");
|
||||
return;
|
||||
}
|
||||
|
||||
var icons = ParseCodepoints(codepointsPath);
|
||||
if (icons.Count == 0)
|
||||
{
|
||||
Debug.LogError("파싱된 아이콘이 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var code = GenerateCode(icons, className, namespaceName, fontPath);
|
||||
|
||||
// 디렉토리 생성
|
||||
var directory = Path.GetDirectoryName(outputPath);
|
||||
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
|
||||
{
|
||||
Directory.CreateDirectory(directory);
|
||||
}
|
||||
|
||||
File.WriteAllText(outputPath, code, Encoding.UTF8);
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
Debug.Log($"{className}.cs 생성 완료: {icons.Count}개 아이콘 ({outputPath})");
|
||||
}
|
||||
|
||||
private static List<(string name, string unicode)> ParseCodepoints(string path)
|
||||
{
|
||||
var result = new List<(string, string)>();
|
||||
var lines = File.ReadAllLines(path);
|
||||
|
||||
foreach (var line in lines)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(line)) continue;
|
||||
|
||||
var parts = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length >= 2)
|
||||
{
|
||||
result.Add((parts[0], parts[1]));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string GenerateCode(List<(string name, string unicode)> icons, string className, string namespaceName, string fontPath)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var usedNames = new HashSet<string>();
|
||||
|
||||
sb.AppendLine("// <auto-generated>");
|
||||
sb.AppendLine("// 이 파일은 UTKMaterialIconsGenerator에 의해 자동 생성되었습니다.");
|
||||
sb.AppendLine("// 직접 수정하지 마세요. Tools > UTK > Material Icons Generator 메뉴로 재생성하세요.");
|
||||
sb.AppendLine("// </auto-generated>");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("#nullable enable");
|
||||
sb.AppendLine("using System;");
|
||||
sb.AppendLine("using System.Collections.Generic;");
|
||||
sb.AppendLine("using System.Threading;");
|
||||
sb.AppendLine("using Cysharp.Threading.Tasks;");
|
||||
sb.AppendLine("using UnityEngine;");
|
||||
sb.AppendLine("using UnityEngine.UIElements;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine($"namespace {namespaceName}");
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// Material Symbols Outlined 아이콘 유니코드 문자 상수 클래스입니다.");
|
||||
sb.AppendLine($" /// 총 {icons.Count}개의 아이콘을 포함합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <example>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine($" /// // 동기 폰트 로드 (캐싱됨)");
|
||||
sb.AppendLine($" /// Font font = {className}.LoadFont();");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 비동기 폰트 로드 (UniTask)");
|
||||
sb.AppendLine($" /// Font? font = await {className}.LoadFontAsync(cancellationToken);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // Label에 아이콘 적용");
|
||||
sb.AppendLine($" /// var label = new Label({className}.Home);");
|
||||
sb.AppendLine($" /// {className}.ApplyIconStyle(label);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 비동기로 아이콘 스타일 적용");
|
||||
sb.AppendLine($" /// await {className}.ApplyIconStyleAsync(label, cancellationToken);");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 또는 StyleFontDefinition 직접 사용");
|
||||
sb.AppendLine($" /// label.style.unityFontDefinition = {className}.GetFontDefinition();");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 이름으로 아이콘 조회");
|
||||
sb.AppendLine($" /// string icon = {className}.GetIcon(\"settings\");");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 아이콘 존재 여부 확인");
|
||||
sb.AppendLine($" /// if ({className}.HasIcon(\"search\")) {{ }}");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 존재하는 유니코드 문자인지 확인");
|
||||
sb.AppendLine($" /// if ({className}.IsIconChar(\"□\")) {{ }}");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 전체 아이콘 이름 순회");
|
||||
sb.AppendLine($" /// foreach (var name in {className}.GetAllIconNames()) {{ }}");
|
||||
sb.AppendLine(" /// ");
|
||||
sb.AppendLine($" /// // 아이콘 총 개수");
|
||||
sb.AppendLine($" /// int count = {className}.Count;");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// </example>");
|
||||
sb.AppendLine(" /// <remarks>");
|
||||
sb.AppendLine(" /// <para><b>UXML에서 사용하기:</b></para>");
|
||||
sb.AppendLine(" /// <para>UXML에서 Material Icons를 사용하려면 USS에서 폰트를 설정하고, Label의 text에 유니코드 문자를 직접 입력합니다.</para>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine(" /// /* USS 파일 */");
|
||||
sb.AppendLine(" /// .material-icon {");
|
||||
sb.AppendLine(" /// -unity-font: resource('Fonts/Icons/MaterialSymbolsOutlined');");
|
||||
sb.AppendLine(" /// font-size: 24px;");
|
||||
sb.AppendLine(" /// }");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine(" /// <!-- UXML 파일 -->");
|
||||
sb.AppendLine(" /// <ui:Label class=\"material-icon\" text=\"\" /> <!-- home 아이콘 -->");
|
||||
sb.AppendLine(" /// <ui:Label class=\"material-icon\" text=\"\" /> <!-- settings 아이콘 -->");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// <para><b>C# 코드에서 UXML Label에 아이콘 적용:</b></para>");
|
||||
sb.AppendLine(" /// <code>");
|
||||
sb.AppendLine($" /// var iconLabel = root.Q<Label>(\"my-icon\");");
|
||||
sb.AppendLine($" /// iconLabel.text = {className}.Settings;");
|
||||
sb.AppendLine($" /// {className}.ApplyIconStyle(iconLabel);");
|
||||
sb.AppendLine(" /// </code>");
|
||||
sb.AppendLine(" /// </remarks>");
|
||||
sb.AppendLine($" public static class {className}");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #region Font");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine($" private const string FontResourcePath = \"{fontPath}\";");
|
||||
sb.AppendLine(" private static Font? _cachedFont;");
|
||||
sb.AppendLine(" private static StyleFontDefinition? _cachedFontDefinition;");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 폰트를 동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <returns>로드된 Font, 실패 시 null</returns>");
|
||||
sb.AppendLine(" public static Font? LoadFont()");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_cachedFont == null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" _cachedFont = Resources.Load<Font>(FontResourcePath);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" return _cachedFont;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 폰트를 비동기로 로드합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" /// <returns>로드된 Font, 실패 시 null</returns>");
|
||||
sb.AppendLine(" public static async UniTask<Font?> LoadFontAsync(CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_cachedFont != null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" return _cachedFont;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var request = Resources.LoadAsync<Font>(FontResourcePath);");
|
||||
sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" _cachedFont = request.asset as Font;");
|
||||
sb.AppendLine(" return _cachedFont;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// UI Toolkit용 StyleFontDefinition을 동기로 반환합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <returns>StyleFontDefinition, 폰트 로드 실패 시 기본값</returns>");
|
||||
sb.AppendLine(" public static StyleFontDefinition GetFontDefinition()");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_cachedFontDefinition == null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var font = LoadFont();");
|
||||
sb.AppendLine(" if (font != null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" _cachedFontDefinition = new StyleFontDefinition(font);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" return _cachedFontDefinition ?? default;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// UI Toolkit용 StyleFontDefinition을 비동기로 반환합니다. (캐싱됨)");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" /// <returns>StyleFontDefinition, 폰트 로드 실패 시 기본값</returns>");
|
||||
sb.AppendLine(" public static async UniTask<StyleFontDefinition> GetFontDefinitionAsync(CancellationToken ct = default)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (_cachedFontDefinition == null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var font = await LoadFontAsync(ct);");
|
||||
sb.AppendLine(" if (font != null)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" _cachedFontDefinition = new StyleFontDefinition(font);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" return _cachedFontDefinition ?? default;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// VisualElement에 아이콘 폰트 스타일을 동기로 적용합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"element\">스타일을 적용할 요소</param>");
|
||||
sb.AppendLine(" /// <param name=\"fontSize\">폰트 크기 (기본값: 24)</param>");
|
||||
sb.AppendLine(" public static void ApplyIconStyle(VisualElement element, int? fontSize = 24)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" element.style.unityFontDefinition = GetFontDefinition();");
|
||||
sb.AppendLine(" if(fontSize != null) element.style.fontSize = fontSize.Value;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// VisualElement에 아이콘 폰트 스타일을 비동기로 적용합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"element\">스타일을 적용할 요소</param>");
|
||||
sb.AppendLine(" /// <param name=\"ct\">취소 토큰</param>");
|
||||
sb.AppendLine(" /// <param name=\"fontSize\">폰트 크기 (기본값: 24)</param>");
|
||||
sb.AppendLine(" public static async UniTask ApplyIconStyleAsync(VisualElement element, CancellationToken ct = default, int fontSize = 24)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" element.style.unityFontDefinition = await GetFontDefinitionAsync(ct);");
|
||||
sb.AppendLine(" element.style.fontSize = fontSize;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 폰트 캐시를 클리어합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static void ClearFontCache()");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" _cachedFont = null;");
|
||||
sb.AppendLine(" _cachedFontDefinition = null;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #endregion");
|
||||
sb.AppendLine();
|
||||
|
||||
// 아이콘 상수 생성
|
||||
foreach (var (name, unicode) in icons)
|
||||
{
|
||||
var fieldName = ConvertToFieldName(name, usedNames);
|
||||
var character = GetCharacterFromUnicode(unicode);
|
||||
var escapedChar = EscapeForCSharp(character);
|
||||
|
||||
sb.AppendLine($" /// <summary>{name} (U+{unicode.ToUpper()})</summary>");
|
||||
sb.AppendLine($" public const string {fieldName} = \"{escapedChar}\";");
|
||||
}
|
||||
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #region Lookup");
|
||||
sb.AppendLine();
|
||||
|
||||
// 이름으로 아이콘 조회 딕셔너리
|
||||
sb.AppendLine(" private static readonly Dictionary<string, string> _iconsByName = new()");
|
||||
sb.AppendLine(" {");
|
||||
foreach (var (name, unicode) in icons)
|
||||
{
|
||||
var character = GetCharacterFromUnicode(unicode);
|
||||
var escapedChar = EscapeForCSharp(character);
|
||||
sb.AppendLine($" [\"{name}\"] = \"{escapedChar}\",");
|
||||
}
|
||||
sb.AppendLine(" };");
|
||||
sb.AppendLine();
|
||||
|
||||
// 조회 메서드
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘 이름으로 유니코드 문자를 조회합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" /// <param name=\"iconName\">아이콘 이름 (예: \"home\", \"settings\")</param>");
|
||||
sb.AppendLine(" /// <returns>아이콘 문자, 없으면 빈 문자열</returns>");
|
||||
sb.AppendLine(" public static string GetIcon(string iconName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" // 실제 유니코드 문자가 아니라 이스케이프 문자열인 경우 변환");
|
||||
sb.AppendLine(" if (iconName.StartsWith(\"\\u\") && iconName.Length == 6)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" try");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var code = Convert.ToInt32(iconName.Substring(2), 16);");
|
||||
sb.AppendLine(" iconName = char.ConvertFromUtf32(code);");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" catch");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" Debug.LogWarning($\"Failed to convert escape sequence: {iconName}\");");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" ");
|
||||
sb.AppendLine(" if(IsIconChar(iconName)) return iconName;");
|
||||
sb.AppendLine(" return _iconsByName.TryGetValue(iconName.ToLower(), out var icon) ? icon : string.Empty;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 아이콘이 존재하는지 확인합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static bool HasIcon(string iconName) => _iconsByName.ContainsKey(iconName);");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 유니코드 문자로 아이콘이 존재하는지 확인합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static bool IsIconChar(string iconChar) => _iconsByName.Values.Contains(iconChar);");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 유니코드 문자로 아이콘 이름을 조회합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static string GetIconNameByChar(string iconChar)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" foreach (var kvp in _iconsByName)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" if (string.Equals(kvp.Value, iconChar, StringComparison.OrdinalIgnoreCase)) return kvp.Key;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" return string.Empty;");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 모든 아이콘 이름 목록을 반환합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine(" public static IEnumerable<string> GetAllIconNames() => _iconsByName.Keys;");
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine(" /// <summary>");
|
||||
sb.AppendLine(" /// 전체 아이콘 수를 반환합니다.");
|
||||
sb.AppendLine(" /// </summary>");
|
||||
sb.AppendLine($" public static int Count => {icons.Count};");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" #endregion");
|
||||
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static string ConvertToFieldName(string iconName, HashSet<string> usedNames)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var words = iconName.Split('_', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
foreach (var word in words)
|
||||
{
|
||||
if (word.Length == 0) continue;
|
||||
|
||||
// 첫 글자 대문자, 나머지 소문자 (PascalCase)
|
||||
sb.Append(char.ToUpper(word[0]));
|
||||
if (word.Length > 1)
|
||||
{
|
||||
sb.Append(word.Substring(1).ToLower());
|
||||
}
|
||||
}
|
||||
|
||||
var result = sb.ToString();
|
||||
|
||||
// 숫자로 시작하면 앞에 _ 추가
|
||||
if (result.Length > 0 && char.IsDigit(result[0]))
|
||||
{
|
||||
result = "_" + result;
|
||||
}
|
||||
|
||||
// 빈 문자열이면 기본값
|
||||
if (string.IsNullOrEmpty(result))
|
||||
{
|
||||
result = "_Icon";
|
||||
}
|
||||
|
||||
// 중복 처리
|
||||
var originalResult = result;
|
||||
var counter = 2;
|
||||
while (usedNames.Contains(result))
|
||||
{
|
||||
result = $"{originalResult}_{counter}";
|
||||
counter++;
|
||||
}
|
||||
|
||||
usedNames.Add(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string GetCharacterFromUnicode(string hexCode)
|
||||
{
|
||||
try
|
||||
{
|
||||
var codepoint = int.Parse(hexCode, NumberStyles.HexNumber);
|
||||
return char.ConvertFromUtf32(codepoint);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
|
||||
private static string EscapeForCSharp(string str)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (var c in str)
|
||||
{
|
||||
// 유니코드 이스케이프 시퀀스로 변환
|
||||
if (c > 127 || c < 32)
|
||||
{
|
||||
// Surrogate pair 처리
|
||||
sb.Append($"\\u{(int)c:X4}");
|
||||
}
|
||||
else if (c == '"')
|
||||
{
|
||||
sb.Append("\\\"");
|
||||
}
|
||||
else if (c == '\\')
|
||||
{
|
||||
sb.Append("\\\\");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4f9ee471e14d684aa1d05c88ee24116
|
||||
@@ -1,37 +0,0 @@
|
||||
Quick Outline
|
||||
=============
|
||||
|
||||
Developed by Chris Nolet (c) 2018
|
||||
|
||||
|
||||
Instructions
|
||||
------------
|
||||
|
||||
To add an outline to an object, drag-and-drop the Outline.cs
|
||||
script onto the object. The outline materials will be loaded
|
||||
at runtime.
|
||||
|
||||
You can also add outlines programmatically with:
|
||||
|
||||
var outline = gameObject.AddComponent<Outline>();
|
||||
|
||||
outline.OutlineMode = Outline.Mode.OutlineAll;
|
||||
outline.OutlineColor = Color.yellow;
|
||||
outline.OutlineWidth = 5f;
|
||||
|
||||
The outline script does a small amount of work in Awake().
|
||||
For best results, use outline.enabled to toggle the outline.
|
||||
Avoid removing and re-adding the component if possible.
|
||||
|
||||
For large meshes, you may also like to enable 'Precompute
|
||||
Outline' in the editor. This will reduce the amount of work
|
||||
performed in Awake().
|
||||
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
If the outline appears off-center, please try the following:
|
||||
|
||||
1. Set 'Read/Write Enabled' on each model's import settings.
|
||||
2. Disable 'Optimize Mesh Data' in the player settings.
|
||||
@@ -1,16 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5933bfd39d7a5b843a0ed821f85bca19
|
||||
timeCreated: 1522619008
|
||||
licenseType: Store
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Readme.txt
|
||||
uploadId: 485303
|
||||
@@ -1,25 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: OutlineFill
|
||||
m_Shader: {fileID: 4800000, guid: 4e76d4023d7e0411297c670f878973e2, type: 3}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs: []
|
||||
m_Floats:
|
||||
- _OutlineWidth: 2
|
||||
- _ZTest: 8
|
||||
m_Colors:
|
||||
- _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
@@ -1,17 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 311313efa011949e98b6761d652ad13c
|
||||
timeCreated: 1520576285
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Resources/Materials/OutlineFill.mat
|
||||
uploadId: 485303
|
||||
@@ -1,23 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: OutlineMask
|
||||
m_Shader: {fileID: 4800000, guid: 341b058cd7dee4f5cba5cc59a513619e, type: 3}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs: []
|
||||
m_Floats:
|
||||
- _ZTest: 8
|
||||
m_Colors: []
|
||||
@@ -1,17 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 106f3ff43a17d4967a2b64c7a92e49ec
|
||||
timeCreated: 1520576276
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Resources/Materials/OutlineMask.mat
|
||||
uploadId: 485303
|
||||
@@ -1,81 +0,0 @@
|
||||
//
|
||||
// OutlineFill.shader
|
||||
// QuickOutline
|
||||
//
|
||||
// Created by Chris Nolet on 2/21/18.
|
||||
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||
//
|
||||
|
||||
Shader "Custom/Outline Fill" {
|
||||
Properties {
|
||||
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
|
||||
|
||||
_OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
|
||||
_OutlineWidth("Outline Width", Range(0, 10)) = 2
|
||||
}
|
||||
|
||||
SubShader {
|
||||
Tags {
|
||||
"Queue" = "Transparent+110"
|
||||
"RenderType" = "Transparent"
|
||||
"DisableBatching" = "True"
|
||||
}
|
||||
|
||||
Pass {
|
||||
Name "Fill"
|
||||
Cull Off
|
||||
ZTest [_ZTest]
|
||||
ZWrite Off
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
ColorMask RGB
|
||||
|
||||
Stencil {
|
||||
Ref 1
|
||||
Comp NotEqual
|
||||
}
|
||||
|
||||
CGPROGRAM
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
|
||||
struct appdata {
|
||||
float4 vertex : POSITION;
|
||||
float3 normal : NORMAL;
|
||||
float3 smoothNormal : TEXCOORD3;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
struct v2f {
|
||||
float4 position : SV_POSITION;
|
||||
fixed4 color : COLOR;
|
||||
UNITY_VERTEX_OUTPUT_STEREO
|
||||
};
|
||||
|
||||
uniform fixed4 _OutlineColor;
|
||||
uniform float _OutlineWidth;
|
||||
|
||||
v2f vert(appdata input) {
|
||||
v2f output;
|
||||
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||
|
||||
float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
|
||||
float3 viewPosition = UnityObjectToViewPos(input.vertex);
|
||||
float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
|
||||
|
||||
output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
|
||||
output.color = _OutlineColor;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
fixed4 frag(v2f input) : SV_Target {
|
||||
return input.color;
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e76d4023d7e0411297c670f878973e2
|
||||
timeCreated: 1520575782
|
||||
licenseType: Store
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Resources/Shaders/OutlineFill.shader
|
||||
uploadId: 485303
|
||||
@@ -1,33 +0,0 @@
|
||||
//
|
||||
// OutlineMask.shader
|
||||
// QuickOutline
|
||||
//
|
||||
// Created by Chris Nolet on 2/21/18.
|
||||
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||
//
|
||||
|
||||
Shader "Custom/Outline Mask" {
|
||||
Properties {
|
||||
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
|
||||
}
|
||||
|
||||
SubShader {
|
||||
Tags {
|
||||
"Queue" = "Transparent+100"
|
||||
"RenderType" = "Transparent"
|
||||
}
|
||||
|
||||
Pass {
|
||||
Name "Mask"
|
||||
Cull Off
|
||||
ZTest [_ZTest]
|
||||
ZWrite Off
|
||||
ColorMask 0
|
||||
|
||||
Stencil {
|
||||
Ref 1
|
||||
Pass Replace
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 341b058cd7dee4f5cba5cc59a513619e
|
||||
timeCreated: 1520575773
|
||||
licenseType: Store
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Resources/Shaders/OutlineMask.shader
|
||||
uploadId: 485303
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 932f8193e5396db4babac4756c406dee
|
||||
folderAsset: yes
|
||||
timeCreated: 1522559213
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b0040b0ed7fbd64693e9195d13d25f9
|
||||
folderAsset: yes
|
||||
timeCreated: 1522615600
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,76 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Plane
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 1
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.2509804, g: 0.2509804, b: 0.5019608, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -1,17 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f58cf65ea995c4b45be95713bdea8134
|
||||
timeCreated: 1522540975
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Samples/Materials/Plane.mat
|
||||
uploadId: 485303
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3916faa55c6a94248959031ee0ad499f
|
||||
folderAsset: yes
|
||||
timeCreated: 1522615614
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,778 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
OcclusionCullingSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
m_SceneGUID: 00000000000000000000000000000000
|
||||
m_OcclusionCullingData: {fileID: 0}
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 8
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 0
|
||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 820273532}
|
||||
m_IndirectSpecularColor: {r: 0.18028383, g: 0.22571409, b: 0.30692282, a: 1}
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 9
|
||||
m_GIWorkflowMode: 0
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_TemporalCoherenceThreshold: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 1
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 8
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_TextureWidth: 1024
|
||||
m_TextureHeight: 1024
|
||||
m_AO: 0
|
||||
m_AOMaxDistance: 1
|
||||
m_CompAOExponent: 1
|
||||
m_CompAOExponentDirect: 0
|
||||
m_Padding: 2
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_LightmapsBakeMode: 1
|
||||
m_TextureCompression: 1
|
||||
m_FinalGather: 0
|
||||
m_FinalGatherFiltering: 1
|
||||
m_FinalGatherRayCount: 256
|
||||
m_ReflectionCompression: 2
|
||||
m_MixedBakeMode: 3
|
||||
m_BakeBackend: 0
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 500
|
||||
m_PVRBounces: 2
|
||||
m_PVRFiltering: 0
|
||||
m_PVRFilteringMode: 1
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 5
|
||||
m_PVRFilteringGaussRadiusAO: 2
|
||||
m_PVRFilteringAtrousColorSigma: 1
|
||||
m_PVRFilteringAtrousNormalSigma: 1
|
||||
m_PVRFilteringAtrousPositionSigma: 1
|
||||
m_LightingDataAsset: {fileID: 0}
|
||||
m_ShadowMaskMode: 2
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &122269556
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 122269561}
|
||||
- component: {fileID: 122269560}
|
||||
- component: {fileID: 122269558}
|
||||
- component: {fileID: 122269557}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &122269557
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 122269556}
|
||||
m_Enabled: 1
|
||||
--- !u!124 &122269558
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 122269556}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &122269560
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 122269556}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 5
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 1
|
||||
m_AllowMSAA: 1
|
||||
m_ForceIntoRT: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
m_StereoMirrorMode: 0
|
||||
--- !u!4 &122269561
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 122269556}
|
||||
m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
|
||||
m_LocalPosition: {x: 0, y: 3, z: -4}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0}
|
||||
--- !u!1 &124162633
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 124162634}
|
||||
- component: {fileID: 124162638}
|
||||
- component: {fileID: 124162636}
|
||||
- component: {fileID: 124162635}
|
||||
m_Layer: 0
|
||||
m_Name: Outline Hidden
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &124162634
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 124162633}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -2, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 0.5, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 935070115}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &124162635
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 124162633}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
outlineMode: 2
|
||||
outlineColor: {r: 1, g: 0.2509804, b: 0.2509804, a: 1}
|
||||
outlineWidth: 6
|
||||
--- !u!23 &124162636
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 124162633}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &124162638
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 124162633}
|
||||
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &796971894
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 796971895}
|
||||
- component: {fileID: 796971899}
|
||||
- component: {fileID: 796971897}
|
||||
- component: {fileID: 796971896}
|
||||
m_Layer: 0
|
||||
m_Name: Outline And Silhouette
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &796971895
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 796971894}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 2, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 0.5, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 935070115}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &796971896
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 796971894}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
outlineMode: 3
|
||||
outlineColor: {r: 0.2509804, g: 1, b: 1, a: 1}
|
||||
outlineWidth: 6
|
||||
--- !u!23 &796971897
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 796971894}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &796971899
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 796971894}
|
||||
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &820273531
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 820273533}
|
||||
- component: {fileID: 820273532}
|
||||
m_Layer: 0
|
||||
m_Name: Directional Light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!108 &820273532
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 820273531}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 8
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
|
||||
m_Intensity: 1
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 2
|
||||
m_Resolution: -1
|
||||
m_CustomResolution: -1
|
||||
m_Strength: 1
|
||||
m_Bias: 0.05
|
||||
m_NormalBias: 0.4
|
||||
m_NearPlane: 0.2
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Lightmapping: 4
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
m_BounceIntensity: 1
|
||||
m_ColorTemperature: 6570
|
||||
m_UseColorTemperature: 0
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
--- !u!4 &820273533
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 820273531}
|
||||
m_LocalRotation: {x: 0.40821788, y: 0.23456976, z: -0.10938167, w: 0.8754261}
|
||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 50, y: 30, z: 0}
|
||||
--- !u!1 &935070114
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 935070115}
|
||||
m_Layer: 0
|
||||
m_Name: Outlined Objects
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &935070115
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 935070114}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 1781008194}
|
||||
- {fileID: 124162634}
|
||||
- {fileID: 1346396411}
|
||||
- {fileID: 796971895}
|
||||
- {fileID: 1083549395}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1083549394
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 1083549395}
|
||||
- component: {fileID: 1083549399}
|
||||
- component: {fileID: 1083549397}
|
||||
- component: {fileID: 1083549396}
|
||||
m_Layer: 0
|
||||
m_Name: Outline Visible
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1083549395
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1083549394}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 4, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 935070115}
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1083549396
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1083549394}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
outlineMode: 1
|
||||
outlineColor: {r: 0.2509804, g: 1, b: 0.2509804, a: 1}
|
||||
outlineWidth: 6
|
||||
--- !u!23 &1083549397
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1083549394}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &1083549399
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1083549394}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &1346396410
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 1346396411}
|
||||
- component: {fileID: 1346396415}
|
||||
- component: {fileID: 1346396413}
|
||||
- component: {fileID: 1346396412}
|
||||
m_Layer: 0
|
||||
m_Name: Outline All
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1346396411
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1346396410}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 935070115}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1346396412
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1346396410}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
outlineMode: 0
|
||||
outlineColor: {r: 1, g: 1, b: 0.2509804, a: 1}
|
||||
outlineWidth: 6
|
||||
--- !u!23 &1346396413
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1346396410}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &1346396415
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1346396410}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &1580478821
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 1580478825}
|
||||
- component: {fileID: 1580478824}
|
||||
- component: {fileID: 1580478822}
|
||||
m_Layer: 0
|
||||
m_Name: Plane
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!23 &1580478822
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1580478821}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: f58cf65ea995c4b45be95713bdea8134, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &1580478824
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1580478821}
|
||||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &1580478825
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1580478821}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 10, y: 1, z: 10}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1781008193
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 1781008194}
|
||||
- component: {fileID: 1781008198}
|
||||
- component: {fileID: 1781008196}
|
||||
- component: {fileID: 1781008195}
|
||||
m_Layer: 0
|
||||
m_Name: Silhouette Only
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1781008194
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781008193}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -4, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 935070115}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1781008195
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781008193}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
outlineMode: 4
|
||||
outlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
outlineWidth: 6
|
||||
--- !u!23 &1781008196
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781008193}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 1
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &1781008198
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781008193}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,16 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f23712c79adc910408e872b127e825cf
|
||||
timeCreated: 1522615825
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Samples/Scenes/QuickOutline.unity
|
||||
uploadId: 485303
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3ddbd65d69a9f0b48bab4fe96a1fe099
|
||||
folderAsset: yes
|
||||
timeCreated: 1522559122
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,309 +0,0 @@
|
||||
//
|
||||
// Outline.cs
|
||||
// QuickOutline
|
||||
//
|
||||
// Created by Chris Nolet on 3/30/18.
|
||||
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
|
||||
public class Outline : MonoBehaviour {
|
||||
private static HashSet<Mesh> registeredMeshes = new HashSet<Mesh>();
|
||||
|
||||
public enum Mode {
|
||||
OutlineAll,
|
||||
OutlineVisible,
|
||||
OutlineHidden,
|
||||
OutlineAndSilhouette,
|
||||
SilhouetteOnly
|
||||
}
|
||||
|
||||
public Mode OutlineMode {
|
||||
get { return outlineMode; }
|
||||
set {
|
||||
outlineMode = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
public Color OutlineColor {
|
||||
get { return outlineColor; }
|
||||
set {
|
||||
outlineColor = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
public float OutlineWidth {
|
||||
get { return outlineWidth; }
|
||||
set {
|
||||
outlineWidth = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class ListVector3 {
|
||||
public List<Vector3> data;
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private Mode outlineMode;
|
||||
|
||||
[SerializeField]
|
||||
private Color outlineColor = Color.white;
|
||||
|
||||
[SerializeField, Range(0f, 10f)]
|
||||
private float outlineWidth = 2f;
|
||||
|
||||
[Header("Optional")]
|
||||
|
||||
[SerializeField, Tooltip("Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. "
|
||||
+ "Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
|
||||
private bool precomputeOutline;
|
||||
|
||||
[SerializeField, HideInInspector]
|
||||
private List<Mesh> bakeKeys = new List<Mesh>();
|
||||
|
||||
[SerializeField, HideInInspector]
|
||||
private List<ListVector3> bakeValues = new List<ListVector3>();
|
||||
|
||||
private Renderer[] renderers;
|
||||
private Material outlineMaskMaterial;
|
||||
private Material outlineFillMaterial;
|
||||
|
||||
private bool needsUpdate;
|
||||
|
||||
void Awake() {
|
||||
|
||||
// Cache renderers
|
||||
renderers = GetComponentsInChildren<Renderer>();
|
||||
|
||||
// Instantiate outline materials
|
||||
outlineMaskMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineMask"));
|
||||
outlineFillMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineFill"));
|
||||
|
||||
outlineMaskMaterial.name = "OutlineMask (Instance)";
|
||||
outlineFillMaterial.name = "OutlineFill (Instance)";
|
||||
|
||||
// Retrieve or generate smooth normals
|
||||
LoadSmoothNormals();
|
||||
|
||||
// Apply material properties immediately
|
||||
needsUpdate = true;
|
||||
}
|
||||
|
||||
void OnEnable() {
|
||||
foreach (var renderer in renderers) {
|
||||
|
||||
// Append outline shaders
|
||||
var materials = renderer.sharedMaterials.ToList();
|
||||
|
||||
materials.Add(outlineMaskMaterial);
|
||||
materials.Add(outlineFillMaterial);
|
||||
|
||||
renderer.materials = materials.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
void OnValidate() {
|
||||
|
||||
// Update material properties
|
||||
needsUpdate = true;
|
||||
|
||||
// Clear cache when baking is disabled or corrupted
|
||||
if (!precomputeOutline && bakeKeys.Count != 0 || bakeKeys.Count != bakeValues.Count) {
|
||||
bakeKeys.Clear();
|
||||
bakeValues.Clear();
|
||||
}
|
||||
|
||||
// Generate smooth normals when baking is enabled
|
||||
if (precomputeOutline && bakeKeys.Count == 0) {
|
||||
Bake();
|
||||
}
|
||||
}
|
||||
|
||||
void Update() {
|
||||
if (needsUpdate) {
|
||||
needsUpdate = false;
|
||||
|
||||
UpdateMaterialProperties();
|
||||
}
|
||||
}
|
||||
|
||||
void OnDisable() {
|
||||
foreach (var renderer in renderers) {
|
||||
|
||||
// Remove outline shaders
|
||||
var materials = renderer.sharedMaterials.ToList();
|
||||
|
||||
materials.Remove(outlineMaskMaterial);
|
||||
materials.Remove(outlineFillMaterial);
|
||||
|
||||
renderer.materials = materials.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
void OnDestroy() {
|
||||
|
||||
// Destroy material instances
|
||||
Destroy(outlineMaskMaterial);
|
||||
Destroy(outlineFillMaterial);
|
||||
}
|
||||
|
||||
void Bake() {
|
||||
|
||||
// Generate smooth normals for each mesh
|
||||
var bakedMeshes = new HashSet<Mesh>();
|
||||
|
||||
foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
|
||||
|
||||
// Skip duplicates
|
||||
if (!bakedMeshes.Add(meshFilter.sharedMesh)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Serialize smooth normals
|
||||
var smoothNormals = SmoothNormals(meshFilter.sharedMesh);
|
||||
|
||||
bakeKeys.Add(meshFilter.sharedMesh);
|
||||
bakeValues.Add(new ListVector3() { data = smoothNormals });
|
||||
}
|
||||
}
|
||||
|
||||
void LoadSmoothNormals() {
|
||||
|
||||
// Retrieve or generate smooth normals
|
||||
foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
|
||||
|
||||
// Skip if smooth normals have already been adopted
|
||||
if (!registeredMeshes.Add(meshFilter.sharedMesh)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Retrieve or generate smooth normals
|
||||
var index = bakeKeys.IndexOf(meshFilter.sharedMesh);
|
||||
var smoothNormals = (index >= 0) ? bakeValues[index].data : SmoothNormals(meshFilter.sharedMesh);
|
||||
|
||||
// Store smooth normals in UV3
|
||||
meshFilter.sharedMesh.SetUVs(3, smoothNormals);
|
||||
|
||||
// Combine submeshes
|
||||
var renderer = meshFilter.GetComponent<Renderer>();
|
||||
|
||||
if (renderer != null) {
|
||||
CombineSubmeshes(meshFilter.sharedMesh, renderer.sharedMaterials);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear UV3 on skinned mesh renderers
|
||||
foreach (var skinnedMeshRenderer in GetComponentsInChildren<SkinnedMeshRenderer>()) {
|
||||
|
||||
// Skip if UV3 has already been reset
|
||||
if (!registeredMeshes.Add(skinnedMeshRenderer.sharedMesh)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Clear UV3
|
||||
skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
|
||||
|
||||
// Combine submeshes
|
||||
CombineSubmeshes(skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer.sharedMaterials);
|
||||
}
|
||||
}
|
||||
|
||||
List<Vector3> SmoothNormals(Mesh mesh) {
|
||||
|
||||
// Group vertices by location
|
||||
var groups = mesh.vertices.Select((vertex, index) => new KeyValuePair<Vector3, int>(vertex, index)).GroupBy(pair => pair.Key);
|
||||
|
||||
// Copy normals to a new list
|
||||
var smoothNormals = new List<Vector3>(mesh.normals);
|
||||
|
||||
// Average normals for grouped vertices
|
||||
foreach (var group in groups) {
|
||||
|
||||
// Skip single vertices
|
||||
if (group.Count() == 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Calculate the average normal
|
||||
var smoothNormal = Vector3.zero;
|
||||
|
||||
foreach (var pair in group) {
|
||||
smoothNormal += smoothNormals[pair.Value];
|
||||
}
|
||||
|
||||
smoothNormal.Normalize();
|
||||
|
||||
// Assign smooth normal to each vertex
|
||||
foreach (var pair in group) {
|
||||
smoothNormals[pair.Value] = smoothNormal;
|
||||
}
|
||||
}
|
||||
|
||||
return smoothNormals;
|
||||
}
|
||||
|
||||
void CombineSubmeshes(Mesh mesh, Material[] materials) {
|
||||
|
||||
// Skip meshes with a single submesh
|
||||
if (mesh.subMeshCount == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip if submesh count exceeds material count
|
||||
if (mesh.subMeshCount > materials.Length) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Append combined submesh
|
||||
mesh.subMeshCount++;
|
||||
mesh.SetTriangles(mesh.triangles, mesh.subMeshCount - 1);
|
||||
}
|
||||
|
||||
void UpdateMaterialProperties() {
|
||||
|
||||
// Apply properties according to mode
|
||||
outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
|
||||
|
||||
switch (outlineMode) {
|
||||
case Mode.OutlineAll:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
|
||||
case Mode.OutlineVisible:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
|
||||
case Mode.OutlineHidden:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
|
||||
case Mode.OutlineAndSilhouette:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
|
||||
case Mode.SilhouetteOnly:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", 0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5fea29bb7c508c244a1f805a5fd3fc4d
|
||||
timeCreated: 1522369084
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115488
|
||||
packageName: Quick Outline
|
||||
packageVersion: 1.1
|
||||
assetPath: Assets/QuickOutline/Scripts/Outline.cs
|
||||
uploadId: 485303
|
||||
423
Assets/Resources/AI-Game-Developer-Config.json
Normal file
423
Assets/Resources/AI-Game-Developer-Config.json
Normal file
@@ -0,0 +1,423 @@
|
||||
{
|
||||
"logLevel": 3,
|
||||
"keepServerRunning": true,
|
||||
"transportMethod": 2,
|
||||
"tools": [
|
||||
{
|
||||
"name": "assets-copy",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-create-folder",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-delete",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-find",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-find-built-in",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-get-data",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-material-create",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-modify",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-move",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-refresh",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-prefab-close",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-prefab-create",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-prefab-instantiate",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-prefab-open",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-prefab-save",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "assets-shader-list-all",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "console-get-logs",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "editor-application-get-state",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "editor-application-set-state",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "editor-selection-get",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "editor-selection-set",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-component-add",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-component-destroy",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-component-get",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-component-list-all",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-component-modify",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-create",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-destroy",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-duplicate",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-find",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-modify",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "gameobject-set-parent",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "object-get-data",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "object-modify",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "package-add",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "package-list",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "package-remove",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "package-search",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "reflection-method-call",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "reflection-method-find",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-create",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-get-data",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-list-opened",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-open",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-save",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-set-active",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "scene-unload",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "screenshot-camera",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "screenshot-game-view",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "screenshot-scene-view",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "script-delete",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "script-execute",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "script-read",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "script-update-or-create",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "tests-run",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"prompts": [
|
||||
{
|
||||
"name": "setup-animator-controller",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-simple-tweening",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-timeline-sequence",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-animation-events",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-procedural-animation",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-sprite-animation",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-ik-system",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-animation-blending",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "organize-project-structure",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "import-setup-sprites",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-audio-manager",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "configure-build-settings",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-material-library",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-asset-bundles",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "optimize-texture-settings",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-addressables",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-debug-visualization",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-performance-profiling",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-test-scene",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-logging-system",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-unit-tests",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-debug-ui",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-assertion-checks",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-automated-tests",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-standard-components",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-player-controller",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-ui-canvas",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-physics-interactions",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-interactive-object",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-audio-source",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-particle-effects",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-animator-component",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-basic-scene",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "organize-scene-hierarchy",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-lighting-setup",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-prefab-from-selection",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-scene-camera",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-environment-template",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "generate-monobehaviour-template",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-event-system",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-singleton-manager",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-coroutine-framework",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "create-scriptableobject-data",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "implement-object-pooling",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "add-state-machine",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"name": "setup-dependency-injection",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"resources": [
|
||||
{
|
||||
"name": "GameObject from Current Scene by Path",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"host": "http://localhost:55726",
|
||||
"timeoutMs": 10000,
|
||||
"keepConnected": true,
|
||||
"token": null
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8692d97c02ffec48bc8f9f568e868a5
|
||||
guid: 5ecf6949f73508f49ba3a0633329a219
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@@ -139,7 +139,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -12, y: -1}
|
||||
m_AnchoredPosition: {x: -20, y: -1}
|
||||
m_SizeDelta: {x: 22, y: 22}
|
||||
m_Pivot: {x: 1, y: 1}
|
||||
--- !u!222 &5485997075992529675
|
||||
@@ -246,7 +246,7 @@ PrefabInstance:
|
||||
m_Modifications:
|
||||
- target: {fileID: 1375483911066562825, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 238
|
||||
value: -65
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5097404189591199700, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 80ac8e52d3c31a94babd161e86bc6b97
|
||||
guid: 35623d99e7e18de4c9218b9878efaac6
|
||||
folderAsset: yes
|
||||
timeCreated: 1522559139
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@@ -1,8 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a63caa2b0e993043a42c11f35ff2d1a
|
||||
guid: 9ffd6459fed612148ac685b6329657a1
|
||||
folderAsset: yes
|
||||
timeCreated: 1522559134
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@@ -0,0 +1,5 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<utk:UTKLabel text="알람 정보"/>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92f820b7de9d43c428503b7c574c9e69
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -0,0 +1,5 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<utk:UTKReordableTabList name="tab-list" style="background-color: transparent; border-width: 0; padding: 0;" />
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db6157353e844a84fabf731aed504f56
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -0,0 +1,5 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<utk:UTKLabel text="일반 정보"/>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b805d40178aceb48b21275834afbb24
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -0,0 +1,5 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<utk:UTKLabel text="입력 정보"/>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5224fd32ba226a340aaac4e6dc070861
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,8 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70fd40674751a8042a8b9b2e8d9f915f
|
||||
guid: 1f3edc5b32ba94941ac6f2897a9cbf45
|
||||
folderAsset: yes
|
||||
timeCreated: 1522559128
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
BIN
Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf
Normal file
BIN
Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf
Normal file
Binary file not shown.
@@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa552b28df3e88d44b6fa1a31d87dbf0
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- Material Symbols Outlined
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
4102
Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt
Normal file
4102
Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cba8cf29ff1a3af4c951dc8785008b52
|
||||
guid: 76e3b660a1fc448428151d868fcb09c5
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@@ -1 +0,0 @@
|
||||
{"TestSuite":"","Date":0,"Player":{"Development":false,"ScreenWidth":0,"ScreenHeight":0,"ScreenRefreshRate":0,"Fullscreen":false,"Vsync":0,"AntiAliasing":0,"Batchmode":false,"RenderThreadingMode":"Split","MtRendering":false,"GraphicsJobs":false,"GpuSkinning":true,"Platform":"","ColorSpace":"","AnisotropicFiltering":"","BlendWeights":"","GraphicsApi":"","ScriptingBackend":"IL2CPP","AndroidTargetSdkVersion":"AndroidApiLevelAuto","AndroidBuildSystem":"Gradle","BuildTarget":"StandaloneWindows64","StereoRenderingPath":"MultiPass"},"Hardware":{"OperatingSystem":"","DeviceModel":"","DeviceName":"","ProcessorType":"","ProcessorCount":0,"GraphicsDeviceName":"","SystemMemorySizeMB":0},"Editor":{"Version":"6000.2.12f1","Branch":"6000.2/staging","Changeset":"e89d5df0e333","Date":1762305399},"Dependencies":["com.cysharp.unitask@2.5.10","com.github-glitchenzo.nugetforunity@4.5.0","com.unity.2d.sprite@1.0.0","com.unity.ai.navigation@2.0.9","com.unity.cloud.gltfast@6.14.1","com.unity.ide.rider@3.0.38","com.unity.ide.visualstudio@2.0.25","com.unity.inputsystem@1.14.2","com.unity.multiplayer.center@1.0.0","com.unity.nuget.newtonsoft-json@3.2.1","com.unity.render-pipelines.core@17.2.0","com.unity.render-pipelines.universal@17.2.0","com.unity.test-framework@1.6.0","com.unity.timeline@1.8.9","com.unity.ugui@2.0.0","com.unity.visualscripting@1.9.8","com.unity.modules.accessibility@1.0.0","com.unity.modules.ai@1.0.0","com.unity.modules.androidjni@1.0.0","com.unity.modules.animation@1.0.0","com.unity.modules.assetbundle@1.0.0","com.unity.modules.audio@1.0.0","com.unity.modules.cloth@1.0.0","com.unity.modules.director@1.0.0","com.unity.modules.imageconversion@1.0.0","com.unity.modules.imgui@1.0.0","com.unity.modules.jsonserialize@1.0.0","com.unity.modules.particlesystem@1.0.0","com.unity.modules.physics@1.0.0","com.unity.modules.physics2d@1.0.0","com.unity.modules.screencapture@1.0.0","com.unity.modules.terrain@1.0.0","com.unity.modules.terrainphysics@1.0.0","com.unity.modules.tilemap@1.0.0","com.unity.modules.ui@1.0.0","com.unity.modules.uielements@1.0.0","com.unity.modules.umbra@1.0.0","com.unity.modules.unityanalytics@1.0.0","com.unity.modules.unitywebrequest@1.0.0","com.unity.modules.unitywebrequestassetbundle@1.0.0","com.unity.modules.unitywebrequestaudio@1.0.0","com.unity.modules.unitywebrequesttexture@1.0.0","com.unity.modules.unitywebrequestwww@1.0.0","com.unity.modules.vehicles@1.0.0","com.unity.modules.video@1.0.0","com.unity.modules.vr@1.0.0","com.unity.modules.wind@1.0.0","com.unity.modules.xr@1.0.0","com.unity.modules.subsystems@1.0.0","com.unity.modules.hierarchycore@1.0.0","com.unity.ext.nunit@2.0.5","com.unity.shadergraph@17.2.0","com.unity.render-pipelines.universal-config@17.0.3","com.unity.burst@1.8.25","com.unity.mathematics@1.3.2","com.unity.collections@2.6.2","com.unity.rendering.light-transport@1.0.1","com.unity.searcher@4.9.3","com.unity.nuget.mono-cecil@1.11.5","com.unity.test-framework.performance@3.2.0"],"Results":[]}
|
||||
@@ -1 +0,0 @@
|
||||
{"MeasurementCount":-1}
|
||||
@@ -37,8 +37,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 24.000008, y: -3.5}
|
||||
m_SizeDelta: {x: 0, y: 15}
|
||||
m_AnchoredPosition: {x: 24, y: -3.5}
|
||||
m_SizeDelta: {x: 16.79, y: 15}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!222 &1821424897527179892
|
||||
CanvasRenderer:
|
||||
@@ -667,10 +667,10 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 3094276047947572059}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 15}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 8.395, y: -7.5}
|
||||
m_SizeDelta: {x: 6.79, y: 15}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &7899941541401797984
|
||||
MonoBehaviour:
|
||||
@@ -1418,7 +1418,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &3186561737559845992
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1635,7 +1635,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 1, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: -2, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 22}
|
||||
m_SizeDelta: {x: 40.79, y: 22}
|
||||
m_Pivot: {x: 1, y: 0.5}
|
||||
--- !u!114 &4840481829667430247
|
||||
MonoBehaviour:
|
||||
@@ -2163,10 +2163,10 @@ RectTransform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 5465326936975101749}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 22}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 11, y: -11}
|
||||
m_SizeDelta: {x: 22, y: 22}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4173370272032766120
|
||||
CanvasRenderer:
|
||||
|
||||
@@ -81,10 +81,11 @@
|
||||
}
|
||||
|
||||
/* 첫 번째 행: 상단 테두리 추가 */
|
||||
.task-row:first-child {
|
||||
/* Unity USS does not support :first-child pseudo-class */
|
||||
/* .task-row:first-child {
|
||||
border-top-width: 1px;
|
||||
border-top-color: rgb(136, 190, 230);
|
||||
}
|
||||
} */
|
||||
|
||||
/* 호버 상태: 연한 파란색 배경 */
|
||||
.task-row:hover {
|
||||
@@ -127,6 +128,7 @@
|
||||
}
|
||||
|
||||
/* 첫 번째 레벨 셀: 왼쪽 테두리 없음 */
|
||||
.task-txt:first-child {
|
||||
/* Unity USS does not support :first-child pseudo-class */
|
||||
/* .task-txt:first-child {
|
||||
border-left-width: 0;
|
||||
}
|
||||
} */
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
border-color: rgba(51, 51, 51, 0.5); /* 반투명 회색 테두리 */
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: link; /* 클릭 가능 커서 */
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
||||
transition-duration: 0.15s; /* 호버 애니메이션 */
|
||||
}
|
||||
|
||||
|
||||
@@ -1,130 +1,73 @@
|
||||
/*
|
||||
* TreeList.uss - TreeList 컴포넌트 스타일시트
|
||||
*
|
||||
* [개요]
|
||||
* TreeList.uxml과 TreeListItem.uxml에서 사용하는 스타일을 정의합니다.
|
||||
* 어두운 테마(Dark Theme)에 맞춰 디자인되었습니다.
|
||||
*
|
||||
* [스타일 구조]
|
||||
* 1. .tree-menu-container : 메인 컨테이너 (어두운 배경, 240px 너비)
|
||||
* 2. .search-field : 검색 입력 필드 (흰색 배경, 둥근 모서리)
|
||||
* 3. #main-tree-view : TreeView 기본 설정 (들여쓰기 10px)
|
||||
* 4. .unity-tree-view__item-toggle : 펼침/접기 토글 버튼
|
||||
* 5. .unity-collection-view__item : 항목 배경색 (기본/호버/선택)
|
||||
* 6. .visibility-toggle : 가시성 토글 버튼 (눈 아이콘)
|
||||
*
|
||||
* [색상 팔레트]
|
||||
* - 배경: rgb(40, 44, 52) - 어두운 회색
|
||||
* - 호버: rgba(0, 10, 37, 0.25) - 반투명 파랑
|
||||
* - 선택: rgba(0, 10, 37, 0.5) - 더 진한 반투명 파랑
|
||||
* - 텍스트: rgb(255, 255, 255) - 흰색
|
||||
*
|
||||
* [연관 파일]
|
||||
* - TreeList.uxml : 메인 레이아웃
|
||||
* - TreeListItem.uxml : 개별 항목 템플릿
|
||||
* - TreeList.cs : C# 컨트롤러
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
메인 컨테이너 스타일
|
||||
사이드 패널 전체를 감싸는 컨테이너
|
||||
=================================== */
|
||||
.tree-menu-container {
|
||||
background-color: rgb(40, 44, 52); /* 어두운 회색 배경 */
|
||||
flex-grow: 1; /* 부모 영역 채우기 */
|
||||
background-color: rgb(40, 44, 52);
|
||||
flex-grow: 1;
|
||||
padding: 5px;
|
||||
padding-top: 25px;
|
||||
padding-bottom: 25px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
width: 240px; /* 고정 너비 */
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
검색 입력 필드 스타일
|
||||
흰색 배경의 둥근 입력창
|
||||
=================================== */
|
||||
.search-field {
|
||||
margin-bottom: 20px;
|
||||
background-color: rgb(255, 255, 255); /* 흰색 배경 */
|
||||
border-radius: 4px; /* 둥근 모서리 */
|
||||
background-color: rgb(255, 255, 255);
|
||||
border-radius: 4px;
|
||||
height: 30px;
|
||||
width: auto;
|
||||
margin-top: 0;
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
-unity-font-definition: resource('Fonts/Pretendard/Pretendard-Regular');
|
||||
}
|
||||
|
||||
/* 검색 필드 내부 텍스트 입력 영역 */
|
||||
#search-field > #unity-text-input {
|
||||
padding-top: 4px;
|
||||
padding-right: 24px; /* 오른쪽 아이콘 공간 확보 */
|
||||
padding-right: 24px;
|
||||
padding-bottom: 4px;
|
||||
padding-left: 4px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-top-width: 0; /* 테두리 제거 */
|
||||
border-top-width: 0;
|
||||
border-right-width: 0;
|
||||
border-bottom-width: 0;
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
체크박스 스타일
|
||||
=================================== */
|
||||
#unity-checkmark {
|
||||
-unity-background-image-tint-color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
TreeView 기본 설정
|
||||
=================================== */
|
||||
#main-tree-view {
|
||||
--unity-item-indent-width: 10; /* 계층별 들여쓰기 너비 */
|
||||
--unity-item-indent-width: 10;
|
||||
}
|
||||
|
||||
/* 펼침/접기 토글 아이콘 컨테이너 */
|
||||
#unity-tree-view__item-toggle > VisualElement > VisualElement {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
width: 22px; /* 토글 아이콘 너비 */
|
||||
width: 22px;
|
||||
}
|
||||
|
||||
/* 펼침/접기 토글 버튼 */
|
||||
.unity-tree-view__item-toggle {
|
||||
margin-right: 5px; /* 라벨과의 간격 */
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
항목 배경색 스타일
|
||||
기본, 호버, 선택 상태별 배경색
|
||||
=================================== */
|
||||
|
||||
/* 기본 상태: 투명 배경 */
|
||||
.unity-collection-view__item {
|
||||
background-color: rgba(50, 50, 50, 0);
|
||||
}
|
||||
|
||||
/* 호버 상태: 반투명 파란색 배경 */
|
||||
.unity-collection-view__item:hover {
|
||||
background-color: rgba(0, 10, 37, 0.25);
|
||||
}
|
||||
|
||||
/* 선택 상태: 더 진한 반투명 파란색 배경 */
|
||||
.unity-collection-view__item--selected {
|
||||
background-color: rgba(0, 10, 37, 0.5);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
가시성 토글 버튼 스타일
|
||||
눈 아이콘으로 3D 모델 가시성 제어
|
||||
=================================== */
|
||||
.visibility-toggle {
|
||||
background-color: rgba(0, 0, 0, 0); /* 투명 배경 */
|
||||
border-width: 0; /* 테두리 없음 */
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
border-width: 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-top: 0;
|
||||
@@ -137,52 +80,42 @@
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
margin-left: 0;
|
||||
flex-shrink: 0; /* 크기 축소 방지 */
|
||||
background-image: resource('SHI/Images/icon_visibility_on_64'); /* 기본: 보이는 상태 */
|
||||
flex-shrink: 0;
|
||||
background-image: resource('SHI/Images/icon_visibility_on_64');
|
||||
}
|
||||
|
||||
/* 가시성 켜짐 상태 (눈 열린 아이콘) */
|
||||
.visibility-on {
|
||||
background-image: resource('SHI/Images/icon_visibility_on_64');
|
||||
}
|
||||
|
||||
/* 가시성 꺼짐 상태 (눈 닫힌 아이콘) */
|
||||
.visibility-off {
|
||||
background-image: resource('SHI/Images/icon_visibility_off_64');
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
세로 스크롤바 스타일
|
||||
슬림한 6px 너비의 커스텀 스크롤바
|
||||
=================================== */
|
||||
.unity-scroller--vertical {
|
||||
width: 6px; /* 슬림한 너비 */
|
||||
width: 6px;
|
||||
margin-right: 4px;
|
||||
margin-bottom: 0px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 트랙 (배경) */
|
||||
.unity-scroller--vertical .unity-base-slider__tracker {
|
||||
background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 드래거 컨테이너 위치 조정 */
|
||||
.unity-scroller--vertical .unity-base-slider__drag-container {
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 드래거 (핸들) */
|
||||
.unity-scroller--vertical .unity-base-slider__dragger {
|
||||
background-color: rgb(216, 216, 216); /* 밝은 회색 */
|
||||
background-color: rgb(216, 216, 216);
|
||||
border-width: 0;
|
||||
border-radius: 3px; /* 둥근 모서리 */
|
||||
border-radius: 3px;
|
||||
width: 6px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 화살표 버튼 숨김 */
|
||||
.unity-scroller--vertical .unity-repeat-button {
|
||||
display: none;
|
||||
width: 0;
|
||||
@@ -191,49 +124,39 @@
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 슬라이더 마진 제거 */
|
||||
.unity-scroller--vertical .unity-slider {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* 세로 스크롤바 입력 필드 크기 조정 */
|
||||
.unity-scroller--vertical .unity-base-field__input {
|
||||
width: 6px;
|
||||
min-width: 6px;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
가로 스크롤바 스타일
|
||||
슬림한 6px 높이의 커스텀 스크롤바
|
||||
=================================== */
|
||||
.unity-scroller--horizontal {
|
||||
height: 6px; /* 슬림한 높이 */
|
||||
height: 6px;
|
||||
margin-bottom: 4px;
|
||||
margin-right: 0px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 트랙 (배경) */
|
||||
.unity-scroller--horizontal .unity-base-slider__tracker {
|
||||
background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 드래거 컨테이너 위치 조정 */
|
||||
.unity-scroller--horizontal .unity-base-slider__drag-container {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 드래거 (핸들) */
|
||||
.unity-scroller--horizontal .unity-base-slider__dragger {
|
||||
background-color: rgb(216, 216, 216); /* 밝은 회색 */
|
||||
background-color: rgb(216, 216, 216);
|
||||
border-width: 0;
|
||||
border-radius: 3px; /* 둥근 모서리 */
|
||||
border-radius: 3px;
|
||||
height: 6px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 화살표 버튼 숨김 */
|
||||
.unity-scroller--horizontal .unity-repeat-button {
|
||||
display: none;
|
||||
width: 0;
|
||||
@@ -242,12 +165,10 @@
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 슬라이더 마진 제거 */
|
||||
.unity-scroller--horizontal .unity-slider {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* 가로 스크롤바 입력 필드 크기 조정 */
|
||||
.unity-scroller--horizontal .unity-base-field__input {
|
||||
height: 6px;
|
||||
min-height: 6px;
|
||||
|
||||
@@ -24,12 +24,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010839049058}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.000000029802322, y: -0.7071068, z: -0.000000029802322, w: 0.7071067}
|
||||
m_LocalPosition: {x: 0.546, y: 0.5154157, z: 0.9}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000012554966720}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
|
||||
--- !u!146 &146000014083572840
|
||||
WheelCollider:
|
||||
@@ -38,6 +39,7 @@ WheelCollider:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010839049058}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.35
|
||||
m_SuspensionSpring:
|
||||
@@ -60,7 +62,15 @@ WheelCollider:
|
||||
m_AsymptoteSlip: 0.5
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &1000010860801872
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -86,12 +96,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010860801872}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 100, y: 100, z: 100}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &33000011975467108
|
||||
MeshFilter:
|
||||
@@ -112,9 +123,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -126,6 +145,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -135,9 +155,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000011070132974
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -161,16 +183,17 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011070132974}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000012432798180}
|
||||
- {fileID: 4000012935168970}
|
||||
- {fileID: 4000011892871780}
|
||||
- {fileID: 4000012432309022}
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 8
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1000011073349600
|
||||
GameObject:
|
||||
@@ -199,13 +222,14 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011073349600}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000013356346940}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &54000013437409432
|
||||
Rigidbody:
|
||||
@@ -214,10 +238,21 @@ Rigidbody:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011073349600}
|
||||
serializedVersion: 2
|
||||
serializedVersion: 5
|
||||
m_Mass: 3000
|
||||
m_Drag: 0.1
|
||||
m_AngularDrag: 0.05
|
||||
m_LinearDamping: 0.1
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
@@ -315,13 +350,14 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011434685428}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.21805806, y: 0, z: 0, w: 0.9759358}
|
||||
m_LocalPosition: {x: -0.09799957, y: 0.56307596, z: 0.7989998}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000012006374022}
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: -25.19, y: 0, z: 0}
|
||||
--- !u!1 &1000011473680638
|
||||
GameObject:
|
||||
@@ -347,9 +383,11 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011473680638}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000013471762282}
|
||||
- {fileID: 4000010406632914}
|
||||
@@ -362,7 +400,6 @@ Transform:
|
||||
- {fileID: 4000012554966720}
|
||||
- {fileID: 4000011998697752}
|
||||
m_Father: {fileID: 4000013476106956}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000010894959072
|
||||
BoxCollider:
|
||||
@@ -372,9 +409,17 @@ BoxCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011473680638}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 2.3914237}
|
||||
m_Center: {x: -0.000000014901161, y: 0.6700001, z: 0.105711475}
|
||||
--- !u!1 &1000011477830700
|
||||
@@ -402,12 +447,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011477830700}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
|
||||
m_LocalPosition: {x: -0.5451015, y: 0.33541575, z: 0.89999986}
|
||||
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 5
|
||||
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
|
||||
--- !u!33 &33000012518384032
|
||||
MeshFilter:
|
||||
@@ -428,9 +474,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -442,6 +496,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -451,9 +506,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000011734525732
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -479,12 +536,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011734525732}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
|
||||
m_LocalPosition: {x: -0.5037266, y: 0.26429352, z: -0.707311}
|
||||
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
|
||||
--- !u!33 &33000012340827016
|
||||
MeshFilter:
|
||||
@@ -505,9 +563,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -519,6 +585,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -528,9 +595,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000011739579314
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -555,12 +624,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011739579314}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.000000059604645, y: -0.7071068, z: -0.000000059604645, w: 0.7071067}
|
||||
m_LocalPosition: {x: -0.5037265, y: 0.44729352, z: -0.7073109}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000012554966720}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
|
||||
--- !u!146 &146000011170915886
|
||||
WheelCollider:
|
||||
@@ -569,6 +639,7 @@ WheelCollider:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011739579314}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.28
|
||||
m_SuspensionSpring:
|
||||
@@ -591,7 +662,15 @@ WheelCollider:
|
||||
m_AsymptoteSlip: 0.5
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &1000012502322780
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -617,13 +696,14 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012502322780}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 100, y: 100, z: 100}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000010940013096}
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 6
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &33000013424043954
|
||||
MeshFilter:
|
||||
@@ -644,9 +724,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -658,6 +746,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -667,9 +756,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000012659452950
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -694,12 +785,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012659452950}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.000000029802322, y: -0.7071068, z: -0.000000029802322, w: 0.7071067}
|
||||
m_LocalPosition: {x: 0.5037265, y: 0.44729352, z: -0.7073109}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000012554966720}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
|
||||
--- !u!146 &146000013894646302
|
||||
WheelCollider:
|
||||
@@ -708,6 +800,7 @@ WheelCollider:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012659452950}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.28
|
||||
m_SuspensionSpring:
|
||||
@@ -730,7 +823,15 @@ WheelCollider:
|
||||
m_AsymptoteSlip: 0.5
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &1000012833946986
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -755,12 +856,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012833946986}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.000000059604645, y: -0.7071068, z: -0.000000059604645, w: 0.7071067}
|
||||
m_LocalPosition: {x: -0.54510164, y: 0.5154157, z: 0.9}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000012554966720}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
|
||||
--- !u!146 &146000011117633326
|
||||
WheelCollider:
|
||||
@@ -769,6 +871,7 @@ WheelCollider:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012833946986}
|
||||
serializedVersion: 2
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Radius: 0.35
|
||||
m_SuspensionSpring:
|
||||
@@ -791,7 +894,15 @@ WheelCollider:
|
||||
m_AsymptoteSlip: 0.5
|
||||
m_AsymptoteValue: 0.75
|
||||
m_Stiffness: 1
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_Enabled: 1
|
||||
m_ProvidesContacts: 0
|
||||
--- !u!1 &1000013477262638
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -817,12 +928,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013477262638}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
|
||||
m_LocalPosition: {x: 0.5037266, y: 0.26429352, z: -0.707311}
|
||||
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
|
||||
--- !u!33 &33000013523892176
|
||||
MeshFilter:
|
||||
@@ -843,9 +955,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -857,6 +977,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -866,9 +987,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000013532054310
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -894,12 +1017,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013532054310}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 100, y: 100, z: 100}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 7
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &33000012354022326
|
||||
MeshFilter:
|
||||
@@ -920,9 +1044,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -934,6 +1066,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -943,9 +1076,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000013738711648
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -971,12 +1106,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013738711648}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000012230258352}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000013609962728
|
||||
BoxCollider:
|
||||
@@ -986,9 +1122,17 @@ BoxCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013738711648}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.7810302, y: 0.037019253, z: 1.136157}
|
||||
m_Center: {x: -0.0026693344, y: 0.036987662, z: 1.8662252}
|
||||
--- !u!65 &65000011325912258
|
||||
@@ -999,9 +1143,17 @@ BoxCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013738711648}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1.202784, y: 0.99137866, z: 0.09446905}
|
||||
m_Center: {x: 1.4210855e-14, y: 0.63167053, z: 1.3453856}
|
||||
--- !u!1 &1000013874299352
|
||||
@@ -1029,12 +1181,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013874299352}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.21805808, y: -0, z: -0, w: 0.9759358}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 100, y: 100, z: 100}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013471762282}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &33000010944424196
|
||||
MeshFilter:
|
||||
@@ -1055,9 +1208,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -1069,6 +1230,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -1078,9 +1240,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000013991346752
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1106,12 +1270,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013991346752}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
|
||||
m_LocalPosition: {x: 0.5459999, y: 0.33541575, z: 0.89999986}
|
||||
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
|
||||
--- !u!33 &33000012990824728
|
||||
MeshFilter:
|
||||
@@ -1132,9 +1297,17 @@ MeshRenderer:
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -1146,6 +1319,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -1155,9 +1329,11 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1000014025593340
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1182,12 +1358,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000014025593340}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000013356346940}
|
||||
m_RootOrder: 9
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000011180271422
|
||||
BoxCollider:
|
||||
@@ -1197,8 +1374,16 @@ BoxCollider:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000014025593340}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1.202322, y: 1.1608126, z: 1.3974968}
|
||||
m_Center: {x: 9.313244e-10, y: 1.5547146, z: 0.13412763}
|
||||
|
||||
@@ -1,21 +1,11 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1001 &100100000
|
||||
Prefab:
|
||||
m_ObjectHideFlags: 1
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications: []
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 0}
|
||||
m_RootGameObject: {fileID: 1000010367924706}
|
||||
m_IsPrefabAsset: 1
|
||||
--- !u!1 &1000010367924706
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4000010654416078}
|
||||
@@ -28,11 +18,78 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4000010654416078
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 5.71}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4000012846995296}
|
||||
- {fileID: 4000011572875330}
|
||||
- {fileID: 4000011710664838}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
|
||||
--- !u!54 &54000013494727520
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
serializedVersion: 5
|
||||
m_Mass: 50
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &65000011714920370
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 0.04, z: 1}
|
||||
m_Center: {x: 0, y: 0.12, z: 0}
|
||||
--- !u!1 &1000011940101718
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4000011572875330}
|
||||
@@ -44,11 +101,48 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4000011572875330
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011940101718}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.072, z: -0.56}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000010654416078}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000011694717970
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000011940101718}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1000012623322564
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4000011710664838}
|
||||
@@ -60,11 +154,48 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4000011710664838
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012623322564}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.072, z: 0.539}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000010654416078}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000012467042714
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000012623322564}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1000013525428288
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4000012846995296}
|
||||
@@ -78,75 +209,53 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4000010654416078
|
||||
Transform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 5.71}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 4000012846995296}
|
||||
- {fileID: 4000011572875330}
|
||||
- {fileID: 4000011710664838}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
|
||||
--- !u!4 &4000011572875330
|
||||
Transform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000011940101718}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.072, z: -0.56}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000010654416078}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!4 &4000011710664838
|
||||
Transform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000012623322564}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.072, z: 0.539}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000010654416078}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!4 &4000012846995296
|
||||
Transform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013525428288}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 100, y: 100, z: 100}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4000010654416078}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &33000011068149276
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013525428288}
|
||||
m_Mesh: {fileID: 4300000, guid: 5661de86a21f8ef4b8fa880ef2e7b46c, type: 3}
|
||||
--- !u!23 &23000011150270100
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013525428288}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: bb5b8dcebe22c1c43a002cc9b3d28174, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
@@ -156,6 +265,7 @@ MeshRenderer:
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
@@ -165,76 +275,29 @@ MeshRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &33000011068149276
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000013525428288}
|
||||
m_Mesh: {fileID: 4300000, guid: 5661de86a21f8ef4b8fa880ef2e7b46c, type: 3}
|
||||
--- !u!54 &54000013494727520
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
serializedVersion: 2
|
||||
m_Mass: 50
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_UseGravity: 1
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &65000011694717970
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000011940101718}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!65 &65000011714920370
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000010367924706}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 1, y: 0.04, z: 1}
|
||||
m_Center: {x: 0, y: 0.12, z: 0}
|
||||
--- !u!65 &65000012467042714
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 1000012623322564}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!65 &65000012969618506
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 1
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1000013525428288}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 0.010000003, y: 0.0014400017, z: 0.0010067594}
|
||||
m_Center: {x: 0.00009318173, y: 0.0007195668, z: -0.005589797}
|
||||
|
||||
@@ -15,8 +15,7 @@ public class ForkController : MonoBehaviour {
|
||||
|
||||
// Update is called once per frame
|
||||
void FixedUpdate () {
|
||||
|
||||
Debug.Log(mastMoveTrue);
|
||||
|
||||
if(fork.transform.localPosition.y >= maxYmast.y && fork.transform.localPosition.y < maxY.y)
|
||||
{
|
||||
mastMoveTrue = true;
|
||||
|
||||
@@ -464,7 +464,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 431, y: -2}
|
||||
m_SizeDelta: {x: 50, y: 0}
|
||||
m_SizeDelta: {x: 80, y: 0}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!114 &8952730479983948989
|
||||
MonoBehaviour:
|
||||
@@ -1965,6 +1965,10 @@ PrefabInstance:
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 12
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 431666316254308180, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_HorizontalAlignment
|
||||
value: 4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
@@ -1991,7 +1995,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 50
|
||||
value: 80
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
@@ -2057,6 +2061,10 @@ PrefabInstance:
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 12
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6932173583458566539, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_HorizontalAlignment
|
||||
value: 4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7640204669525975220, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
|
||||
propertyPath: m_Text
|
||||
value:
|
||||
|
||||
8
Assets/Resources/Studio/UIToolkit.meta
Normal file
8
Assets/Resources/Studio/UIToolkit.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 036922f6ebd1fc246b7f9dcbed76951d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/Studio/UIToolkit/Modal.meta
Normal file
8
Assets/Resources/Studio/UIToolkit/Modal.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 523651d33563a6e4eb5a39945fe0017f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<utk:UTKInputField label="Database IP" value="127.0.0.3" label-min-width="200" style="width: 400px;" />
|
||||
<utk:UTKInputField label="Database PORT" value="3304" label-min-width="200" style="width: 400px;" />
|
||||
<utk:UTKInputField label="Database ID" value="" label-min-width="200" style="width: 400px;" />
|
||||
<utk:UTKInputField label="Database PASSWORD" value="" is-password-field="true" label-min-width="200" style="width: 400px;" />
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d27b20f78aec0354b8b97b9af0765701
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -0,0 +1,24 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 20px;">
|
||||
<ui:VisualElement style="flex-direction: row;">
|
||||
<utk:UTKIntegerField label="Auto Save Time" value="5" label-min-width="200" style="width: 400px;margin-right: 5px;" />
|
||||
<utk:UTKLabel text="Minutes" />
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement style="flex-direction: row;">
|
||||
<utk:UTKFloatField label="Grid Spacing" value="1" label-min-width="200" style="width: 400px;margin-right: 5px;" />
|
||||
<utk:UTKLabel text="Meters" />
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement name="VisualElement" style="flex-direction: row;">
|
||||
<utk:UTKFloatField label="Position Snap" value="0.5" label-min-width="200" style="width: 400px;margin-right: 5px;" />
|
||||
<utk:UTKLabel text="Meters" />
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement style="flex-direction: row;">
|
||||
<utk:UTKFloatField label="Rotation Snap" value="10" label-min-width="200" style="width: 400px;margin-right: 5px;" />
|
||||
<utk:UTKLabel text="Meters" />
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement style="flex-direction: row;">
|
||||
<utk:UTKFloatField label="Scale Snap" value="0.5" label-min-width="200" style="width: 400px;margin-right: 5px;" />
|
||||
<utk:UTKLabel text="Meters" />
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a709a335acffbd4c9d4358c153fad81
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -0,0 +1,5 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xmlns:utk="UVC.UIToolkit" editor-extension-mode="False">
|
||||
<ui:VisualElement name="root" style="padding-left: 10px;">
|
||||
<utk:UTKShortcutList name="window" style="background-color: transparent;" />
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dcdd51dd452d3e94ca374da0307608a4
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
8
Assets/Resources/UIToolkit.meta
Normal file
8
Assets/Resources/UIToolkit.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 166e6c1e42c1dee4a836845108ff7782
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/UIToolkit/Button.meta
Normal file
8
Assets/Resources/UIToolkit/Button.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c207fd08d36fad46b095869721794d7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
436
Assets/Resources/UIToolkit/Button/UTKButton.uss
Normal file
436
Assets/Resources/UIToolkit/Button/UTKButton.uss
Normal file
@@ -0,0 +1,436 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKButton.uss
|
||||
* 기본 버튼 컴포넌트 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Button
|
||||
=================================== */
|
||||
|
||||
.utk-button {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-left: var(--space-m);
|
||||
padding-right: var(--space-m);
|
||||
padding-top: var(--space-s);
|
||||
padding-bottom: var(--space-s);
|
||||
border-radius: var(--radius-s);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
background-color: var(--color-btn-normal);
|
||||
color: var(--color-text-primary);
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: background-color, border-color, color;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
||||
}
|
||||
|
||||
.utk-button:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
}
|
||||
|
||||
.utk-button:active {
|
||||
background-color: var(--color-btn-pressed);
|
||||
}
|
||||
|
||||
.utk-button:focus {
|
||||
border-color: var(--color-border-focus);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Button Icon
|
||||
=================================== */
|
||||
|
||||
.utk-button__icon {
|
||||
font-size: var(--font-size-body1);
|
||||
color: var(--color-text-primary);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-unity-text-align: middle-center;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.utk-button--has-icon .utk-button__icon {
|
||||
margin-right: var(--space-s);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Button Text
|
||||
=================================== */
|
||||
|
||||
.utk-button__text {
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
-unity-text-align: middle-center;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Icon Only Mode
|
||||
=================================== */
|
||||
|
||||
.utk-button--icon-only {
|
||||
padding: 0;
|
||||
min-width: auto;
|
||||
width: var(--size-icon-btn);
|
||||
height: var(--size-icon-btn);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.utk-button--icon-only .utk-button__icon {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Size Variants
|
||||
=================================== */
|
||||
|
||||
.utk-button--small {
|
||||
height: 20px;
|
||||
min-width: 60px;
|
||||
padding-left: var(--space-s);
|
||||
padding-right: var(--space-s);
|
||||
font-size: var(--font-size-label3);
|
||||
}
|
||||
|
||||
.utk-button--small .utk-button__text {
|
||||
font-size: var(--font-size-label3);
|
||||
}
|
||||
|
||||
.utk-button--small .utk-button__icon {
|
||||
font-size: var(--font-size-label3);
|
||||
}
|
||||
|
||||
.utk-button--medium {
|
||||
height: var(--size-btn-height);
|
||||
min-width: var(--size-btn-min-width);
|
||||
}
|
||||
|
||||
.utk-button--large {
|
||||
height: 32px;
|
||||
min-width: 100px;
|
||||
padding-left: var(--space-l);
|
||||
padding-right: var(--space-l);
|
||||
}
|
||||
|
||||
.utk-button--large .utk-button__text {
|
||||
font-size: var(--font-size-body1);
|
||||
}
|
||||
|
||||
.utk-button--large .utk-button__icon {
|
||||
font-size: var(--font-size-body1);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Style Variants
|
||||
=================================== */
|
||||
|
||||
/* Normal (Default) */
|
||||
.utk-button--normal {
|
||||
background-color: var(--color-btn-normal);
|
||||
border-color: var(--color-border);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--normal:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
}
|
||||
|
||||
.utk-button--normal:active {
|
||||
background-color: var(--color-btn-pressed);
|
||||
}
|
||||
|
||||
/* Primary */
|
||||
.utk-button--primary {
|
||||
background-color: var(--color-btn-primary);
|
||||
border-color: var(--color-btn-primary);
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
.utk-button--primary:hover {
|
||||
background-color: var(--color-btn-primary-hover);
|
||||
border-color: var(--color-btn-primary-hover);
|
||||
}
|
||||
|
||||
.utk-button--primary:active {
|
||||
background-color: var(--color-blue-04);
|
||||
border-color: var(--color-blue-04);
|
||||
}
|
||||
|
||||
.utk-button--primary .utk-button__text,
|
||||
.utk-button--primary .utk-button__icon {
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* Secondary */
|
||||
.utk-button--secondary {
|
||||
background-color: var(--color-btn-secondary);
|
||||
border-color: var(--color-border);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--secondary:hover {
|
||||
background-color: var(--color-btn-secondary-hover);
|
||||
}
|
||||
|
||||
/* Ghost (Transparent) */
|
||||
.utk-button--ghost {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--ghost:hover {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.utk-button--ghost:active {
|
||||
background-color: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
/* Danger */
|
||||
.utk-button--danger {
|
||||
background-color: var(--color-red-01);
|
||||
border-color: var(--color-red-01);
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
.utk-button--danger:hover {
|
||||
background-color: var(--color-red-02);
|
||||
border-color: var(--color-red-02);
|
||||
}
|
||||
|
||||
.utk-button--danger .utk-button__text,
|
||||
.utk-button--danger .utk-button__icon {
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Outline Variants
|
||||
=================================== */
|
||||
|
||||
/* Outline Normal */
|
||||
.utk-button--outline-normal {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-border);
|
||||
border-width: 1px;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--outline-normal:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
border-color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--outline-normal:active {
|
||||
background-color: var(--color-btn-pressed);
|
||||
}
|
||||
|
||||
.utk-button--outline-normal .utk-button__text,
|
||||
.utk-button--outline-normal .utk-button__icon {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* Outline Primary */
|
||||
.utk-button--outline-primary {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-btn-primary);
|
||||
border-width: 1px;
|
||||
color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-button--outline-primary:hover {
|
||||
background-color: var(--color-btn-primary);
|
||||
border-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-button--outline-primary:active {
|
||||
background-color: var(--color-btn-primary-hover);
|
||||
border-color: var(--color-btn-primary-hover);
|
||||
}
|
||||
|
||||
.utk-button--outline-primary .utk-button__text,
|
||||
.utk-button--outline-primary .utk-button__icon {
|
||||
color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-button--outline-primary:hover .utk-button__text,
|
||||
.utk-button--outline-primary:hover .utk-button__icon {
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* Outline Danger */
|
||||
.utk-button--outline-danger {
|
||||
background-color: transparent;
|
||||
border-color: var(--color-red-01);
|
||||
border-width: 1px;
|
||||
color: var(--color-red-01);
|
||||
}
|
||||
|
||||
.utk-button--outline-danger:hover {
|
||||
background-color: var(--color-red-01);
|
||||
border-color: var(--color-red-01);
|
||||
}
|
||||
|
||||
.utk-button--outline-danger:active {
|
||||
background-color: var(--color-red-02);
|
||||
border-color: var(--color-red-02);
|
||||
}
|
||||
|
||||
.utk-button--outline-danger .utk-button__text,
|
||||
.utk-button--outline-danger .utk-button__icon {
|
||||
color: var(--color-red-01);
|
||||
}
|
||||
|
||||
.utk-button--outline-danger:hover .utk-button__text,
|
||||
.utk-button--outline-danger:hover .utk-button__icon {
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Text Variant (Label/Icon only, no background/border)
|
||||
=================================== */
|
||||
|
||||
/* Text - 배경과 외곽선이 투명하고 텍스트/아이콘만 표시 */
|
||||
.utk-button--text {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
border-width: 0;
|
||||
color: var(--color-text-primary);
|
||||
padding-left: var(--space-s);
|
||||
padding-right: var(--space-s);
|
||||
min-width: auto;
|
||||
}
|
||||
|
||||
.utk-button--text:hover {
|
||||
background-color: transparent;
|
||||
color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-button--text:active {
|
||||
background-color: transparent;
|
||||
color: var(--color-btn-primary-hover);
|
||||
}
|
||||
|
||||
.utk-button--text .utk-button__text,
|
||||
.utk-button--text .utk-button__icon {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--text:hover .utk-button__text,
|
||||
.utk-button--text:hover .utk-button__icon {
|
||||
color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-button--text:active .utk-button__text,
|
||||
.utk-button--text:active .utk-button__icon {
|
||||
color: var(--color-btn-primary-hover);
|
||||
}
|
||||
|
||||
/* Text Icon Only - 원형 아이콘 버튼 */
|
||||
.utk-button--text.utk-button--icon-only {
|
||||
width: var(--size-icon-btn);
|
||||
height: var(--size-icon-btn);
|
||||
border-radius: 50%;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--icon-only:hover {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--icon-only:hover .utk-button__icon {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--icon-only:active {
|
||||
background-color: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--icon-only:active .utk-button__icon {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Disabled State
|
||||
=================================== */
|
||||
|
||||
.utk-button--disabled {
|
||||
background-color: var(--color-btn-disabled);
|
||||
border-color: var(--color-border);
|
||||
color: var(--color-text-disabled);
|
||||
cursor: arrow;
|
||||
}
|
||||
|
||||
.utk-button--disabled:hover {
|
||||
background-color: var(--color-btn-disabled);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-button--disabled:active {
|
||||
background-color: var(--color-btn-disabled);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-button--disabled:focus {
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-button--disabled .utk-button__text,
|
||||
.utk-button--disabled .utk-button__icon {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
/* Text Variant Disabled - hover/active 시에도 색상 유지 */
|
||||
.utk-button--text.utk-button--disabled {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--disabled:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--disabled:hover .utk-button__text,
|
||||
.utk-button--text.utk-button--disabled:hover .utk-button__icon {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-button--text.utk-button--disabled:active .utk-button__text,
|
||||
.utk-button--text.utk-button--disabled:active .utk-button__icon {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Image Icon Support
|
||||
=================================== */
|
||||
|
||||
.utk-button__image-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
flex-shrink: 0;
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
}
|
||||
|
||||
.utk-button--has-image-icon .utk-button__image-icon {
|
||||
margin-right: var(--space-s);
|
||||
}
|
||||
|
||||
.utk-button--icon-only .utk-button__image-icon {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/* Size Variants for Image Icon */
|
||||
.utk-button--small .utk-button__image-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.utk-button--large .utk-button__image-icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Button/UTKButton.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Button/UTKButton.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d87c1fbcdd3ffee42b5860c781bcb4f8
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
118
Assets/Resources/UIToolkit/Button/UTKCheckBox.uss
Normal file
118
Assets/Resources/UIToolkit/Button/UTKCheckBox.uss
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKCheckBox.uss
|
||||
* 체크박스 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-checkbox {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Checkbox Box
|
||||
=================================== */
|
||||
|
||||
.utk-checkbox__box {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
min-width: 18px;
|
||||
min-height: 18px;
|
||||
border-radius: var(--radius-s);
|
||||
border-width: 2px;
|
||||
border-color: var(--color-border);
|
||||
background-color: var(--color-bg-input);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: border-color, background-color;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
||||
}
|
||||
|
||||
.utk-checkbox:hover .utk-checkbox__box {
|
||||
border-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-checkbox--checked .utk-checkbox__box,
|
||||
.utk-checkbox--indeterminate .utk-checkbox__box {
|
||||
border-color: var(--color-btn-primary);
|
||||
background-color: var(--color-btn-primary);
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Check Icon
|
||||
=================================== */
|
||||
|
||||
.utk-checkbox__icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
font-size: 12px;
|
||||
color: var(--color-text-primary);
|
||||
-unity-text-align: middle-center;
|
||||
-unity-font-style: bold;
|
||||
opacity: 0;
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: opacity;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
translate: -50% -50%;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
||||
}
|
||||
|
||||
.utk-checkbox--checked .utk-checkbox__icon,
|
||||
.utk-checkbox--indeterminate .utk-checkbox__icon {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Label
|
||||
=================================== */
|
||||
|
||||
.utk-checkbox__label {
|
||||
margin-left: var(--space-m);
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Disabled State
|
||||
=================================== */
|
||||
|
||||
.utk-checkbox--disabled {
|
||||
cursor: arrow;
|
||||
}
|
||||
|
||||
.utk-checkbox--disabled .utk-checkbox__box {
|
||||
border-color: var(--color-border);
|
||||
background-color: var(--color-btn-disabled);
|
||||
}
|
||||
|
||||
.utk-checkbox--disabled:hover .utk-checkbox__box {
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-checkbox--disabled.utk-checkbox--checked .utk-checkbox__box,
|
||||
.utk-checkbox--disabled.utk-checkbox--indeterminate .utk-checkbox__box {
|
||||
background-color: var(--color-text-disabled);
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-checkbox--disabled.utk-checkbox--checked:hover .utk-checkbox__box,
|
||||
.utk-checkbox--disabled.utk-checkbox--indeterminate:hover .utk-checkbox__box {
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-checkbox--disabled .utk-checkbox__label {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Button/UTKCheckBox.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Button/UTKCheckBox.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2c311091db8199469dcc687e40e3765
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
124
Assets/Resources/UIToolkit/Button/UTKRadioButton.uss
Normal file
124
Assets/Resources/UIToolkit/Button/UTKRadioButton.uss
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKRadioButton.uss
|
||||
* Unity RadioButton 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-radio {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-self: flex-start;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Radio Input Container
|
||||
=================================== */
|
||||
|
||||
.utk-radio > .unity-radio-button__input {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Checkmark Container (Outer Circle)
|
||||
=================================== */
|
||||
|
||||
.utk-radio .unity-radio-button__checkmark-background {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 9px;
|
||||
border-width: 2px;
|
||||
border-color: var(--color-border);
|
||||
background-color: var(--color-bg-input);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: border-color, background-color;
|
||||
}
|
||||
|
||||
.utk-radio:hover .unity-radio-button__checkmark-background {
|
||||
border-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-radio:checked .unity-radio-button__checkmark-background {
|
||||
border-color: var(--color-btn-primary);
|
||||
background-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Checkmark (Inner Dot)
|
||||
=================================== */
|
||||
|
||||
.utk-radio .unity-radio-button__checkmark {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 4px;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
-unity-background-image-tint-color: transparent;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
translate: -50% -50%;
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: background-color;
|
||||
}
|
||||
|
||||
.utk-radio:checked .unity-radio-button__checkmark {
|
||||
background-color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Label
|
||||
=================================== */
|
||||
|
||||
.utk-radio .unity-radio-button__text {
|
||||
margin-left: var(--space-s);
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Disabled State
|
||||
=================================== */
|
||||
|
||||
.utk-radio:disabled {
|
||||
cursor: arrow;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.utk-radio:disabled .unity-radio-button__checkmark-background {
|
||||
border-color: var(--color-border);
|
||||
background-color: var(--color-btn-disabled);
|
||||
}
|
||||
|
||||
.utk-radio:disabled:hover .unity-radio-button__checkmark-background {
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-radio:disabled:checked:hover .unity-radio-button__checkmark-background {
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-radio:disabled:checked .unity-radio-button__checkmark-background {
|
||||
background-color: var(--color-text-disabled);
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-radio:disabled .unity-radio-button__checkmark {
|
||||
background-color: var(--color-btn-disabled);
|
||||
}
|
||||
|
||||
.utk-radio:disabled:checked .unity-radio-button__checkmark {
|
||||
background-color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
.utk-radio:disabled .unity-radio-button__text {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Button/UTKRadioButton.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Button/UTKRadioButton.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1480e5ed2b9f5914f8a920e59c027cf3
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
112
Assets/Resources/UIToolkit/Button/UTKToggle.uss
Normal file
112
Assets/Resources/UIToolkit/Button/UTKToggle.uss
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKToggle.uss
|
||||
* Unity Toggle 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-toggle {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-self: flex-start;
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Hide default Unity checkmark
|
||||
=================================== */
|
||||
|
||||
.utk-toggle > .unity-toggle__input {
|
||||
width: 36px;
|
||||
height: 20px;
|
||||
min-width: 36px;
|
||||
min-height: 20px;
|
||||
border-radius: 10px;
|
||||
background-color: var(--color-btn-normal);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
flex-shrink: 0;
|
||||
transition-duration: var(--anim-normal);
|
||||
transition-property: background-color, border-color;
|
||||
}
|
||||
|
||||
.utk-toggle:hover > .unity-toggle__input {
|
||||
border-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
.utk-toggle--on > .unity-toggle__input {
|
||||
background-color: var(--color-btn-primary);
|
||||
border-color: var(--color-btn-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Checkmark (Thumb)
|
||||
=================================== */
|
||||
|
||||
.utk-toggle > .unity-toggle__input > .unity-toggle__checkmark {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-width: 0;
|
||||
border-radius: var(--radius-full);
|
||||
background-color: var(--color-text-secondary);
|
||||
-unity-background-image-tint-color: transparent;
|
||||
background-image: none;
|
||||
margin: 2px;
|
||||
transition-duration: var(--anim-normal);
|
||||
transition-property: translate, background-color;
|
||||
}
|
||||
|
||||
.utk-toggle--on > .unity-toggle__input > .unity-toggle__checkmark {
|
||||
translate: 16px 0;
|
||||
background-color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Label
|
||||
=================================== */
|
||||
|
||||
.utk-toggle > .unity-toggle__label,
|
||||
.utk-toggle > .unity-label {
|
||||
margin-left: var(--space-m);
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Disabled State
|
||||
=================================== */
|
||||
|
||||
.utk-toggle--disabled {
|
||||
cursor: arrow;
|
||||
}
|
||||
|
||||
.utk-toggle--disabled > .unity-toggle__input {
|
||||
background-color: var(--color-btn-disabled);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-toggle--disabled:hover > .unity-toggle__input {
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-toggle--disabled.utk-toggle--on > .unity-toggle__input {
|
||||
background-color: var(--color-text-disabled);
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-toggle--disabled.utk-toggle--on:hover > .unity-toggle__input {
|
||||
border-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-toggle--disabled > .unity-toggle__input > .unity-toggle__checkmark {
|
||||
background-color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-toggle--disabled > .unity-toggle__label,
|
||||
.utk-toggle--disabled > .unity-label {
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Button/UTKToggle.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Button/UTKToggle.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea8e7fa6e2b464743a2cb236bc35086f
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
87
Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss
Normal file
87
Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKToggleButtonGroup.uss
|
||||
* Unity ToggleButtonGroup 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-toggle-group {
|
||||
flex-direction: row;
|
||||
background-color: var(--color-bg-secondary);
|
||||
border-radius: var(--radius-s);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Toggle Buttons
|
||||
=================================== */
|
||||
|
||||
.utk-toggle-group > .unity-button {
|
||||
margin: 0;
|
||||
padding: var(--space-xs) var(--space-m);
|
||||
background-color: transparent;
|
||||
border-width: 0;
|
||||
border-radius: var(--radius-xs);
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: background-color, color;
|
||||
}
|
||||
|
||||
.utk-toggle-group > .unity-button:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
}
|
||||
|
||||
.utk-toggle-group > .unity-button:checked {
|
||||
background-color: var(--color-btn-primary);
|
||||
color: var(--color-text-on-primary);
|
||||
}
|
||||
|
||||
.utk-toggle-group > .unity-button:checked:hover {
|
||||
background-color: var(--color-btn-primary-hover);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Custom Button Class
|
||||
=================================== */
|
||||
|
||||
.utk-toggle-group__button {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.utk-toggle-group__icon {
|
||||
margin-right: var(--space-xs);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Disabled State
|
||||
=================================== */
|
||||
|
||||
.utk-toggle-group--disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.utk-toggle-group--disabled > .unity-button {
|
||||
color: var(--color-text-disabled);
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.utk-toggle-group--disabled > .unity-button:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.utk-toggle-group--disabled > .unity-button:checked {
|
||||
background-color: var(--color-btn-disabled);
|
||||
color: var(--color-text-disabled);
|
||||
}
|
||||
|
||||
.utk-toggle-group--disabled > .unity-button:checked:hover {
|
||||
background-color: var(--color-btn-disabled);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b86bf8de13087274d838017cb2603ed2
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
8
Assets/Resources/UIToolkit/Card.meta
Normal file
8
Assets/Resources/UIToolkit/Card.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 68a77a858a5c1ce44832e5b9580b80de
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
112
Assets/Resources/UIToolkit/Card/UTKCard.uss
Normal file
112
Assets/Resources/UIToolkit/Card/UTKCard.uss
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKCard.uss
|
||||
* 카드 컴포넌트 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-card {
|
||||
flex-direction: column;
|
||||
border-radius: var(--radius-l);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Variants
|
||||
=================================== */
|
||||
|
||||
.utk-card--elevated {
|
||||
background-color: var(--color-bg-elevated);
|
||||
}
|
||||
|
||||
.utk-card--outlined {
|
||||
background-color: var(--color-bg-panel);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-card--filled {
|
||||
background-color: var(--color-btn-normal);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Clickable State
|
||||
=================================== */
|
||||
|
||||
.utk-card--clickable {
|
||||
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: background-color;
|
||||
}
|
||||
|
||||
.utk-card--clickable:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
}
|
||||
|
||||
.utk-card--clickable:active {
|
||||
background-color: var(--color-btn-pressed);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Image Container
|
||||
=================================== */
|
||||
|
||||
.utk-card__image {
|
||||
height: 160px;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Header
|
||||
=================================== */
|
||||
|
||||
.utk-card__header {
|
||||
flex-direction: column;
|
||||
padding: var(--space-l);
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Title
|
||||
=================================== */
|
||||
|
||||
.utk-card__title {
|
||||
font-size: var(--font-size-h3);
|
||||
color: var(--color-text-primary);
|
||||
-unity-font-style: bold;
|
||||
margin-bottom: var(--space-xs);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Subtitle
|
||||
=================================== */
|
||||
|
||||
.utk-card__subtitle {
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Content
|
||||
=================================== */
|
||||
|
||||
.utk-card__content {
|
||||
padding: var(--space-l);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Actions
|
||||
=================================== */
|
||||
|
||||
.utk-card__actions {
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
padding: var(--space-m) var(--space-l);
|
||||
border-top-width: var(--border-width);
|
||||
border-top-color: var(--color-border);
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Card/UTKCard.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Card/UTKCard.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2fe5884914f7ee14d8a93eedb3b40fd4
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
8
Assets/Resources/UIToolkit/Common.meta
Normal file
8
Assets/Resources/UIToolkit/Common.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 31176a3f98a362d4283ac94b4d603372
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
100
Assets/Resources/UIToolkit/Common/UTKFoldout.uss
Normal file
100
Assets/Resources/UIToolkit/Common/UTKFoldout.uss
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKFoldout.uss
|
||||
* Unity Foldout 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-foldout {
|
||||
margin-bottom: var(--space-s);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Toggle (Header)
|
||||
=================================== */
|
||||
|
||||
.utk-foldout > .unity-foldout__toggle {
|
||||
margin: 0;
|
||||
padding: var(--space-s) var(--space-m);
|
||||
background-color: var(--color-bg-secondary);
|
||||
border-radius: var(--radius-s);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: background-color, border-color;
|
||||
}
|
||||
|
||||
.utk-foldout > .unity-foldout__toggle:hover {
|
||||
background-color: var(--color-btn-hover);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Checkmark (Arrow)
|
||||
=================================== */
|
||||
|
||||
.utk-foldout > .unity-foldout__toggle > .unity-toggle__input > .unity-foldout__checkmark {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
-unity-background-image-tint-color: var(--color-text-secondary);
|
||||
transition-duration: var(--anim-fast);
|
||||
transition-property: rotate;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 0;
|
||||
margin-right: var(--space-xs);
|
||||
}
|
||||
|
||||
.utk-foldout > .unity-foldout__toggle:checked > .unity-toggle__input > .unity-foldout__checkmark {
|
||||
rotate: 0deg;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Title Label
|
||||
=================================== */
|
||||
|
||||
.utk-foldout > .unity-foldout__toggle > .unity-toggle__input > .unity-foldout__text {
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
-unity-font-style: bold;
|
||||
margin: 0;
|
||||
padding: var(--space-s) 0;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Content Container
|
||||
=================================== */
|
||||
|
||||
.utk-foldout .unity-foldout__content {
|
||||
margin-top: var(--space-s);
|
||||
margin-left: var(--space-m);
|
||||
padding: var(--space-m);
|
||||
background-color: var(--color-bg-secondary);
|
||||
border-radius: var(--radius-s);
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-foldout .unity-foldout__content {
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Collapsed State - Remove content border radius on top
|
||||
=================================== */
|
||||
|
||||
.utk-foldout:checked > .unity-foldout__toggle {
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.utk-foldout:checked .unity-foldout__content {
|
||||
margin-top: 0;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-top-width: 0;
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Common/UTKFoldout.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Common/UTKFoldout.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a0f870707b8498449e18047de242133
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
127
Assets/Resources/UIToolkit/Common/UTKHelpBox.uss
Normal file
127
Assets/Resources/UIToolkit/Common/UTKHelpBox.uss
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKHelpBox.uss
|
||||
* Unity HelpBox 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding: var(--space-m);
|
||||
border-radius: var(--radius-s);
|
||||
border-width: var(--border-width);
|
||||
min-height: 32px;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Icon
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox__icon {
|
||||
font-size: 20px;
|
||||
margin-right: var(--space-m);
|
||||
flex-shrink: 0;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Message
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox__message {
|
||||
flex-grow: 1;
|
||||
font-size: var(--font-size-body2);
|
||||
white-space: normal;
|
||||
-unity-text-align: middle-left;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Info Type
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox--info {
|
||||
background-color: rgba(8, 151, 251, 0.1);
|
||||
border-color: var(--color-state-info);
|
||||
}
|
||||
|
||||
.utk-helpbox--info .utk-helpbox__icon {
|
||||
color: var(--color-state-info);
|
||||
}
|
||||
|
||||
.utk-helpbox--info .utk-helpbox__message {
|
||||
color: var(--color-state-info);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Success Type
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox--success {
|
||||
background-color: rgba(115, 201, 145, 0.1);
|
||||
border-color: var(--color-state-success);
|
||||
}
|
||||
|
||||
.utk-helpbox--success .utk-helpbox__icon {
|
||||
color: var(--color-state-success);
|
||||
}
|
||||
|
||||
.utk-helpbox--success .utk-helpbox__message {
|
||||
color: var(--color-state-success);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Warning Type
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox--warning {
|
||||
background-color: rgba(238, 157, 40, 0.1);
|
||||
border-color: var(--color-state-warning);
|
||||
}
|
||||
|
||||
.utk-helpbox--warning .utk-helpbox__icon {
|
||||
color: var(--color-state-warning);
|
||||
}
|
||||
|
||||
.utk-helpbox--warning .utk-helpbox__message {
|
||||
color: var(--color-state-warning);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Error Type
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox--error {
|
||||
background-color: rgba(241, 76, 76, 0.1);
|
||||
border-color: var(--color-state-error);
|
||||
}
|
||||
|
||||
.utk-helpbox--error .utk-helpbox__icon {
|
||||
color: var(--color-state-error);
|
||||
}
|
||||
|
||||
.utk-helpbox--error .utk-helpbox__message {
|
||||
color: var(--color-state-error);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
None Type (No icon)
|
||||
=================================== */
|
||||
|
||||
.utk-helpbox--none {
|
||||
background-color: var(--color-bg-secondary);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.utk-helpbox--none .utk-helpbox__icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.utk-helpbox--none .utk-helpbox__message {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
11
Assets/Resources/UIToolkit/Common/UTKHelpBox.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Common/UTKHelpBox.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e71b5c9d9a33d264fbd619b3b6e3a707
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
10
Assets/Resources/UIToolkit/Common/UTKImage.uss
Normal file
10
Assets/Resources/UIToolkit/Common/UTKImage.uss
Normal file
@@ -0,0 +1,10 @@
|
||||
/* UTKImage 기본 스타일 */
|
||||
.utk-image {
|
||||
overflow: hidden;
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
}
|
||||
|
||||
/* 로딩 상태 */
|
||||
.utk-image--loading {
|
||||
opacity: 0.5;
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Common/UTKImage.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Common/UTKImage.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 143038e63b8fc834cafe9db628cc5011
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
57
Assets/Resources/UIToolkit/Common/UTKScrollView.uss
Normal file
57
Assets/Resources/UIToolkit/Common/UTKScrollView.uss
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* ===================================
|
||||
* UTKScrollView.uss
|
||||
* Unity ScrollView 래핑 스타일
|
||||
* ===================================
|
||||
*/
|
||||
|
||||
/* ===================================
|
||||
Base Container
|
||||
=================================== */
|
||||
|
||||
.utk-scrollview {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Content Container
|
||||
=================================== */
|
||||
|
||||
.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container > .unity-scroll-view__content-viewport {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container > .unity-scroll-view__content-viewport > .unity-scroll-view__content-container {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Content Text
|
||||
=================================== */
|
||||
|
||||
.utk-scrollview .unity-label {
|
||||
font-size: var(--font-size-body2);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Vertical Scroller
|
||||
=================================== */
|
||||
|
||||
.utk-scrollview .unity-scroller--vertical > .unity-scroller__slider {
|
||||
width: 6px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ===================================
|
||||
Horizontal Scroller
|
||||
=================================== */
|
||||
|
||||
.utk-scrollview .unity-scroller--horizontal > .unity-scroller__slider {
|
||||
height: 6px;
|
||||
margin: 0;
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Common/UTKScrollView.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Common/UTKScrollView.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ff0a7d358a20ced4dbe5ef646db9b0f3
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
18
Assets/Resources/UIToolkit/Common/UTKTooltip.uss
Normal file
18
Assets/Resources/UIToolkit/Common/UTKTooltip.uss
Normal file
@@ -0,0 +1,18 @@
|
||||
/* UTKTooltip.uss - 툴팁 스타일 */
|
||||
|
||||
.utk-tooltip-container {
|
||||
position: absolute;
|
||||
background-color: var(--color-bg-tooltip);
|
||||
border-radius: var(--radius-m);
|
||||
padding: var(--space-s) var(--space-m);
|
||||
max-width: 300px;
|
||||
border-width: var(--border-width);
|
||||
border-color: var(--color-border-light);
|
||||
}
|
||||
|
||||
.utk-tooltip-label {
|
||||
color: #FFFFFF;
|
||||
font-size: var(--font-size-body2);
|
||||
white-space: normal;
|
||||
-unity-text-align: middle-left;
|
||||
}
|
||||
11
Assets/Resources/UIToolkit/Common/UTKTooltip.uss.meta
Normal file
11
Assets/Resources/UIToolkit/Common/UTKTooltip.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d18684c4217403848995bd0890378f98
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
6
Assets/Resources/UIToolkit/Common/UTKTooltip.uxml
Normal file
6
Assets/Resources/UIToolkit/Common/UTKTooltip.uxml
Normal file
@@ -0,0 +1,6 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
|
||||
<Style src="UTKTooltip.uss" />
|
||||
<ui:VisualElement name="tooltip-container" class="utk-tooltip-container" picking-mode="Ignore">
|
||||
<ui:Label name="tooltip-label" class="utk-tooltip-label" picking-mode="Ignore" />
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
10
Assets/Resources/UIToolkit/Common/UTKTooltip.uxml.meta
Normal file
10
Assets/Resources/UIToolkit/Common/UTKTooltip.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f473e51c9a54d0842a93597f537a6d8b
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
8
Assets/Resources/UIToolkit/Document.meta
Normal file
8
Assets/Resources/UIToolkit/Document.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c4f4597de9fcbbf42b0ae7a69db1d5c3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/Resources/UIToolkit/Document/DynamicDocument.uxml
Normal file
9
Assets/Resources/UIToolkit/Document/DynamicDocument.uxml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ui:UXML
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:ui="UnityEngine.UIElements"
|
||||
xmlns:uie="UnityEditor.UIElements"
|
||||
xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
|
||||
>
|
||||
|
||||
</ui:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 388c12cc6f747a3409725653495a6501
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
9
Assets/Resources/UIToolkit/Document/ModalDocument.uxml
Normal file
9
Assets/Resources/UIToolkit/Document/ModalDocument.uxml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ui:UXML
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:ui="UnityEngine.UIElements"
|
||||
xmlns:uie="UnityEditor.UIElements"
|
||||
xsi:noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd"
|
||||
>
|
||||
|
||||
</ui:UXML>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user