diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 51f71deb..09ac4d64 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -58,6 +58,7 @@ jobs:
text: ${{ steps.version.outputs.value }}
- name: Configure the Environment Variables needed for releasing the Package
run: |
+ echo "stableVersion=${{ steps.stable-match.outputs.match }}" >> $GITHUB_ENV
echo "unityPackage=${{ vars.PACKAGE_NAME }}-${{ steps.version.outputs.value }}.unitypackage" >> $GITHUB_ENV
echo "version=${{ steps.version.outputs.value }}" >> $GITHUB_ENV
echo "zipFile=${{ vars.PACKAGE_NAME }}-${{ steps.version.outputs.value }}".zip >> $GITHUB_ENV
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 54b464b9..d323e391 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,8 +1,10 @@
{
"recommendations": [
"editorconfig.editorconfig",
+ "fernandoescolar.vscode-solution-explorer",
"redhat.vscode-yaml",
"streetsidesoftware.code-spell-checker",
- "visualstudiotoolsforunity.vstuc"
+ "visualstudiotoolsforunity.vstuc",
+ "zbecknell.t4-support"
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 94440bdb..15661c6c 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,15 +1,53 @@
{
+ "explorer.fileNesting.enabled": true,
+ "explorer.fileNesting.expand": false,
+ "explorer.fileNesting.patterns": {
+ "*": "${capture}.meta, ${capture}.md5",
+ "*.dll": "${capture}.pdb",
+ "*.md": "${capture}.*.md",
+ ".gitconfig": ".gitattributes, .gitignore",
+ ".tool-versions": "global.json",
+ "*.sln": "*.csproj",
+ "LICENSE": "LICENSE.*.txt",
+ "LICENSE*": "LICENSE${capture}.meta",
+ "T.cs": "*.po"
+ },
"files.associations": {
"*.anim": "yaml",
"*.asmdef": "json",
+ "*.asmref": "json",
"*.asset": "yaml",
+ "*.buildreport": "yaml",
+ "*.config": "xml",
"*.controller": "yaml",
+ "*.dwlt": "yaml",
+ "*.info": "json",
+ "*.index": "json",
+ "*.inputactions": "json",
+ "*.lighting": "yaml",
+ "*.mat": "yaml",
"*.meta": "yaml",
+ "*.outputdata": "json",
+ "*.physicmaterial": "yaml",
+ "*.playable": "yaml",
"*.prefab": "yaml",
+ "*.renderTexture": "yaml",
+ "*.scenetemplate": "yaml",
+ "*.signal": "yaml",
+ "*.terrainlayer": "yaml",
+ "*.tlh": "c",
+ "*.traceevents": "jsonl",
"*.unity": "yaml",
"*.uss": "css",
".imgbotconfig": "json",
- "LICENSE": "plaintext"
+ ".settings": "plist",
+ ".signature": "json",
+ "LastSceneManagerSetup.txt": "yaml",
+ "LibraryFormatVersion.txt": "yaml",
+ "LICENSE": "plaintext",
+ "ProjectVersion.txt": "yaml",
+ "XRPackageSettings.asset": "json",
+ "XRSettings.asset": "json"
},
"files.readonlyInclude": {
"Packages/com.*/**": true,
@@ -44,7 +82,9 @@
"tag:unity3d.com,2011:13 mapping",
"tag:unity3d.com,2011:19 mapping",
"tag:unity3d.com,2011:20 mapping",
+ "tag:unity3d.com,2011:21 mapping",
"tag:unity3d.com,2011:23 mapping",
+ "tag:unity3d.com,2011:28 mapping",
"tag:unity3d.com,2011:29 mapping",
"tag:unity3d.com,2011:30 mapping",
"tag:unity3d.com,2011:33 mapping",
@@ -54,6 +94,7 @@
"tag:unity3d.com,2011:74 mapping",
"tag:unity3d.com,2011:78 mapping",
"tag:unity3d.com,2011:81 mapping",
+ "tag:unity3d.com,2011:84 mapping",
"tag:unity3d.com,2011:91 mapping",
"tag:unity3d.com,2011:95 mapping",
"tag:unity3d.com,2011:104 mapping",
@@ -61,8 +102,10 @@
"tag:unity3d.com,2011:114 mapping",
"tag:unity3d.com,2011:126 mapping",
"tag:unity3d.com,2011:129 mapping",
+ "tag:unity3d.com,2011:134 mapping",
"tag:unity3d.com,2011:157 mapping",
"tag:unity3d.com,2011:159 mapping",
+ "tag:unity3d.com,2011:162 mapping",
"tag:unity3d.com,2011:196 mapping",
"tag:unity3d.com,2011:222 mapping",
"tag:unity3d.com,2011:223 mapping",
@@ -70,15 +113,24 @@
"tag:unity3d.com,2011:236 mapping",
"tag:unity3d.com,2011:310 mapping",
"tag:unity3d.com,2011:1001 mapping",
+ "tag:unity3d.com,2011:1002 mapping",
"tag:unity3d.com,2011:1045 mapping",
"tag:unity3d.com,2011:1101 mapping",
"tag:unity3d.com,2011:1102 mapping",
"tag:unity3d.com,2011:1107 mapping",
+ "tag:unity3d.com,2011:1125 mapping",
+ "tag:unity3d.com,2011:1126 mapping",
+ "tag:unity3d.com,2011:382020655 mapping",
"tag:unity3d.com,2011:387306366 mapping",
+ "tag:unity3d.com,2011:641289076 mapping",
+ "tag:unity3d.com,2011:668709126 mapping",
+ "tag:unity3d.com,2011:850595691 mapping",
"tag:unity3d.com,2011:890905787 mapping",
"tag:unity3d.com,2011:937362698 mapping",
"tag:unity3d.com,2011:1386491679 mapping",
- "tag:unity3d.com,2011:1660057539 mapping"
+ "tag:unity3d.com,2011:1521398425 mapping",
+ "tag:unity3d.com,2011:1660057539 mapping",
+ "tag:unity3d.com,2011:1953259897 mapping"
],
"yaml.schemas": {
"https://coderabbit.ai/integrations/coderabbit-overrides.v2.json": [
diff --git a/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs b/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs
new file mode 100644
index 00000000..fddfff41
--- /dev/null
+++ b/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs
@@ -0,0 +1,62 @@
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UI;
+using black.kit.toybox.Editor;
+
+namespace black.kit.vrcui.Editor
+{
+ /// The inspector of the .
+ [CustomEditor(typeof(Hero))]
+ public sealed class HeroEditor : EditorBase
+ {
+ /// The usage of the target.
+ private readonly string[] usage = new string[]
+ {
+ T.USAGE_REGIST_SPRITES,
+ T.USAGE_HERO_1,
+ };
+
+ /// Initialize the editor.
+ public HeroEditor() : base(L10n.Tr(T.DETAIL_HERO))
+ {
+ }
+
+ /// The callback to draw the inspector GUI.
+ public override void OnInspectorGUI()
+ {
+ DrawBanner();
+ DrawDetails();
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ var style = defaultStyle.Value;
+ EditorGUILayout.LabelField(L10n.Tr(T.USAGE_COMPONENT), style);
+ EditorGUILayout.Space();
+ DrawList(
+ usage,
+ new ListOptions(ordered: true, tr: (t) => L10n.Tr(t)));
+ EditorGUILayout.EndVertical();
+ base.OnInspectorGUI();
+
+ serializedObject.Update();
+ var image = AutoCompleteObject(Hero.NAME_IMAGE);
+ if (image)
+ {
+ image.sprite = GetSprite();
+ }
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ /// Get the sprite of the icon.
+ /// The sprite of the icon.
+ private Sprite GetSprite()
+ {
+ var (sprites, index, _) = GetArrayProperty(
+ Hero.NAME_SPRITES, TypedTarget.Index);
+ if (index < 0)
+ {
+ return null; // 'sprites' is empty
+ }
+ var element = sprites.GetArrayElementAtIndex(index);
+ return element.objectReferenceValue as Sprite;
+ }
+ }
+}
diff --git a/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs.meta b/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs.meta
new file mode 100644
index 00000000..da3c9dab
--- /dev/null
+++ b/Packages/black.kit.vrcui/Editor/Concreted/HeroEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 89b21219d6966cb4bb813f189590af0c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/black.kit.vrcui/Editor/Concreted/SelectEditor.cs b/Packages/black.kit.vrcui/Editor/Concreted/SelectEditor.cs
new file mode 100644
index 00000000..5c3c20ac
--- /dev/null
+++ b/Packages/black.kit.vrcui/Editor/Concreted/SelectEditor.cs
@@ -0,0 +1,43 @@
+using TMPro;
+using UnityEditor;
+using UnityEngine;
+
+namespace black.kit.vrcui.Editor
+{
+ /// The inspector of the .
+ [CustomEditor(typeof(Select))]
+ public sealed class SelectEditor : EditorBase