「Unity3D」UGUI运行时设置元素的锚点Anchor,维持元素Rect的显示不变,即待在原处

在编辑器中,通过设置Raw edit mode,可以切换两种,元素锚点的改变模式:

  • 一种是锚点单独改变,即:不开启原始模式,保持原样,改变anchoredPositionsizeDelta
  • 一种是锚点联动显示,即:开启原始模式,不保持原样,不改变anchoredPositionsizeDelta

原理很简单,anchoredPositionsizeDelta都是相对于锚点Anchor的,所以Anchor变动,元素rect保持原样,就需要改变posdelta,而元素rect跟着变动,就可以维持posdelta不变。

那么,在运行时用代码设置anchorMinanchorMax,只有联动显示的模式,即相当于开启原始模式——不改变anchoredPositionsizeDelta,改变元素rect的显示。

但有时候,我们需要只改变锚点,而保持rect显示不变——这是利用锚点适配不同分辨率后的结果——这样其父类的改变,就可以不影响子类的缩放,如:将子类锚点设置为中心点。

解决方案,就是用offsetMinoffsetMax,来反向抵消anchorMinanchorMax的变化,从而维持元素rect的显示不变。

代码实现如下:

/// <summary>
/// Set the anchorMin [v2] without changing the [rectTransform] display.
/// Assume [rectTransform] has a parent, because the root is rarely operated on.
/// </summary>
public static void SetAnchorMinOnly(this RectTransform rectTransform, in Vector2 v2)
{var offsetOriginal = rectTransform.anchorMin - v2;if (offsetOriginal == Vector2.zero){Debug.LogWarning($"[SetAnchorMinOnly]: The [v2 = {v2}] is the same as the [anchorMin].");return;}else if (offsetOriginal.x == 0.0f){Debug.LogWarning($"[SetAnchorMinOnly]: The [v2.x = {v2.x}] is the same as the [anchorMin.x].");rectTransform.SetAnchorMinYOnly(v2.y);return;}else if (offsetOriginal.y == 0.0f){Debug.LogWarning($"[SetAnchorMinOnly]: The [v2.y = {v2.y}] is the same as the [anchorMin.y].");rectTransform.SetAnchorMinXOnly(v2.x);return;}rectTransform.anchorMin = v2;var parentSize          = (rectTransform.parent as RectTransform).rect.size;rectTransform.offsetMin = parentSize * offsetOriginal;
}  /// <summary>
/// Set the anchorMax [v2] without changing the [rectTransform] display.
/// Assume [rectTransform] has a parent, because the root is rarely operated on.
/// </summary>
public static void SetAnchorMaxOnly(this RectTransform rectTransform, in Vector2 v2)
{var offsetOriginal = rectTransform.anchorMax - v2;if (offsetOriginal == Vector2.zero){Debug.LogWarning($"[SetAnchorMaxOnly]: The [v2 = {v2}] is the same as the [anchorMax].");return;}else if (offsetOriginal.x == 0.0f){Debug.LogWarning($"[SetAnchorMaxOnly]: The [v2.x = {v2.x}] is the same as the [anchorMax.x].");rectTransform.SetAnchorMaxYOnly(v2.y);return;}else if (offsetOriginal.y == 0.0f){Debug.LogWarning($"[SetAnchorMaxOnly]: The [v2.y = {v2.y}] is the same as the [anchorMax.y].");rectTransform.SetAnchorMaxXOnly(v2.x);return;}rectTransform.anchorMax = v2;var parentSize          = (rectTransform.parent as RectTransform).rect.size;rectTransform.offsetMax = parentSize * offsetOriginal;
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35805.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离开页面取消请求

前言 上一篇文章我们处理了axios的重复请求问题axios重复请求&#xff0c;今天来说一下如何在离开某个页面的时候将正在发送的请求取消掉 开始 基于上一篇的axios封装&#xff0c;当我们在编写某个页面的请求的时候 import request from /request/index;export const test2…

C++输入输出流第一弹:标准输入输出流 详解(带测试代码)

目录 C输入输出流 流的四种状态&#xff08;重点&#xff09; 标准输入输出流 标准输入流 逗号表达式 1. 逗号表达式的基本规则 示例 2. 图片中的代码分析 关键点解析 3. 常见误区 误区 1&#xff1a;逗号表达式等同于逻辑与 && 误区 2&#xff1a;忽略输入…

Z 轴热膨胀系数:PCB 可靠性的关键因素与选材策略

在电子设备小型化与高性能化的趋势下&#xff0c;PCB&#xff08;印刷电路板&#xff09;的可靠性成为决定产品寿命的核心因素。其中&#xff0c;Z 轴热膨胀系数&#xff08;α2/z-CTE&#xff09;作为板材的关键参数&#xff0c;直接影响多层板的层间结合力、焊点稳定性及整体…

【C++】Virtual function and Polymorphism

《C程序设计基础教程》——刘厚泉&#xff0c;李政伟&#xff0c;二零一三年九月版&#xff0c;学习笔记 文章目录 1、多态性的概念2、虚函数的定义2.1、引入虚函数的原因2.2、虚函数的定义与使用2.3、虚函数的限制 3、抽象类3.1、纯虚函数3.2、抽象类 4、应用实例 更多有趣的代…

图解LLM智能体(LLM Agents):构建与运作机制的全面解析

LLM智能体:构建与运作机制 LLM智能体(LLM Agents)正在迅速普及,似乎逐渐取代了我们熟悉的传统对话式LLM。这些令人惊叹的能力并非凭空而来,而是需要多个组件协同工作。 本文包含超过60张定制插图,将深入探讨LLM智能体的领域、其核心组件以及多智能体框架的工作原理。 文…

自动驾驶背后的数学:特征提取中的线性变换与非线性激活

在上一篇博客「自动驾驶背后的数学&#xff1a;从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数中&#xff0c;我们初步探讨了自动驾驶技术中从传感器数据到控制指令的函数嵌套流程&#xff0c;其中提到了特征提取模块对传感器数据进行线性…

W80x使用WM IoT SDK 2.X 开发(二)驱动tft屏幕

一、硬件准备 开发板依然是官方送的w803&#xff0c;屏幕我的是2.4寸的ST7789 二、查看sdk 1、例程 tft的有这4个程序&#xff0c;我这里直接看最简单的polling吧 首先就是创建一个任务&#xff0c;这跟上一篇点亮led创建任务的步骤一样 继续点进去 2、spi初始化 先看初始…

Linux系统编程(四)--进程概念

文章目录 1.基本概念与基本操作1.1 描述进程-PCB1.2 task_struct-PCB的一种1.3 task_struct内容分类1.4 查看进程1.5 通过系统调用获取进程的PID和PPID1.6 PPID&#xff08;Parent Process ID&#xff09;1.7 通过系统调⽤创建进程-fork初识fork创建子进程使用if进行分流 2.进程…

从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)

最近我在研究 HarmonyOS 音频开发。在音视频领域&#xff0c;鸿蒙的 AudioKit 框架提供了 AVPlayer 和 AudioRenderer 两种方案。AVPlayer 适合快速实现播放功能&#xff0c;而 AudioRenderer 允许更底层的音频处理&#xff0c;适合定制化需求。本文将以一个开发者的自学视角&a…

linux 命令 cd

以下是 Linux 中 cd 命令的详细用法总结&#xff0c;涵盖基础操作、快捷方式和常见场景&#xff1a; 1. 命令功能 cd&#xff08;Change Directory&#xff09;用于切换当前工作目录&#xff0c;是 Linux 文件系统操作中最常用的命令之一。 2. 基本语法 cd [选项] [目录路径…

安卓开发调用本地接口以及设置base_url思路

去年接手pad端开发时曾问过其它组的老安卓一个问题&#xff0c;我们的安卓项目本地开发时能否调用本地接口&#xff0c;回答是否定的。也许是由于通用底座加入的限制&#xff0c;也许是因为太忙了&#xff0c;不想给我解释繁琐的解决方案。 那么在个人PC上玩耍总是能够调用本地…

中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

目录 背景‌一、环境规划与依赖准备‌1. 服务器规划(3节点集群)2. 系统与依赖‌3. Hadoop生态组件版本与下载路径4. 架构图二、Hadoop(HDFS+YARN)安装与配置‌1. 下载与解压(所有节点)2. HDFS高可用配置3. YARN资源配置‌4. 启动Hadoop集群三、MySQL安装与Hive元数据配置…

003 SpringCloud整合-LogStash安装及ELK日志收集

SpringCloud整合-LogStash安装及ELK日志收集 文章目录 SpringCloud整合-LogStash安装及ELK日志收集1.安装ElasticSearch和kibana2.Docker安装logstash1.拉取docker镜像2.创建外部挂载目录3.拷贝容器内部文件到宿主机4.修改外部挂载文件5.运行docker容器 3.整合kibana1.进入kiba…

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用

《TCP/IP网络编程》学习笔记 | Chapter 19&#xff1a;Windows 平台下线程的使用 《TCP/IP网络编程》学习笔记 | Chapter 19&#xff1a;Windows 平台下线程的使用内核对象内核对象的定义内核对象归操作系统所有 基于 Windows 的线程创建进程与线程的关系Windows 中线程的创建方…

【Git学习笔记】Git分支管理策略及其结构原理分析

【Git学习笔记】Git分支管理策略及其结构原理分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Git学习笔记 文章目录 【Git学习笔记】Git分支管理策略及其结构原理分析前言一.合并冲突二. 分支管理策略2.1 分支策略2.2 bug分支2.3 删除临…

STAR Decomposition 一种针对极端事件的信号分解方法 论文精读加复现

STAR 分解&#x1f680; 在时序预测任务中&#xff0c;为了情绪化信号的各种成分&#xff0c;例如趋势信息季节信息等往往都需要对信号进行分解。目前熟知的分解方式有很多种&#xff0c;经验模态分解 EMD 变分模态分解 VMD &#xff0c;还有 集合经验模态分解 EEMD&#xff0c…

大一新生备战蓝桥杯c/c++B组——2024年省赛真题解题+心得分享

一&#xff0c;握手问题 这个题用点像小学奥数&#xff0c;直接手算就行 答案&#xff1a;1204 二&#xff0c;小球反弹 这个题思路简单&#xff0c;但是运行会显示超时。在思考思考&#xff0c;后续补代码。 三&#xff0c;好数 思路一&#xff1a; #include <iostream&…

【最新版】智慧小区物业管理小程序源码+uniapp全开源

一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…

OLE注册是什么?

在Windows操作系统的生态中&#xff0c;‌OLE&#xff08;Object Linking and Embedding&#xff0c;对象链接与嵌入&#xff09;‌ 是一项核心技术&#xff0c;它使得不同应用程序之间能够共享数据和功能。例如&#xff0c;用户可以在Word文档中嵌入一个Excel表格&#xff0c;…

深入理解Linux文件系统:从磁盘结构到inode与挂载

博客总结 核心内容 磁盘物理结构 机械硬盘&#xff08;HDD&#xff09;与固态硬盘&#xff08;SSD&#xff09;的区别&#xff0c;磁盘的组成&#xff08;盘片、磁头、磁道、扇区&#xff09;及工作原理&#xff08;磁头悬浮、高速旋转&#xff09;。 企业级磁盘与桌面级磁盘的…