Common2DTool

3 阅读4分钟

概述(Overview)

Common2DTool 是一个专注于 Unity 2D UI 常用操作 的静态工具类,位于 PFGameFramework.Library 命名空间。

主要功能涵盖:

  • UI 图片点击放大/还原
  • CanvasGroup / Image 的 DOTween 缩放、淡入淡出动画
  • InputField / TMP_InputField 输入合法性校验
  • 动态更换 Image Sprite
  • 按钮交互特效(悬停放大、点击缩放回弹)
  • 图片显示/隐藏动画
  • 选择题答案校验(严格多选题判断)
  • 背景遮罩渐变 + 文字提示
  • 组件自动添加/获取
  • 集合比较、文本缩进、数值渐变、数组展平、随机排序等通用辅助方法

适用于快速搭建交互式 UI、教学实验、问答系统、数值展示等 2D 界面场景。


方法一览(API Index)

方法名类型异步返回类型主要功能典型用途
ScaleImagestaticvoid点击图片放大到视口中央,再次点击还原大图预览
CsGroupScalestaticvoid使用 DOTween 对 CanvasGroup 进行缩放动画弹窗/面板缩放出现
CheckInputFieldstaticbool校验 InputField / TMP_InputField 是否合法防止非法输入
ChangeSpritestaticvoid根据名称更换指定 Image 的 Sprite状态切换图标
AddButtonEffectstaticvoid为按钮添加悬停放大 + 点击回弹特效美化按钮交互感
ShowAndHideImage / ShowImage / HideImagestaticvoid使用 DOTween 实现图片弹簧式显示/隐藏提示图标/图标反馈
ValidateInputFieldstaticbool校验数字输入,不合法时显示提示并聚焦表单验证
CheckedToggleAnswersstaticbool严格判断多选题答案(必须全对且不多选)选择题评分
ImageGradientstaticUniTask黑色遮罩渐变 + 中间显示文字提示操作提示、加载提示
GetBtnByNamestaticButton从按钮列表中按名称查找按钮快速获取特定按钮
AddComponentIfMissingstaticvoid如果缺少组件则自动添加确保组件存在
GetComponentIfMissingstaticT获取或添加组件并返回安全获取组件
ListEqualsstaticbool判断两个集合内容是否完全相等答案对比、状态比较
AddSpacestaticstring为字符串添加首行缩进(透明色 hack)文本排版美化
RefreshTextWeightstaticvoid根据文本内容自适应背景宽度对话气泡、标签自适应
DataIncrement1 / DataIncrement2staticfloat数值渐变增长(常用于分数/进度动画)数值动画展示
MathRoundstaticdouble四舍五入保留指定小数位(AwayFromZero)精确小数显示
Flatten2dstaticT[]将二维数组展平为一维数据处理简化
Get2DIndexstatic(int,int)一维索引映射到二维行列索引网格布局计算
RandomSortstaticList随机打乱列表顺序选项乱序、卡牌洗牌
Productstaticint/float/double计算集合中所有元素的乘积累乘计算
GetAbsoluteScalestaticVector3计算物体在层级中的绝对缩放值UI 字体大小校正

方法详情

UI 交互与动画

ScaleImage

/// <summary>
/// 点击图片放大到固定大小和位置,再次点击还原(挂载在图片上使用)
/// </summary>
public static void ScaleImage(this Image image, bool isScale)

CsGroupScale

/// <summary>
/// 使用 DOTween 对 CanvasGroup 进行缩放动画(常用于弹窗)
/// </summary>
/// <param name="value">目标缩放值,通常 0~1</param>
/// <param name="fadeTime">动画时间</param>
/// <param name="ease">缓动类型</param>
public static void CsGroupScale(this CanvasGroup cg, float value, float fadeTime, Ease ease)

推荐 Ease

  • 出现:InOutQuint、InOutBack
  • 消失:OutCubic、OutQuint

AddButtonEffect

/// <summary>
/// 为按钮添加悬停放大 + 点击缩放回弹特效(使用 DOTween)
/// </summary>
public static void AddButtonEffect(this Button btn)

效果参数(可自行修改类中静态字段):

  • 悬停:1.1 倍,0.2s
  • 点击:0.9 倍 → 回 1.0 倍

ShowImage / HideImage / ShowAndHideImage

public static void ShowImage(this Image image)
public static void HideImage(this Image image)
public static void ShowAndHideImage(this Image image)

使用弹簧 + 淡入淡出组合,视觉反馈强烈。


输入校验

CheckInputField

/// <summary>
/// 简单校验 InputField 是否非空且不是特殊字符
/// </summary>
public static bool CheckInputField(this InputField inputField)
public static bool CheckInputField(this TMP_InputField inputField)

ValidateInputField

/// <summary>
/// 校验是否为合法数字,不合法则显示提示并聚焦输入框
/// </summary>
public static bool ValidateInputField(Text txtTishi, InputField iptfd, string tips)
public static bool ValidateInputField(TMP_Text txt_tishi, TMP_InputField iptfd, string tips)

选择题答案判断

CheckedToggleAnswers

/// <summary>
/// 严格判断多选题答案:必须全选正确选项,且不能多选
/// </summary>
public static bool CheckedToggleAnswers(IEnumerable<Toggle> options, IEnumerable<Toggle> answers)

使用 ListEquals 实现集合相等判断。


遮罩渐变提示

ImageGradient

/// <summary>
/// 黑色半透明遮罩渐变出现 → 显示文字 → 渐变消失
/// </summary>
public static async UniTask ImageGradient(GameObject image, string content, CancellationToken ctk)

ImageGradientAndSetTran(重载)

支持同时设置物体位置/旋转/缩放,常用于引导箭头或视角切换提示。


组件管理

AddComponentIfMissing / GetComponentIfMissing

public static void AddComponentIfMissing<T>(GameObject obj) where T : Component
public static T GetComponentIfMissing<T>(GameObject obj) where T : Component

用途:确保 EventTrigger、CanvasGroup 等组件存在。


其他实用工具

  • ListEquals:集合内容完全相等判断
  • AddSpace:首行缩进(使用透明色 hack)
  • RefreshTextWeight:文本背景宽度自适应
  • DataIncrement1/2:数值平滑增长动画
  • MathRound:精确四舍五入
  • Flatten2d:二维数组展平
  • RandomSort:列表随机乱序
  • Product:集合元素累乘
  • GetAbsoluteScale:计算层级绝对缩放(用于字体校正)