初始化

This commit is contained in:
come
2025-07-26 16:56:42 +08:00
parent 8291dbb91c
commit fa81439a8c
2574 changed files with 328492 additions and 2170 deletions

View File

@@ -0,0 +1,34 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
public static class MenuItemYIUIComponent
{
[MenuItem("GameObject/YIUI/Create UIComponent", false, 2)]
static void CreateYIUIComponent()
{
var activeObject = Selection.activeObject as GameObject;
if (activeObject == null)
{
UnityTipsHelper.ShowError($"请选择一个目标");
return;
}
//Component
var componentObject = new GameObject();
var viewRect = componentObject.GetOrAddComponent<RectTransform>();
componentObject.GetOrAddComponent<CanvasRenderer>();
var cdeTable = componentObject.GetOrAddComponent<UIBindCDETable>();
cdeTable.UICodeType = EUICodeType.Component;
viewRect.SetParent(activeObject.transform, false);
componentObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
Selection.activeObject = componentObject;
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 979f4a69430a405893bcbb1e091ed690
timeCreated: 1683863551

View File

@@ -0,0 +1,129 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
public static class MenuItemYIUIPanel
{
[MenuItem("Assets/YIUI/Create UIPanel", false, 0)]
static void CreateYIUIPanelByFolder()
{
var activeObject = Selection.activeObject as DefaultAsset;
if (activeObject == null)
{
UnityTipsHelper.ShowError(
$"请在路径 {UIStaticHelper.UIProjectResPath}/xxx/{UIStaticHelper.UISource} 下右键创建");
return;
}
var path = AssetDatabase.GetAssetPath(Selection.activeObject);
if (activeObject.name != UIStaticHelper.UISource ||
!path.Contains(UIStaticHelper.UIProjectResPath))
{
UnityTipsHelper.ShowError(
$"请在路径 {UIStaticHelper.UIProjectResPath}/xxx/{UIStaticHelper.UISource} 下右键创建");
return;
}
CreateYIUIPanelByPath(path);
}
internal static void CreateYIUIPanelByPath(string path, string name = null)
{
if (!path.Contains(UIStaticHelper.UIProjectResPath))
{
UnityTipsHelper.ShowError(
$"请在路径 {UIStaticHelper.UIProjectResPath}/xxx/{UIStaticHelper.UISource} 下右键创建");
return;
}
var saveName = string.IsNullOrEmpty(name)
? UIStaticHelper.UIYIUIPanelSourceName
: $"{name}{UIStaticHelper.UIPanelSourceName}";
var savePath = $"{path}/{saveName}.prefab";
if (AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) != null)
{
UnityTipsHelper.ShowError($"已存在 请先重命名 {saveName}");
return;
}
var createPanel = CreateYIUIPanel();
var panelPrefab = PrefabUtility.SaveAsPrefabAsset(createPanel, savePath);
Object.DestroyImmediate(createPanel);
Selection.activeObject = panelPrefab;
}
[MenuItem("GameObject/YIUI/Create UIPanel", false, 0)]
static void CreateYIUIPanelByGameObject()
{
var activeObject = Selection.activeObject as GameObject;
if (activeObject == null)
{
UnityTipsHelper.ShowError($"请选择UIRoot 右键创建");
return;
}
if (activeObject.name != PanelMgr.UILayerRootName)
{
UnityTipsHelper.ShowError($"只能在指定的 {PanelMgr.UILayerRootName} 下使用 快捷创建Panel");
return;
}
Selection.activeObject = CreateYIUIPanel(activeObject);
}
static GameObject CreateYIUIPanel(GameObject activeObject = null)
{
//panel
var panelObject = new GameObject();
var panelRect = panelObject.GetOrAddComponent<RectTransform>();
panelObject.GetOrAddComponent<CanvasRenderer>();
var cdeTable = panelObject.GetOrAddComponent<UIBindCDETable>();
cdeTable.UICodeType = EUICodeType.Panel;
cdeTable.IsSplitData = true;
//cdeTable.PanelOption |= EPanelOption.DisReset; //如果想要都是默认缓存界面可开启
var panelEditorData = cdeTable.PanelSplitData;
panelEditorData.Panel = panelObject;
panelObject.name = UIStaticHelper.UIYIUIPanelSourceName;
if (activeObject != null)
panelRect.SetParent(activeObject.transform, false);
panelRect.ResetToFullScreen();
//阻挡图
var backgroundObject = new GameObject();
var backgroundRect = backgroundObject.GetOrAddComponent<RectTransform>();
backgroundObject.GetOrAddComponent<CanvasRenderer>();
backgroundObject.GetOrAddComponent<UIBlock>();
backgroundObject.name = "UIBlockBG";
backgroundRect.SetParent(panelRect, false);
backgroundRect.ResetToFullScreen();
// 添加allView节点
var allViewObject = new GameObject();
var allViewRect = allViewObject.GetOrAddComponent<RectTransform>();
allViewObject.name = UIStaticHelper.UIAllViewParentName;
allViewRect.SetParent(panelRect, false);
allViewRect.ResetToFullScreen();
panelEditorData.AllViewParent = allViewRect;
// 添加AllPopupView节点
var allPopupViewObject = new GameObject();
var allPopupViewRect = allPopupViewObject.GetOrAddComponent<RectTransform>();
allPopupViewObject.name = UIStaticHelper.UIAllPopupViewParentName;
allPopupViewRect.SetParent(panelRect, false);
allPopupViewRect.ResetToFullScreen();
panelEditorData.AllPopupViewParent = allPopupViewRect;
panelObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
return panelObject;
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 64189a057fed4cfca7e9d799e3bc6799
timeCreated: 1683636826

View File

@@ -0,0 +1,150 @@
#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
/// <summary>
/// 面板逆向 转换为源数据
/// </summary>
public static class MenuItemYIUIPanelToSource
{
[MenuItem("Assets/YIUI/Panel 逆向 源数据 Source", false, 1)]
static void CreateYIUIPanelByFolder()
{
var activeObject = Selection.activeObject as GameObject;
if (activeObject == null)
{
UnityTipsHelper.ShowError("必须选择一个Panel 对象");
return;
}
var path = AssetDatabase.GetAssetPath(Selection.activeObject);
if (!path.Contains(UIStaticHelper.UIProjectResPath))
{
UnityTipsHelper.ShowError(
$"请在路径 {UIStaticHelper.UIProjectResPath}/xxx/{UIStaticHelper.UIPanelName} 下右键选择一个Panel 进行转换");
return;
}
var panelCdeTable = activeObject.GetComponent<UIBindCDETable>();
if (panelCdeTable == null)
{
UnityTipsHelper.ShowError("预设错误 没有 UIBindCDETable");
return;
}
if (panelCdeTable.UICodeType != EUICodeType.Panel)
{
UnityTipsHelper.ShowError("预设错误 必须是Panel");
return;
}
if (panelCdeTable.IsSplitData)
{
UnityTipsHelper.ShowError("这是一个源数据 无法逆向转换");
return;
}
if (string.IsNullOrEmpty(panelCdeTable.PkgName))
{
panelCdeTable.AutoCheck();
}
if (string.IsNullOrEmpty(panelCdeTable.PkgName))
{
UnityTipsHelper.ShowError("未知错误 无法识别 包名");
return;
}
var newSourceName = $"{panelCdeTable.name}{UIStaticHelper.UISource}";
var savePath =
$"{UIStaticHelper.UIProjectResPath}/{panelCdeTable.PkgName}/{UIStaticHelper.UISource}/{newSourceName}.prefab";
if (AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) != null)
{
UnityTipsHelper.CallBack("源数据已存在!!! 此操作将会覆盖旧的数据!!!", () => { CreateNewSource(path, savePath); });
}
else
{
CreateNewSource(path, savePath);
}
}
private static void CreateNewSource(string loadPath, string savePath)
{
var loadPanel = (GameObject)AssetDatabase.LoadAssetAtPath(loadPath, typeof(Object));
if (loadPanel == null)
{
UnityTipsHelper.ShowError($"未知错误 没有加载到Panel 请检查 {loadPath}");
return;
}
var newSource = UIMenuItemHelper.CopyGameObject(loadPanel);
var oldCdeTable = newSource.GetComponent<UIBindCDETable>();
oldCdeTable.IsSplitData = true;
newSource.name = $"{loadPanel.name}{UIStaticHelper.UISource}";
CorrelationView(oldCdeTable);
PrefabUtility.SaveAsPrefabAsset(newSource, savePath);
Object.DestroyImmediate(newSource);
UnityTipsHelper.Show($"Panel 逆向 源数据 完毕");
AssetDatabase.Refresh();
}
//关联UI
private static void CorrelationView(UIBindCDETable cdeTable)
{
CorrelationViewByParent(cdeTable.PkgName, cdeTable.PanelSplitData.AllCommonView);
CorrelationViewByParent(cdeTable.PkgName, cdeTable.PanelSplitData.AllCreateView);
CorrelationViewByParent(cdeTable.PkgName, cdeTable.PanelSplitData.AllPopupView);
}
private static void CorrelationViewByParent(string pkgName, List<RectTransform> parentList)
{
foreach (var viewParent in parentList)
{
if (viewParent == null) continue;
var viewName = viewParent.name.Replace(UIStaticHelper.UIParentName, "");
var viewPath =
$"{UIStaticHelper.UIProjectResPath}/{pkgName}/{UIStaticHelper.UIPrefabs}/{viewName}.prefab";
var childView = viewParent.FindChildByName(viewName);
if (childView != null)
{
Object.DestroyImmediate(childView.gameObject);
}
AddView(viewPath, viewParent);
}
}
//吧其他view 关联上
private static void AddView(string loadPath, Transform parent)
{
var loadView = (GameObject)AssetDatabase.LoadAssetAtPath(loadPath, typeof(Object));
if (loadView == null)
{
UnityTipsHelper.ShowError($"未知错误 没有加载到 请检查 {loadPath}");
return;
}
var prefabInstance = PrefabUtility.InstantiatePrefab(loadView) as GameObject;
if (prefabInstance == null)
{
Debug.LogError($"{loadView.name} 未知错误 得到一个null 对象");
return;
}
prefabInstance.transform.SetParent(parent, false);
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 214d108fca8542cf893f796f76cf7a13
timeCreated: 1685694944

View File

@@ -0,0 +1,79 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
public static class MenuItemYIUIView
{
[MenuItem("GameObject/YIUI/Create UIView", false, 1)]
static void CreateYIUIView()
{
var activeObject = Selection.activeObject as GameObject;
if (activeObject == null)
{
UnityTipsHelper.ShowError($"请选择ViewParent 右键创建");
return;
}
var panelCdeTable = activeObject.transform.parent.GetComponentInParent<UIBindCDETable>();
if (panelCdeTable == null)
{
UnityTipsHelper.ShowError($"只能在AllViewParent / AllPopupViewParent 下使用 快捷创建View");
return;
}
if (panelCdeTable.UICodeType != EUICodeType.Panel)
{
UnityTipsHelper.ShowError($"必须是Panel 下使用 快捷创建View");
return;
}
var panelEditorData = panelCdeTable.PanelSplitData;
if (activeObject != panelEditorData.AllViewParent.gameObject &&
activeObject != panelEditorData.AllPopupViewParent.gameObject)
{
UnityTipsHelper.ShowError($"只能在AllViewParent / AllPopupViewParent 下使用 快捷创建View");
return;
}
//ViewParent
var viewParentObject = new GameObject();
var viewParentRect = viewParentObject.GetOrAddComponent<RectTransform>();
viewParentObject.name = UIStaticHelper.UIYIUIViewParentName;
viewParentRect.SetParent(activeObject.transform, false);
viewParentRect.ResetToFullScreen();
//View
var viewObject = new GameObject();
var viewRect = viewObject.GetOrAddComponent<RectTransform>();
viewObject.GetOrAddComponent<CanvasRenderer>();
var cdeTable = viewObject.GetOrAddComponent<UIBindCDETable>();
cdeTable.UICodeType = EUICodeType.View;
viewObject.name = UIStaticHelper.UIYIUIViewName;
viewRect.SetParent(viewParentRect, false);
viewRect.ResetToFullScreen();
if (activeObject == panelEditorData.AllViewParent.gameObject)
{
panelEditorData.AllCreateView.Add(viewParentRect);
cdeTable.ViewWindowType = EViewWindowType.View;
}
else if (activeObject == panelEditorData.AllPopupViewParent.gameObject)
{
panelEditorData.AllPopupView.Add(viewParentRect);
cdeTable.ViewWindowType = EViewWindowType.Popup;
}
viewParentObject.SetLayerRecursively(LayerMask.NameToLayer("UI"));
Selection.activeObject = viewParentObject;
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bd805e98138744d892e64dc189a1d601
timeCreated: 1683685941

View File

@@ -0,0 +1,43 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
public static class UIMenuItemHelper
{
/// <summary>
/// 克隆对象 根据传入的路径
/// </summary>
/// <param name="path"></param>
/// <param name="parent"></param>
/// <returns></returns>
public static GameObject CloneGameObjectByPath(string path, Transform parent = null)
{
var loadSource = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(Object));
if (loadSource == null)
{
UnityTipsHelper.ShowError($"未知错误 没有加载到源数据 请检查 {path}");
return null;
}
var newGameObj = Object.Instantiate(loadSource, parent, false);
if (newGameObj.name.EndsWith("(Clone)"))
newGameObj.name = newGameObj.name.Replace("(Clone)", "");
return newGameObj;
}
public static GameObject CopyGameObject(GameObject obj)
{
var newGameObj = Object.Instantiate(obj);
if (newGameObj.name.EndsWith("(Clone)"))
newGameObj.name = newGameObj.name.Replace("(Clone)", "");
return newGameObj;
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4eddbc53cfe04eb28c414f5c9fb59aac
timeCreated: 1685006007

View File

@@ -0,0 +1,173 @@
#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
/// <summary>
/// 源数据拆分
/// </summary>
public static class UIPanelSourceSplit
{
internal static void Do(UIBindCDETable source)
{
if (!source.IsSplitData)
{
UnityTipsHelper.ShowError($"只有源数据才可以拆分 请检查 {source.name}");
return;
}
var pkgName = source.PkgName;
if (pkgName == null)
{
UnityTipsHelper.ShowError($"未知错误 pkgName = null 请检查 {source.name}");
return;
}
var path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(source);
var loadSource = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(Object));
if (loadSource == null)
{
UnityTipsHelper.ShowError($"未知错误 没有加载到源数据 请检查 {source.name} {path}");
return;
}
var oldSource = UIMenuItemHelper.CopyGameObject(loadSource);
var oldCdeTable = oldSource.GetComponent<UIBindCDETable>();
var oldSplitData = oldCdeTable.PanelSplitData;
var newSource = UIMenuItemHelper.CopyGameObject(loadSource);
var cdeTable = newSource.GetComponent<UIBindCDETable>();
newSource.name = newSource.name.Replace(UIStaticHelper.UISource, "");
cdeTable.IsSplitData = false;
cdeTable.PanelSplitEditorShowData = cdeTable.PanelSplitData;
var splitData = cdeTable.PanelSplitData;
var savePath = $"{UIStaticHelper.UIProjectResPath}/{pkgName}/{UIStaticHelper.UIPrefabs}";
AllViewSaveAsPrefabAsset(oldSplitData.AllCommonView, splitData.AllCommonView, savePath, true);
AllViewSaveAsPrefabAsset(oldSplitData.AllCreateView, splitData.AllCreateView, savePath);
AllViewSaveAsPrefabAsset(oldSplitData.AllPopupView, splitData.AllPopupView, savePath);
//拆分后新的
SaveAsPrefabAsset(newSource, $"{savePath}/{newSource.name}.prefab");
Object.DestroyImmediate(newSource);
//老的重新关联 覆盖老数据
PrefabUtility.SaveAsPrefabAsset(oldSource, path);
Object.DestroyImmediate(oldSource);
UnityTipsHelper.Show($"源数据拆分完毕");
AssetDatabase.Refresh();
}
private static void AllViewSaveAsPrefabAsset(List<RectTransform> oldList, List<RectTransform> newList,
string savePath, bool nest = false)
{
if (oldList.Count != newList.Count)
{
Debug.LogError($"未知错误 长度不一致 {savePath}");
return;
}
for (var i = 0; i < newList.Count; i++)
{
var viewParent = newList[i];
var oldViewParent = oldList[i];
SaveAsPrefabAssetViewParent(oldViewParent, viewParent, savePath, nest);
}
}
private static bool SaveAsPrefabAssetViewParent(RectTransform oldViewParent, RectTransform viewParent,
string savePath, bool nest = false)
{
//View 查找
var view = viewParent.FindChildByName(viewParent.name.Replace(UIStaticHelper.UIParentName, ""));
if (view == null)
{
Debug.LogError($"{viewParent.name} 没找到View");
return false;
}
var oldView = oldViewParent.FindChildByName(oldViewParent.name.Replace(UIStaticHelper.UIParentName, ""));
if (oldView == null)
{
Debug.LogError($"{oldViewParent.name} 没找到oldView");
return false;
}
//CDE 查找
if (view.GetComponent<UIBindCDETable>() == null)
{
Debug.LogError($"{viewParent.name} 没找到 UIBindCDETable 组件 请检查");
return false;
}
if (oldView.GetComponent<UIBindCDETable>() == null)
{
Debug.LogError($"{oldViewParent.name} Old没找到 UIBindCDETable 组件 请检查");
return false;
}
var prefabPath = $"{savePath}/{view.name}.prefab";
var viewPrefab = SaveAsPrefabAsset(view.gameObject, prefabPath);
Object.DestroyImmediate(view.gameObject);
Object.DestroyImmediate(oldView.gameObject);
//old 是每个下面都有一个关联上
var oldPrefabInstance = PrefabUtility.InstantiatePrefab(viewPrefab) as GameObject;
if (oldPrefabInstance == null)
{
Debug.LogError($"{oldViewParent.name} Old未知错误 得到一个null 对象");
return false;
}
oldPrefabInstance.transform.SetParent(oldViewParent, false);
//新要根据情况保留的才关联
if (nest)
{
var prefabInstance = PrefabUtility.InstantiatePrefab(viewPrefab) as GameObject;
if (prefabInstance == null)
{
Debug.LogError($"{viewParent.name} 未知错误 得到一个null 对象");
return false;
}
prefabInstance.transform.SetParent(viewParent, false);
}
return true;
}
private static GameObject SaveAsPrefabAsset(GameObject obj, string path)
{
var prefab = PrefabUtility.SaveAsPrefabAsset(obj, path);
if (prefab == null)
{
Debug.LogError($"{obj.name} 创建失败");
}
else
{
var cde = prefab.GetComponent<UIBindCDETable>();
if (cde == null)
{
Debug.LogError($"{obj.name} cde == null");
}
else
{
cde.AutoCheck();
}
}
return prefab;
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d0f817bbdae742f0b7789f6825dc3e10
timeCreated: 1683712305

View File

@@ -0,0 +1,54 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using YIUIBind;
namespace YIUIFramework.Editor
{
internal static class YIUICommonMenuItem
{
private static void CreateTarget(string targetName)
{
var activeObject = Selection.activeObject as GameObject;
if (activeObject == null)
{
UnityTipsHelper.ShowError($"请选择一个对象 右键创建");
return;
}
var path = $"{UIStaticHelper.UIFrameworkPath}/YIUIEditor/TemplatePrefabs/YIUI/{targetName}.prefab";
Selection.activeObject = UIMenuItemHelper.CloneGameObjectByPath(path, activeObject.transform);
}
[MenuItem("GameObject/YIUI/Text_NoRaycast", false, 100001)]
private static void CreateText_NoRaycast()
{
CreateTarget("YIUIText_NoRaycast");
}
[MenuItem("GameObject/YIUI/Text (TMP)", false, 100002)]
private static void CreateTextTMP()
{
CreateTarget("YIUIText (TMP)");
}
[MenuItem("GameObject/YIUI/Image_NoRaycast", false, 100003)]
private static void CreateImage_NoRaycast()
{
CreateTarget("YIUIImage_NoRaycast");
}
[MenuItem("GameObject/YIUI/Button", false, 100004)]
private static void CreateButton()
{
CreateTarget("YIUIButton");
}
[MenuItem("GameObject/YIUI/Button_NoText", false, 100005)]
private static void CreateButton_NoText()
{
CreateTarget("YIUIButton_NoText");
}
}
}
#endif

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 39c78668dcd64b74b76474f7650b8632
timeCreated: 1685604081