【Unity】QFramework通用背包系统优化:TipPanel优化

前言

在学习凉鞋老师的课程《QFramework系统设计:通用背包系统》第五章时,笔者对物品提示TipPanel界面进行了一些优化。

优化内容包括:

  • 解决闪烁问题
  • 跟随鼠标移动
  • 自适应界面大小
  • 生成位置优化

效果还是蛮丝滑的:
请添加图片描述

解决闪烁问题

由于原代码逻辑是:当鼠标检测到Slot UI时,显示Tips;当未检测到Slot UI时,关闭Tips。
于是当Tips界面叠在Slot UI上时,鼠标移动到重叠部分便会反复触发以上逻辑。

此时只需要将Tips界面的Raycast Target关闭就可以了(如果需要Tips界面有交互,可以考虑其他解决方案)。

跟随鼠标移动

这个比较简单,就是将生成部分的代码封装成方法,在Update()方法中调用即可。

自适应页面大小

笔者给Tips界面添加了ContentSizeFitter组件,使其可以随自身内容改变大小。
但还是遇到一些问题,比如从一个Slot UI移动到另一个Slot UI上时,Tips界面的大小不会立即发生变化以适应新的大小。

原因是ContentSizeFitter的调整发生在布局的重计算阶段,在连续快速地更换内容时可能不会立即反映最新的内容变化。
这时候就需要使用LayoutRebuilder.ForceRebuildLayoutImmediate()方法,立即强制重建布局。

改为默认生成到鼠标的左下方

当鼠标靠近屏幕左边界时,生成到右下方;当鼠标靠近屏幕下边界时,生成到左上方;以此类推。

代码实现

using UnityEngine;
using UnityEngine.UI;namespace QFramework
{public class UIItemTip : MonoBehaviour{public GameObject TipPanel;public Image Icon;public Text NameText;public Text DescriptionText;public Text AttributeText;public Text IDText;private static UIItemTip mDefault;private void Awake(){mDefault = this;}private void Start(){mDefault.TipPanel.Hide();if (AttributeText.text == "")AttributeText.Hide();elseAttributeText.Show();if (IDText.text == "")IDText.Hide();elseIDText.Show();}private void Update(){UpdatePosition();}public static void Show(UISlot slot){if (slot.Data.Item != null){mDefault.Icon.sprite = slot.Data.Item.GetIcon;mDefault.NameText.text = slot.Data.Item.GetName;mDefault.DescriptionText.text = slot.Data.Item.GetDescription;mDefault.TipPanel.Show();UpdatePosition();}}public static void Hide(){mDefault.TipPanel.Hide();}public static void UpdatePosition(){Vector3 mousePos = Input.mousePosition;Vector3[] corners = new Vector3[4];RectTransform rectTrans = mDefault.TipPanel.transform as RectTransform;// 更新TipPanel内容后,强制刷新布局LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans);// 获取界面的四个角点rectTrans.GetWorldCorners(corners);float width = corners[3].x - corners[0].x;float height = corners[1].y - corners[0].y;// 根据鼠标和屏幕的相对位置,调整生成 TipPanel 的位置if (mousePos.y < height && mousePos.x > width)rectTrans.position = mousePos + 0.5f * height * Vector3.up + 0.5f * width * Vector3.left;else if (mousePos.y > height && mousePos.x < width)rectTrans.position = mousePos + 0.5f * height * Vector3.down + 0.5f * width * Vector3.right;else if (mousePos.y < height && mousePos.x < width)rectTrans.position = mousePos + 0.5f * height * Vector3.up + 0.5f * width * Vector3.right;elserectTrans.position = mousePos + 0.5f * height * Vector3.down + 0.5f * width * Vector3.left;// 0.51f 多了0.01f,使Tips和鼠标保持一小段距离}private void OnDestroy(){mDefault = null;}}
}

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

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

相关文章

[linux]:匿名管道和命名管道(什么是管道,怎么创建管道(函数),匿名管道和命名管道的区别,代码例子)

目录 一、匿名管道 1.什么是管道&#xff1f;什么是匿名管道&#xff1f; 2.怎么创建匿名管道&#xff08;函数&#xff09; 3.匿名管道的4种情况 4.匿名管道有5种特性 5.怎么使用匿名管道&#xff1f;匿名管道有什么用&#xff1f;&#xff08;例子&#xff09; 二、命名…

yolov5 torch转tensorrt详解【推荐】

转化函数 # 可以在https://github.com/ultralytics/yolov5/blob/master/export.py里面找到 def export_engine(model, im, file, half, dynamic, simplify, workspace4, verboseFalse, prefixcolorstr(TensorRT:)):# YOLOv5 TensorRT export https://developer.nvidia.com/ten…

MVCC多版本并发控制

MVCC mvcc是多版本并发控制。维护一个数据的多个版本&#xff0c;使读写没有冲突 隐式字段 DB_TRX_ID:最近修改事务id&#xff0c;记录插入这条记录或最后一次修改该记录的事务id DB_ROLL_PTR:回滚指针&#xff0c;指向这条记录的上一个版本&#xff0c;用于配合undo log&…

筛法思想的题目

这道题目比较经典&#xff0c;或者说这种思想比较经典。 这种筛法的思想。 我们正着想对于每一个 n 、 n − 1 、 n − 2 、 . . . 、 2 、 1 n、 n-1、n-2、...、2、1 n、n−1、n−2、...、2、1都分解一遍质因数显然是来不及的时间复杂度达到 O ( n n ) O(n \sqrt{n}) O(nn ​…

Open CASCADE学习|点和曲线的相互转化

目录 1、把曲线离散成点 1.1按数量离散 1.2按长度离散 1.3按弦高离散 2、由点合成曲线 2.1B样条插值 2.2B样条近似 1、把曲线离散成点 计算机图形学中绘制曲线&#xff0c;无论是绘制参数曲线还是非参数曲线&#xff0c;都需要先将参数曲线进行离散化&#xff0c;通过离…

LayUI中表格树折叠 --

1、先将插件源码进行下载&#xff0c;新建 tableTree.js 文件&#xff0c;将源码放进去 2、将 tableTree.js 文件 配置之后&#xff0c;在需要使用的页面进行引入&#xff1a; layui.define(["tableTree"],function (exports) {var tableTree layui.tableTree;// …

2024年【天津市安全员B证】模拟试题及天津市安全员B证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员B证模拟试题是安全生产模拟考试一点通生成的&#xff0c;天津市安全员B证证模拟考试题库是根据天津市安全员B证最新版教材汇编出天津市安全员B证仿真模拟考试。2024年【天津市安全员B证】模拟试题及天津市…

蓝桥杯官网练习题(大臣的旅费)

问题描述 很久以前&#xff0c;T 王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&#xff0c;使得任何一个大城市都能从…

Redis——缓存设计与优化

讲解Redis的缓存设计与优化&#xff0c;以及在生产环境中遇到的Redis常见问题&#xff0c;例如缓存雪崩和缓存穿透&#xff0c;还讲解了相关问题的解决方案。 1、Redis缓存的优点和缺点 1.1、缓存优点&#xff1a; 高速读写&#xff1a;Redis可以帮助解决由于数据库压力造成…

安全的接口访问策略

渗透测试 一、Token与签名 一般客户端和服务端的设计过程中&#xff0c;大部分分为有状态和无状态接口。 一般用户登录状态下&#xff0c;判断用户是否有权限或者能否请求接口&#xff0c;都是根据用户登录成功后&#xff0c;服务端授予的token进行控制的。 但并不是说有了tok…

【LeetCode】332. 重新安排行程(困难)——代码随想录算法训练营Day30

题目链接&#xff1a;332. 重新安排行程 题目描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&a…

椭圆曲线加密

椭圆曲线加密&#xff08;Elliptic Curve Cryptography&#xff0c;ECC&#xff09;是一种公钥加密算法&#xff0c;它基于椭圆曲线上的数学运算来实现安全的通信。 以下是椭圆曲线加密的基本过程&#xff1a; 1. 参数选择&#xff1a;选择一个适当的椭圆曲线和一个基础点。椭…

C#(C Sharp)学习笔记_运算符与布尔类型【四】

算术运算符 所谓算术运算符&#xff1a;就是现实中的加减乘除之类的符号&#xff0c;但在编程语言中&#xff0c;它们又有不同于现实的语法。下面就介绍一下算术运算符的各种符号包括计算案例。 运算符描述实例(设a为4&#xff1b;b为2)把两个操作数相加A B 将得到 6-从第一…

JVM-运行时数据区程序计数器

运行时数据区 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。《Java虚拟机规范》中规定了每一部分的作用。 程序计数器的定义 程序计数器&#xff08;Program Counter Register&#xff09;也叫PC寄存器&#xff0c;每个线程会通过程序计数器…

1.3 Verilog 环境搭建详解教程

学习 Verilog 做仿真时&#xff0c;可选择不同仿真环境。FPGA 开发环境有 Xilinx 公司的 ISE&#xff08;目前已停止更新&#xff09;&#xff0c;VIVADO&#xff1b;因特尔公司的 Quartus II&#xff1b;ASIC 开发环境有 Synopsys 公司的 VCS &#xff1b;很多人也在用 Icarus…

PyTorch 2.2 中文官方教程(三)

使用 PyTorch 构建模型 原文&#xff1a;pytorch.org/tutorials/beginner/introyt/modelsyt_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整示例代码 介绍 || 张量 || 自动微分 || 构建模型 || TensorBoard 支持 || 训练模型 ||…

一些学习的总结帖子

一、Spring 参考链接1 参考链接2 参考链接3 二、多线程 并发的理解 参考链接1 三、redis 参考链接1 四、rabbitmq 五、数据库 数据库事务的概念及其原理 数据库事务 六、other 添加链接描述

Why React Doesn‘t Need jQuery?

a revolution library – 一个革命性的库greatly simplified tasks such as … – 极大的简化了…任务DOM manipulation – DOM操作event handling – 事件处理animation creation – 动画创建Ajax request – Ajax请求with the rise of modern front frameworks – 随着现代前…

Java风暴:打造高效作家信息管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Web项目利用EasyExcel实现Excel的导出操作

早期Java使用的一些解析&#xff0c;到处excel的框架存在种种问题被遗弃&#xff0c;现在使用阿里巴巴所提供的EasyExcel已成为一种主流&#xff0c;本篇将详细介绍该功能在Web项目中如何实际应用。 详细操作文档&#xff1a;写Excel | Easy Excel 一、项目演示 在后台管理界…