From 72a217c3c8191a138c4423b43c47aaf4539a0361 Mon Sep 17 00:00:00 2001 From: Foldcc_b1 Date: Tue, 11 Feb 2025 17:05:39 +0800 Subject: [PATCH] init --- CHANGELOG.md | 10 ++ CHANGELOG.md.meta | 7 + Editor.meta | 8 ++ Editor/CCTools.RectTransform.Editor.asmdef | 15 +++ .../CCTools.RectTransform.Editor.asmdef.meta | 7 + Editor/Config.meta | 8 ++ Editor/Config/CCToolsConfig.cs | 88 ++++++++++++ Editor/Config/CCToolsConfig.cs.meta | 11 ++ Editor/ExtendedRectTransformEditor.cs | 127 ++++++++++++++++++ Editor/ExtendedRectTransformEditor.cs.meta | 11 ++ README.md | 35 +++++ README.md.meta | 7 + Runtime.meta | 8 ++ package.json | 18 +++ package.json.meta | 7 + 15 files changed, 367 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.md.meta create mode 100644 Editor.meta create mode 100644 Editor/CCTools.RectTransform.Editor.asmdef create mode 100644 Editor/CCTools.RectTransform.Editor.asmdef.meta create mode 100644 Editor/Config.meta create mode 100644 Editor/Config/CCToolsConfig.cs create mode 100644 Editor/Config/CCToolsConfig.cs.meta create mode 100644 Editor/ExtendedRectTransformEditor.cs create mode 100644 Editor/ExtendedRectTransformEditor.cs.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 Runtime.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6281258 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog +All notable changes to this package will be documented in this file. + + +## [1.0.0] - 2024-03-XX +### Added +- 初始版本发布 +- 支持Figma坐标系转换 +- 添加全局开关功能 +- 实时同步RectTransform属性 \ No newline at end of file diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 0000000..c3722b9 --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5ccc2ddb42ab9254ea4b92b66d686786 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..61f74e4 --- /dev/null +++ b/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a1f2125f2364c040aadaedc8a7d0607 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/CCTools.RectTransform.Editor.asmdef b/Editor/CCTools.RectTransform.Editor.asmdef new file mode 100644 index 0000000..814626f --- /dev/null +++ b/Editor/CCTools.RectTransform.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "com.foldcc.cc-framework.editorextend.rectransform", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Editor/CCTools.RectTransform.Editor.asmdef.meta b/Editor/CCTools.RectTransform.Editor.asmdef.meta new file mode 100644 index 0000000..a9141ba --- /dev/null +++ b/Editor/CCTools.RectTransform.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ce44b0a50011c574f9e9d48cbe303171 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Config.meta b/Editor/Config.meta new file mode 100644 index 0000000..ae62415 --- /dev/null +++ b/Editor/Config.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa705cc16ba117d41b40db06dc01e4ce +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Config/CCToolsConfig.cs b/Editor/Config/CCToolsConfig.cs new file mode 100644 index 0000000..0bbccf7 --- /dev/null +++ b/Editor/Config/CCToolsConfig.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using UnityEditor; + + + +namespace CCTools.Config + +{ + + public static class CCToolsConfig + + { + + private const string ENABLE_FIGMA_UPDATE_KEY = "CCTools.EnableFigmaUpdate"; + + private const string MENU_ITEM_PATH = "CC-Tools/RectTransform Tool/Enable Figma Update"; + + + + // 默认启用 + public static bool enableFigmaUpdate = true; + + + + static CCToolsConfig() + { + + // 从 EditorPrefs 加载保存的状态 + enableFigmaUpdate = EditorPrefs.GetBool(ENABLE_FIGMA_UPDATE_KEY, true); + + } + + + + public static bool EnableFigmaUpdate + + { + + get => enableFigmaUpdate; + + private set + { + + if (enableFigmaUpdate != value) + + { + + enableFigmaUpdate = value; + + EditorPrefs.SetBool(ENABLE_FIGMA_UPDATE_KEY, value); + + // 刷新编辑器 + UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); + } + + } + + } + + + + [MenuItem(MENU_ITEM_PATH)] + + private static void ToggleFigmaUpdate() + + { + + enableFigmaUpdate = !enableFigmaUpdate; + + } + + + + [MenuItem(MENU_ITEM_PATH, true)] + + private static bool ToggleFigmaUpdateValidate() + + { + + Menu.SetChecked(MENU_ITEM_PATH, enableFigmaUpdate); + + return true; + + } + + } + +} diff --git a/Editor/Config/CCToolsConfig.cs.meta b/Editor/Config/CCToolsConfig.cs.meta new file mode 100644 index 0000000..fffc8a5 --- /dev/null +++ b/Editor/Config/CCToolsConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c448ff099a133439867c8cd9f41938 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ExtendedRectTransformEditor.cs b/Editor/ExtendedRectTransformEditor.cs new file mode 100644 index 0000000..f6660df --- /dev/null +++ b/Editor/ExtendedRectTransformEditor.cs @@ -0,0 +1,127 @@ +using UnityEngine; +using UnityEditor; +using CCTools.Config; + +[CustomEditor(typeof(RectTransform))] +public class ExtendedRectTransformEditor : Editor +{ + private RectTransform rectTransform; + private Editor defaultEditor; + + private void OnEnable() + { + rectTransform = target as RectTransform; + defaultEditor = CreateEditor(target, typeof(Editor).Assembly.GetType("UnityEditor.RectTransformEditor")); + } + + private void OnDisable() + { + if (defaultEditor != null) + { + DestroyImmediate(defaultEditor); + } + } + + private Vector2 GetFigmaPosition() + { + Vector2 parentSize = Vector2.zero; + if (rectTransform.parent is RectTransform parentRect) + { + parentSize = parentRect.rect.size; + } + + float figmaX = rectTransform.anchoredPosition.x + + (parentSize.x * rectTransform.anchorMin.x) - + (rectTransform.rect.width * rectTransform.pivot.x); + + float figmaY = -rectTransform.anchoredPosition.y + + (parentSize.y * (1 - rectTransform.anchorMax.y)) - + (rectTransform.rect.height * (1 - rectTransform.pivot.y)); + + return new Vector2(figmaX, figmaY); + } + + private void SetFigmaPosition(Vector2 figmaPos) + { + Vector2 parentSize = Vector2.zero; + if (rectTransform.parent is RectTransform parentRect) + { + parentSize = parentRect.rect.size; + } + + float anchoredX = figmaPos.x - + (parentSize.x * rectTransform.anchorMin.x) + + (rectTransform.rect.width * rectTransform.pivot.x); + + float anchoredY = -(figmaPos.y - + (parentSize.y * (1 - rectTransform.anchorMax.y)) + + (rectTransform.rect.height * (1 - rectTransform.pivot.y))); + + rectTransform.anchoredPosition = new Vector2(anchoredX, anchoredY); + } + + public override void OnInspectorGUI() + { + // 绘制默认Inspector + if (defaultEditor != null) + { + defaultEditor.OnInspectorGUI(); + } + + // 如果功能被禁用,直接返回 + if (!CCToolsConfig.EnableFigmaUpdate) + { + return; + } + + EditorGUILayout.Space(10); + + // 开始Figma区域 + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + EditorGUILayout.Space(5); + EditorGUILayout.LabelField("坐标同步器 (Figma、MasterGo)", EditorStyles.boldLabel); + EditorGUILayout.Space(5); + + EditorGUI.BeginChangeCheck(); + + Vector2 figmaPos = GetFigmaPosition(); + + EditorGUI.indentLevel++; + + // 位置输入框 + EditorGUILayout.BeginHorizontal(); + EditorGUIUtility.labelWidth = 60; + float newFigmaX = EditorGUILayout.FloatField("X 坐标", figmaPos.x); + float newFigmaY = EditorGUILayout.FloatField("Y 坐标", figmaPos.y); + EditorGUILayout.EndHorizontal(); + + // 尺寸输入框 + EditorGUILayout.BeginHorizontal(); + EditorGUIUtility.labelWidth = 60; + float newWidth = EditorGUILayout.FloatField("宽度", rectTransform.rect.width); + float newHeight = EditorGUILayout.FloatField("高度", rectTransform.rect.height); + EditorGUILayout.EndHorizontal(); + + EditorGUI.indentLevel--; + + EditorGUILayout.Space(5); + EditorGUILayout.EndVertical(); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(rectTransform, "修改 Figma 坐标和尺寸"); + + // 更新位置 + SetFigmaPosition(new Vector2(newFigmaX, newFigmaY)); + + // 更新尺寸 + rectTransform.sizeDelta = new Vector2(newWidth, newHeight); + + // 保持左上角位置不变 + SetFigmaPosition(new Vector2(newFigmaX, newFigmaY)); + + EditorUtility.SetDirty(rectTransform); + } + } +} \ No newline at end of file diff --git a/Editor/ExtendedRectTransformEditor.cs.meta b/Editor/ExtendedRectTransformEditor.cs.meta new file mode 100644 index 0000000..fa74305 --- /dev/null +++ b/Editor/ExtendedRectTransformEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ffd275f366fb314f93ccabdd61630fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..0b4976e --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# CC-Tools RectTransform + +Unity编辑器扩展,为RectTransform组件添加Figma坐标支持。 + +## 功能特性 + +- 在RectTransform组件中直接显示和编辑Figma坐标\MasterGo坐标 +- 支持实时坐标系转换 +- 保持UI元素的原有属性(pivot、anchor等) +- 可通过菜单快速开启/关闭功能 + +## 安装方法 + +### 通过 Unity Package Manager + +1. 打开 Package Manager 窗口 +2. 点击左上角的 "+" 按钮 +3. 选择 "Add package from git URL" +4. 输入: `https://github.com/your-username/cc-tools-rectransform.git` + +### 手动安装 + +下载并导入 .unitypackage 文件到您的项目中。 + +## 使用方法 + +1. 选择任意带有RectTransform组件的UI元素 +2. 在Inspector窗口中查看扩展的Figma坐标区域 +3. 直接输入Figma坐标值,UI元素将自动更新位置 + +可以通过菜单 "CC-Tools/RectTransform Tool/Enable Figma Update" 来启用或禁用该功能。 + +## 要求 + +- Unity 2019.4 或更高版本 \ No newline at end of file diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 0000000..16a116e --- /dev/null +++ b/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 14b5a71194a901444aa95dd694ea4898 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime.meta b/Runtime.meta new file mode 100644 index 0000000..c34d050 --- /dev/null +++ b/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: {生成的GUID} +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..e106499 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "com.foldcc.cc-framework.editorextend", + "version": "1.0.0", + "displayName": "CC-Tools RectTransform", + "description": "A Unity editor extension that adds Figma coordinate support to RectTransform components.", + "unity": "2019.4", + "keywords": [ + "editor", + "ui", + "tools", + "figma" + ], + "author": { + "name": "CC-Tools", + "email": "foldcc@lightyears.com", + "url": "https://lightyears.ltd" + } +} \ No newline at end of file diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..553079e --- /dev/null +++ b/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: de1ef936b31d2f348ad672db29997427 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: