游戏开发unity UGUI知识系列:计算单行文本的宽度

2023-11-02

在Text使用了ContentSizeFitter情况下,对text设置新的字符串后,如果我们想要在当前帧获取宽度时,通过RectTransform.sizeDelta.x获取的宽度经常是旧字符串时的长度。所以需要自行计算改变文本后text的宽度

 

下述代码参考:

public class TextContent : MonoBehaviour
{
    public Text TxtCalcWidth;

    private void FailGetTextWidthInCurFrame(Text text)
    {
        RectTransform rt = text.rectTransform;
        float width = rt.sizeDelta.x;
        Debug.Log("width = " + width.ToString());
    }

    private IEnumerator GetTextWidthInNextFrame(Text text)
    {
        yield return null;
        RectTransform rt = text.rectTransform;
        float width = rt.sizeDelta.x;
        Debug.Log("width = " + width.ToString());
    }

    private void CalcTextWidth(Text text)
    {
        TextGenerator tg = text.cachedTextGeneratorForLayout;
        TextGenerationSettings setting = text.GetGenerationSettings(Vector2.zero);
        float width = tg.GetPreferredWidth(text.text, setting) / text.pixelsPerUnit;
        Debug.Log("width = " + width.ToString());
    }

    public void OnBtnCalcWidthClick()
    {
        string text = "dsfasfs";
        TxtCalcWidth.text = text;
        //CalcTextWidth(TxtCalcWidth);
        //StartCoroutine(GetTextWidthInNextFrame(TxtCalcWidth));
        FailGetTextWidthInCurFrame(TxtCalcWidth);
    }
}

有两种方式获取文本宽度:

    CalcTextWidth为在当前帧计算新文本的宽度

    GetTextWidthInNextFrame为下一帧获取文本的宽度(因为使用了layout,sizeDelta的值在一帧中的代码逻辑执行完后才会改变,所以可以在下一帧去获取sizeDelta当做新文本的宽度)

经检验,两个方法获取的文本宽度是一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏开发unity UGUI知识系列:计算单行文本的宽度 的相关文章

  • 树实现客户端红点系统

    树实现客户端红点系统 红点系统总览 demo 设计 代码设 引用 https zhuanlan zhihu com p 85978429 红点系统总览 如上图所示 规划红点系统的时候 我们将整个系统分为独立的三个部分 结构层 驱动层和表现层
  • VS2017调试unity没有解决方案

    1 VS2017之前的版本调试unity 需要下载 Visual Studio Tools for Unity 2 VS2017内置了Visual Studio Tools for Unity 3 首先打开 帮助 gt 关于 已安装程序中查
  • Animator之RootMotion

    Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移 这个就是通过 applyRootMotion 来达成
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • Unity3D中通过代码修改子物体层级的顺序

    今天有个同事问我如何在程序中修改子物体的层级关系来改变遮挡关系 我给他敲出来一句代码 UI的层级关系是通过渲染表现出来的 在canvas下的物体 排序越靠前的越先被渲染 这样一来就会 被后来渲染的遮挡 总结一下有三句代码是修改子物体的层级的
  • Unity3D射线检测

    射线检测主要用于像子弹是否打中物体 捡取物品等情况 本来面向百度想找例子看看 不过没找到合适的 还是自己总结尝试吧 以下测试Unity3D版本 2017 4 2f2 射线的检测步骤如下 1 Ray 这个类为了产生一个射线 如果我们想要场景中
  • Unity 调用系统键盘

    using System Diagnostics using UnityEngine public class KeyboardEvent MonoBehaviour private Process keyboard
  • 《Unity Shader入门精要》彩图版免费分享~~~~~

    这书很多地方都要币或者要钱 这里就免费分享了 下面是网盘链接 顺手点个赞或者评论一波呗 下载链接 链接 https pan baidu com s 137Y1nkB6h8HIvKOfwFPnbQ 提取码 f8dw 顺手点个赞 蟹蟹蟹蟹
  • unity3d实现简单的打飞碟游戏

    游戏内容 游戏有n个round 每个round发射10次trial 每个trial的飞碟都可能不同 包括速度角度得分等 使用鼠标进行射击 点中即表示射击成功 游戏要求 使用带缓存的工厂模式来管理飞碟的生产与再利用 工厂使用单例模式 游戏的设
  • Unity+Pico 手柄按键控制

    一 定义手柄按键API 1 InputDevices GetDeviceAtXRNode 通过XRNode获取对应的设备 2 XRNode是一个枚举类型 包含LeftEye RightEye CenterEye Head LeftHand
  • Unity编辑器界面概述

    了解界面 如果您对编辑器界面没有非常地了解 那么请花一些时间查看并熟悉 Editor 编辑器 界面 Editor 主窗口由选项卡式窗口组成 这些窗口可重新排列 因此 Editor 的外观可能因项目或者开发者而异 具体取决于个人偏好 Wind
  • Unity_如何使相机视角一直跟随角色移动

    实例代码如下 using System Collections using System Collections Generic using UnityEngine 相机视角跟踪 public class FollowTarget Mono
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • unity中的一些快捷键(齐)

    重命名的快捷键是F2 ALT 鼠标左键点击Hierarchy对象可以展开和收起对象的所有子物体 SHIFT 空格 可以对当前窗口进行放大缩小
  • [3dsMax]2018版下拉菜单项的子菜单无法选中

    软件自身问题 安装更新补丁即可解决 不想更新补丁也可以使用键盘的方向键进行选中 补丁百度云链接 https pan baidu com s 1LDxRFwQnR0GSONuz7wcEfA 提取码 6gpk
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity中UI组件

    一 Canvers 画布组件 Canvers下面是添加Button和Image组件 Rect Transform 1 Position 坐标位置 2 Width Height 高宽尺寸 3 Anchors 锚点 4 Pivot中心点 即UI
  • Mecanim Any State

    Any State表示任意状态 任意状态是 一个一直存在的特殊状态 他的存在是为了保证你在无意转移至某个你当前正处于的特殊状态而准备的 为你的状态机中的每个状态设置相同的对外转移是一个快捷的方式 假如有Walk Run Fly Die这四个
  • java中Keytool的使用总结

    java中Keytool的使用总结 2011 02 26 15 30 15 分类 在申请Android Map API Key的时候使用到了java中Keytool 下面转一篇介绍java中Keytool的文章 http blog csdn
  • Unity3D的四种坐标系

    1 World Space 世界坐标 我们在场景中添加物体 如 Cube 他们都是以世界坐标显示在场景中的 transform position可以获得该位置坐标 2 Screen Space 屏幕坐标 以像素来定义的 以屏幕的左下角为 0

随机推荐

  • 第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞

    写在前面 本文仅供参考学习 请勿用作它途 禁止转载 在开始学爬虫时 学习了csdn博客专家 id 明天依旧可好 柯尊柏 实战项目二 实现CSDN自动点赞 的文章 文章介绍了通过Python和selenium模块实现csdn指定文章点赞的过程
  • argis sde 服务连接,arcgis9.3版本场合,arcgis10.2采用直接连接数据库

    1 arc gis 9 3 sde 需要创建 服务 即需要安装arcsde 2 台 或者 多台 机器通过服务连接 2 通过服务连接数据服务
  • JMeter websocket接口测试

    前言 在一个网站中 很多数据需要即时更新 比如期货交易类的用户资产 在以前 这种功能的实现一般使用http轮询 即客户端用定时任务每隔一段时间向服务器发送查询请求来获取最新值 这种方式的弊端显而易见 有可能造成数据更新不及时 如果前端轮询频
  • 黑马程序员----职工管理系统(c++)

    目录 一 项目概要 二 代码 三 演示效果 四 项目注意点 五 一点点感悟 一 项目概要 1 面向角色 普通员工 经理和老板 2 主要功能 增加员工信息 显示员工信息 删除离职员工信息 修改员工信息 查找员工信息 按照编号排序 清空所有文档
  • PVE虚拟化平台之创建虚拟机流程

    PVE虚拟化平台之创建虚拟机流程 一 PVE介绍今天 2022 年 11 月 17 日 有236篇文章可用 二 登录PVE平台 三 登录PVE系统检查环境 1 进入PVE底层系统的shell命令终端 2 检查系统版本 3 检查本地磁盘存储
  • SQLMAP中文翻译详细解读

    H 1 5 5 stable V http sqlmap org 使用示例 python3 sqlmap 选项 选项 h help 显示基础帮助信息然后退出 hh 显示更详细的帮助信息然后退出 version 显示程序版本号然后退出 v V
  • JavaScript:异步编程

    异步编程是一种编程模式 JavaScript 是单线程的 只有一个线程可以执行代码 这意味着 所有代码都只能在一个线程中按顺序执行 这很容易导致代码执行的阻塞 代码的每一个语句都需要被执行 为了完成某个计算任务需要一定的执行时间 不同任务的
  • js判断设备是PC端还是移动端

    方法一 function IsPC var userAgentInfo navigator userAgent var Agents Android iPhone SymbianOS Windows Phone iPad iPod var
  • 你知道C语言中的C是怎么来的吗?

    为什么是C C语言中的C怎么来的 各位 我们天天讲C语言 学C语言 那你知道C语言中的C是怎么来的吗 今天我们就给大家简单讲一下 其实这也要从C语言的发展史或者由来说起了 让我们先来看个小视频吧 海风教育退费 海风教育在线辅导0元一对一试听
  • 计算一个3位数各个位数之和

    1 输入一个三位数 n input 输入一个三位数 将这个三位数转换为整型 n int n 2 先除以一百得出百位数 b100 n 100 3 取余一百除以十得出十位数 b10 n 10 10 4 取余十得出个位数 b1 n 10 5 求和
  • Python使用smtplib库,实现自动发送邮件源码demo

    发送多种类型的邮件 import smtplib from email mime text import MIMEText 发送多种类型的邮件 from email mime multipart import MIMEMultipart m
  • mysql不用窗口函数,后面加一列序号

    前言 在后端开发中最常用的数据库还是比较稳定的5 8 而窗口函数是只有在mysql8以上才有的 然后在开发中有个需要排序序号的需求 翻找资料 问AI得出结论可以实现 列出方法 如果你使用的是MySQL 5 7版本 而没有窗口函数的功能 你仍
  • 数据结构作业3

    问题 S 算法2 25 有序单链表删除重复元素 附加代码模式 内存限制 128 MB时间限制 1 000 S 评测方式 文本比较命题人 2011014323 提交 3365解决 1604 返回比赛提交提交记录侧边提交 题目描述 根据一个递增
  • 如何开发一个音视频播放器(ffmpeg3.2+sdl2.0)

    如何开发一个音视频播放器 ffmpeg3 2 SDL2 0 前言 创建一个音视频播放器的步骤 一 播放音频 二 播放视频 三 音视频同步 源码分析 一 正式开始前的准备工作 二 配置音视频基本参数 获取文件基本信息 初始化音频参数 初始化视
  • 【深入浅出深度学习】3、线性代数基础

    一 标量 向量 矩阵 张量 标量 scalar 一个数值 最小的计算单元 向量 vector 由多个标量组成的一维数组 矩阵 matrix 由标量数据构成的二维数组 张量 tensor 深度学习领域 很多时候数据都是高于二维的 所以需要一种
  • sqli-labs————Less-26(绕空格、/*、#等)

    Less 26 从这里的提示 我们可以看出这一关过滤了空格 我们可以查看源代码 看看它的过滤机制 function blacklist id id preg replace or i id strip out OR non case sen
  • html,实现心动的表白代码

    今天看到多年年前的大佬写的 js表白代码 觉得不错 分析给大家 代码在这宫里 Love
  • python---------xpath提取数据------打破局限

    作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 qin laoda Gitee com 目录 为什么要学习XPATH和LXML类库 什么是XPATH 认识XML XML的节点关系 常 节点选择 具 节点选择语法 节点修饰语法 选择未知
  • ThinkPHP5之多语言切换

    T和inkPHP5的多语言切换是个人比较欣赏的一点 真是佩服设计者 怎么想到多语言切换的 在实际开发过程中 往往不是单一语言的项目 涉及多语言的使用 这时需要多语言切换 关键函数 Lang setAllowLangList 多语言的切换函数
  • 游戏开发unity UGUI知识系列:计算单行文本的宽度

    在Text使用了ContentSizeFitter情况下 对text设置新的字符串后 如果我们想要在当前帧获取宽度时 通过RectTransform sizeDelta x获取的宽度经常是旧字符串时的长度 所以需要自行计算改变文本后text