Unity RectTransUtility工具类
这个工具主要是用于动态生成UI的情况。项目中我们通过配置UI的锚点、位置以及大小(位置、大小都是通过蓝湖看到的),然后通过代码动态生成UI。
大部分情况下只要合理设置锚点,那么生成出来的UI就已经满足了适配的要求。
using UnityEngine;public static class RectTransUtility
{/// <summary>/// 左上 (0.0, 1.0)/// </summary>public static readonly Vector2 TopLeftVector = new(0.0f, 1.0f);/// <summary>/// 上中 (0.5, 1.0)/// </summary>public static readonly Vector2 TopCenterVector = new(0.5f, 1.0f);/// <summary>/// 右上 (1.0, 1.0)/// </summary>public static readonly Vector2 TopRightVector = new(1.0f, 1.0f);/// <summary>/// 左中 (0.0, 0.5)/// </summary>public static readonly Vector2 MiddleLeftVector = new(0.0f, 0.5f);/// <summary>/// 中心 (0.5, 0.5)/// </summary>public static readonly Vector2 MiddleCenterVector = new(0.5f, 0.5f);/// <summary>/// 右中 (1.0, 0.5)/// </summary>public static readonly Vector2 MiddleRightVector = new(1.0f, 0.5f);/// <summary>/// 左下 (0.0, 0.0)/// </summary>public static readonly Vector2 BottomLeftVector = new(0.0f, 0.0f);/// <summary>/// 下中 (0.5, 0.0)/// </summary>public static readonly Vector2 BottomCenterVector = new(0.5f, 0.0f);/// <summary>/// 右下 (1.0, 0.0)/// </summary>public static readonly Vector2 BottomRightVector = new(1.0f, 0.0f);/// <summary>/// 设置位置与大小/// </summary>public static void SetRTPosition(RectTransform rt, ERectTransAnchor anchor_pivot, float x, float y, float width, float height){//设置锚点和轴心点SetRTAnchorAndPivot(rt, anchor_pivot);switch (anchor_pivot){case ERectTransAnchor.TopLeft:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, x, width);rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, y, height);return;case ERectTransAnchor.TopCenter:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, y, height);rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);rt.anchoredPosition = new Vector2(x, rt.anchoredPosition.y);return;case ERectTransAnchor.TopRight:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, x, width);rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, y, height);return;case ERectTransAnchor.MiddleLeft:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, x, width);rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);rt.anchoredPosition = new Vector2(rt.anchoredPosition.x, y);return;case ERectTransAnchor.MiddleCenter:rt.sizeDelta = new Vector2(width, height);rt.anchoredPosition = new Vector2(x, y);return;case ERectTransAnchor.MiddleRight:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, x, width);rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);rt.anchoredPosition = new Vector2(rt.anchoredPosition.x, y);return;case ERectTransAnchor.BottomLeft:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, x, width);rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, y, height);return;case ERectTransAnchor.BottomCenter:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, y, height);rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);rt.anchoredPosition = new Vector2(x, rt.anchoredPosition.y);return;case ERectTransAnchor.BottomRight:rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, x, width);rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, y, height);return;}Debug.LogWarning("[RectTransUtility.SetRTPosition] 暂不支持的锚点类型!");}/// <summary>/// 设置锚点和轴心点/// </summary>public static void SetRTAnchorAndPivot(RectTransform rt, ERectTransAnchor anchor_pivot){switch (anchor_pivot){case ERectTransAnchor.TopLeft:rt.anchorMin = TopLeftVector;rt.anchorMax = TopLeftVector;rt.pivot = TopLeftVector;return;case ERectTransAnchor.TopCenter:rt.anchorMin = TopCenterVector;rt.anchorMax = TopCenterVector;rt.pivot = TopCenterVector;return;case ERectTransAnchor.TopRight:rt.anchorMin = TopRightVector;rt.anchorMax = TopRightVector;rt.pivot = TopRightVector;return;case ERectTransAnchor.MiddleLeft:rt.anchorMin = MiddleLeftVector;rt.anchorMax = MiddleLeftVector;rt.pivot = MiddleLeftVector;return;case ERectTransAnchor.MiddleCenter:rt.anchorMin = MiddleCenterVector;rt.anchorMax = MiddleCenterVector;rt.pivot = MiddleCenterVector;return;case ERectTransAnchor.MiddleRight:rt.anchorMin = MiddleRightVector;rt.anchorMax = MiddleRightVector;rt.pivot = MiddleRightVector;return;case ERectTransAnchor.BottomLeft:rt.anchorMin = BottomLeftVector;rt.anchorMax = BottomLeftVector;rt.pivot = BottomLeftVector;return;case ERectTransAnchor.BottomCenter:rt.anchorMin = BottomCenterVector;rt.anchorMax = BottomCenterVector;rt.pivot = BottomCenterVector;return;case ERectTransAnchor.BottomRight:rt.anchorMin = BottomRightVector;rt.anchorMax = BottomRightVector;rt.pivot = BottomRightVector;return;}Debug.LogWarning("[RectTransUtility.SetRTAnchorAndPivot] 暂不支持的锚点类型!");}/// <summary>/// 设置背景填充/屏幕填充/// </summary>/// <param name="self"></param>/// <param name="left">离左边的距离(距离为正)</param>/// <param name="bottom">离底部的距离(距离为正)</param>/// <param name="right">离右边的距离(距离为负)</param>/// <param name="top">离顶部的距离(距离为负)</param>/// <returns></returns>public static RectTransform BgFill(this RectTransform self, float left = 0f, float bottom = 0f, float right = 0f, float top = 0f){self.anchorMin = RectTransUtility.BottomLeftVector;self.anchorMax = RectTransUtility.TopRightVector;self.offsetMin = new Vector2(left, bottom);self.offsetMax = new Vector2(right, top);return self;}/// <summary>/// 锚点类型/// </summary>public enum ERectTransAnchor{/// <summary>/// 左上/// </summary>TopLeft = 0,/// <summary>/// 上中/// </summary>TopCenter = 1,/// <summary>/// 右上/// </summary>TopRight = 2,/// <summary>/// 左中/// </summary>MiddleLeft = 3,/// <summary>/// 中心/// </summary>MiddleCenter = 4,/// <summary>/// 右中/// </summary>MiddleRight = 5,/// <summary>/// 左下/// </summary>BottomLeft = 6,/// <summary>/// 下中/// </summary>BottomCenter = 7,/// <summary>/// 右下/// </summary>BottomRight = 8}
}
相关文章:
Unity RectTransUtility工具类
这个工具主要是用于动态生成UI的情况。项目中我们通过配置UI的锚点、位置以及大小(位置、大小都是通过蓝湖看到的),然后通过代码动态生成UI。 大部分情况下只要合理设置锚点,那么生成出来的UI就已经满足了适配的要求。 using UnityEngine;public static…...
React性能优化
三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意:例如组件组合的形式,<Test><Counter></Counter></Test>,即使Test发生了重新渲染,Counter也不会重新渲染。另外使用React这样的库或框架时&a…...
前端开发流程实操:从概念到上线
在前端开发这个充满创意与技术挑战的领域,一个清晰的开发流程是确保项目顺利进行并达到预期效果的关键。 下面就和大家分享一下前端开发的实操流程。 一、项目启动与需求分析 前端开发不是孤立的,它是整个项目的一部分,所以首先要与项目团…...
Metasploit使用
最近在学Metasploit,Metasploit是一个免费的、可下载的渗透测试框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击,是一个集成了渗透测试全流程的渗透工具。 图一 模块:模块组织按照不同的用途分为7种类型的模块 &am…...
Milvus向量数据库05-常见问题整理
Milvus向量数据库05-常见问题整理 1-什么是PipeLine 这张图展示了一个文档处理和搜索系统的架构,主要分为两个部分:Ingestion Pipeline(摄取管道)和 Search Pipeline(搜索管道)。下面是对图中各部分的详细…...
Ruby On Rails 笔记3——表的增删改查
1.Migration Migrations是一种便利的方法,能以重现的方式随时间推移改变数据库schema. 使用Ruby Domain Specific Language (DSL),因此你不用手写SQL,进而使你的schema和changes与数据库独立。 可以把每次migration看作是数据库的一个新“版本”。A schema开始时什么都没有…...
CSS3 动画详解,介绍、实现与应用场景详解
CSS3 动画概述 CSS3 动画是通过 CSS3 的新特性来实现元素的动态变化。与传统的 JavaScript 动画不同,CSS3 动画主要通过 CSS 属性的变化来实现动画效果,具有高效、轻量和易于实现的优点。CSS3 动画通常用于网页的动态交互效果、过渡效果、元素移动、缩放、旋转等场景。 一、…...
Winston-MySQL 使用文档
目录 简介 安装 配置 环境变量配置 日志级别和表配置 创建 Logger 实例 文件传输配置 控制台输出配置 完整代码 使用方法 记录信息日志 记录错误日志 记录警告日志 总结 简介 winston-mysql 是一个为 winston3.x 日志库设计的 MySQL 传输插件,允许你…...
java日期工具: 获取两个时间段的时间段值,Java获得两个日期之间的所有年、月份、日。
文章目录 日期字符串格式化获取两个日期之间的所有日期 (字符串格式)获取两个时间段的时间段值,Java获得两个日期之间的所有年、月份、日。生效时间需要大于当前时间结束时间的月份不能大于当前月份日期字符串格式化 /*** 日期字符串格式化** @param time* @param Format_int…...
【Rive】混合动画
1 混合动画简介 【Rive】动画 中介绍了 Rive 中动画的基础概念和一般动画的制作流程,本文将介绍混合动画的基础概念和一般制作流程。Unity 中混合动画介绍详见→ 【Unity3D】动画混合。 混合动画是指同一时刻多个动画按照一定比例同时执行,这些动画控制的…...
qt应用程序崩溃日志和转储dmp文件对于定位问题
qt应用程序崩溃日志和转储文件对于定位问题 一. DMP 文件包含的信息:二. 分析 DMP 文件的主要方法:三. 生成更详细的 DMP 文件:四. 分析 DMP 文件的注意事项:五. 实用建议:六. 实战 一. DMP 文件包含的信息:…...
Mysql架构
连接层 最上层是一些客户端和连接服务,负责客户端的连接,验证账号密码等授权认证 服务层 主要完成大多数的核心服务功能,对sql进行解析,优化,调用函数,如果是查询操作,有没有缓存等操作操作。所…...
杂发单的单据类型一个参数的逻辑
【核准中可改】被产线滥用了。它们可以这样做,开立一张杂发单,打印出来交领导层签名。单据要交财务做核算的。然后去修改杂发单的材料。以为可以瞒天过海。2个仓库,一个中掉坑里,一个发现了它们的拙劣的手段,上报之后没…...
Linux系统 vim 编辑文件搜索关键字用法
1、首先确保在normal模式下,按ESC后不在insert模式 输入 /test或?test 此时就会匹配 test 字符串,并且高亮显示 2、向前搜索 /字符串:按n匹配下一个目标,按N匹配上一个目标 3、向后搜索 ?字符串:按n匹配上一个目标…...
Vue智慧商城项目
创建项目 vue组件库 — vant-ui(常用于移动端) Vant 2 - 轻量、可靠的移动端组件库 安装vant npm i vantlatest-v2 -S 引入组件 按需导入和全部导入 全部导入 整个组件库的所有组件都导进来,缺点是增加了代码包体积 main.js import…...
Qt Window应用程序去掉控制台窗口
Qt Window应用程序去掉控制台窗口 方式一 set(PROJECT_SOURCESWIN32main.cppmainwindow.hpp )add_executable(Tool-V2${PROJECT_SOURCES} )方式二 set_target_properties(Tool-V2 PROPERTIESMACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE )参考文献: cmake Qt 项目…...
软件测试最新项目合集【商城、外卖、银行、金融等等.......】
项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…...
SAP SD学习笔记18 - 投诉处理4 - 请求书订正依赖,投诉处理流程的总结
上一章讲了 Credit/Debit Memo依赖,Credit/Debit Memo。Credit Memo依赖 本质上是一张受注票;Credit Memo 本质上是一张请求票。 SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo-CSDN博客 本章继续讲本图中的内容…...
VBA批量提取PDF内容的程序
VBA批量提取PDF内容的程序 Sub ExtractPDFText()Dim pdfApp As Acrobat.AcroAppDim pdfDoc As Acrobat.CAcroPDDocDim pdfPage As Acrobat.AcroPDPageDim txtData As StringDim i As IntegerDim filePath As StringDim outputFolder As StringDim outputFileName As String 初…...
C++入门终
目录 一、引用 二、内联函数 三、auto关键字 四、指针空值nullptr 一、引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 类型&引用变量名(对象名)…...
基于VibeVoice和卷积神经网络的语音风格迁移
基于VibeVoice和卷积神经网络的语音风格迁移 1. 引言 你有没有想过,让AI用你喜欢的名人声音来朗读一篇文章?或者用某个特定角色的声音来讲述你的故事?这就是语音风格迁移技术的魅力所在。 传统的语音合成技术虽然已经相当成熟,…...
基于yz-bijini-cosplay的.NET应用开发:AI功能集成实践
基于yz-bijini-cosplay的.NET应用开发:AI功能集成实践 1. 为什么要在.NET应用里集成cosplay风格生成能力 最近有好几位做数字内容平台的朋友问我:“我们给动漫爱好者提供社区服务,能不能在自己的App里直接生成角色同款泳装或Cosplay造型&am…...
Madgwick算法详解:9轴IMU嵌入式姿态解算实战
1. Madgwick姿态解算算法库深度解析:面向9轴IMU的嵌入式实时姿态估计实现1.1 算法背景与工程定位Madgwick姿态解算算法由Sebastian Madgwick于2010年提出,是一种基于梯度下降优化的互补滤波器(Complementary Filter),专…...
猫抓:重构网页资源获取与媒体管理的高效解决方案
猫抓:重构网页资源获取与媒体管理的高效解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代,网页资源获取已成为内容创作者、教育工作者和普通用户的…...
MogFace-large保姆级部署:Ubuntu/CentOS系统GPU驱动适配指南
MogFace-large保姆级部署:Ubuntu/CentOS系统GPU驱动适配指南 1. 前言:为什么选择MogFace-large 如果你正在寻找一个强大的人脸检测解决方案,MogFace-large绝对值得你的关注。这个模型在Wider Face榜单的六项评测中已经霸榜超过一年…...
彻底解决Win10中HP Hotkey UWP Service内存占用过高的终极指南
1. 什么是HP Hotkey UWP Service? HP Hotkey UWP Service是惠普笔记本预装的一个后台服务程序,主要负责管理键盘上的功能快捷键。比如调节屏幕亮度、音量大小、切换飞行模式等操作都需要这个服务支持。它属于通用Windows平台(UWP)…...
PasteMD场景应用:微信聊天记录自动整理为会议纪要
PasteMD场景应用:微信聊天记录自动整理为会议纪要 1. 为什么你的会议纪要总是一团糟? 想象一下这个场景: 下午两点,项目组紧急拉了个微信群聊,大家七嘴八舌讨论了半小时,敲定了五个关键事项和三个责任人。…...
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧
解决AtlasOS系统中Xbox控制器驱动问题的5个实用技巧 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas …...
STM32一键下载电路设计与CH340应用
STM32一键下载电路设计与实现1. 项目概述1.1 功能需求STM32系列微控制器在开发过程中,通常需要通过串口进行程序下载。传统下载方式需要手动操作BOOT0和RESET引脚,过程繁琐且容易出错。本项目设计了一种基于CH340芯片的自动下载电路,通过软件…...
QT实战:用QScrollArea+QListWidget复刻迅雷设置界面(附完整源码)
QT实战:用QScrollAreaQListWidget复刻迅雷设置界面(附完整源码) 在桌面应用开发中,设置界面的设计往往考验着开发者对布局和交互逻辑的掌控能力。迅雷作为一款经典的下载工具,其设置界面以清晰的导航结构和流畅的滚动体…...
