Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现

这篇具有很好参考价值的文章主要介绍了Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题的出现以及解释

前情:在最近做的一个比较大的项目中,客户要求导入各种图片以及文字。在1920X1080的情况下是采用了42号字体,提供项目后得到的反馈却是字体太糊,经询问得知1920X1080分辨率并不是使用在电脑上,而是在屏幕特别大的仿真机上运行,贴近看确实很糊,但是这个项目使用的Text(Legacy)将近200多个,从头更改不切合实际,于是才有了下面的脚本来解决。

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎

2.脚本实现原理

我们都知道Unity的字体是在直接缩放后比较模糊的,所以在使用字体时一般都会等比放大再缩小。

           Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎

                                左(原始字体)                                             右(修正后字体)

修正的方法:将原来的字体的字号夸大N倍,然后宽高也同比例扩大N倍,最后将字体Rect Transform下Scale属性缩小N倍,这样一是能改善清晰度,二就是能保证缩放后的Text仍在原来的位置,不需要其他维护操作(需要注意的是:一定要保证N*当前字体的fontSize<=300,否则字体将会修改后变小)

3.基础脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class textImprovement : MonoBehaviour
{
    //分别获取到缩放前的宽,高,缩放
    private float widthText;
    private float heightText;
    private Vector3 scaleText;
    //放大的比例
    private int scaleNum; 
    void Start()
    {

        scaleNum = 2;
        //获取更改前长,宽,缩放
        widthText = this.GetComponent<RectTransform>().rect.width;
        heightText = this.GetComponent<RectTransform>().rect.height;
        scaleText = this.transform.localScale;
        //更改修改后长,宽,缩放
        this.GetComponent<RectTransform>().sizeDelta = new Vector2(widthText * scaleNum, heightText * scaleNum);
        this.transform.localScale = scaleText / scaleNum;
        //更改修改后字号
        this.transform.GetComponent<Text>().fontSize*=scaleNum;
    }

}

4.注意事项以及已知问题解决方法

1.缩放异常:当字体的长宽非常贴合情况下,有可能会导致缩放有不可控细微差别而导致无法正确显示字体

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎

(缩放倍率3倍,未运行脚本显示正常)

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎

(缩放倍率3倍,运行后字体消失)

解决方法:略微扩大更改后的长宽

  this.GetComponent<RectTransform>().sizeDelta = new Vector2(widthText * scaleNum*1.01f, heightText * scaleNum * 1.01f);

2:缩放倍率(上面脚本的scaleNum)尽量不要太大:10以下即可,倍率为2的情况下2K都是很清晰的(在字体较多并采用高倍率字号缩放的情况下会出现此报错)

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎

                                      (测试变量:字数:3730,基础字号:40,缩放倍率为5)

解决方法:减少缩放倍率 ,同样测试下:三倍缩放倍率报错消失

3:如果你字体上本身带有ContentSizeFitter组件则需要先禁用再启用(当ContentSizeFitter启用时,Rect的长宽则受ContentSizeFitter影响,脚本可能会受影响)

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎\

(属性异常,缩放倍率为3倍,正确结果为Width=176*3=528,Height=44*3=132,但是运行后出现错误结果:272)

解决方法:判断是否含有ContentSizeFitter组件,如果有则先关闭,更改之后再重新打开.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class textImprovement : MonoBehaviour
{
    //分别获取到缩放前的宽,高,缩放
    public float widthText;
    public float heightText;
    private Vector3 scaleText;
    //放大的比例
    private int scaleNum; 
    void Start()
    {
        scaleNum =3;

        if (this.GetComponent<ContentSizeFitter>())
        {
            this.GetComponent<ContentSizeFitter>().enabled = false;
        }
        //获取更改前长,宽,缩放
        widthText = this.GetComponent<RectTransform>().rect.width;
        heightText = this.GetComponent<RectTransform>().rect.height;
        scaleText = this.transform.localScale;
        //更改修改后长,宽,缩放

        this.GetComponent<RectTransform>().sizeDelta = new Vector2(widthText * scaleNum, heightText * scaleNum);
        this.transform.localScale = scaleText / scaleNum;
        //更改修改后字号
        this.transform.GetComponent<Text>().fontSize*=scaleNum;
        if (this.GetComponent<ContentSizeFitter>())
        {
            this.GetComponent<ContentSizeFitter>().enabled = true;
        }
    }

}

5.优化后脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class textImprovement : MonoBehaviour
{
    //分别获取到缩放前的宽,高,缩放
    public float widthText;
    public float heightText;
    private Vector3 scaleText;
    //放大的比例
    private int scaleNum; 
    void Start()
    {
        if (this.GetComponent<Text>())
        {
            scaleNum = 3;
            if (this.GetComponent<ContentSizeFitter>())
            {
                this.GetComponent<ContentSizeFitter>().enabled = false;
            }
            //获取更改前长,宽,缩放
            widthText = this.GetComponent<RectTransform>().rect.width;
            heightText = this.GetComponent<RectTransform>().rect.height;
            scaleText = this.transform.localScale;
            //更改修改后长,宽,缩放

            this.GetComponent<RectTransform>().sizeDelta = new Vector2(widthText * scaleNum * 1.01f, heightText * scaleNum * 1.01f);

            this.transform.localScale = scaleText / scaleNum;
            Debug.Log(this.transform.localScale.x);
            //更改修改后字号
            this.transform.GetComponent<Text>().fontSize *= scaleNum;
            if (this.GetComponent<ContentSizeFitter>())
            {
                this.GetComponent<ContentSizeFitter>().enabled = true;
            }
        }
    }

}

使用方法:直接赋予需要改善的Text组件此脚本,如果需要大量更改则在Hierarchy面板搜索全部Text,Ctrl+A全选并赋予脚本(点击放大镜并在放大镜下拉菜单选择Type)

Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-822132.html

到了这里,关于Unity通过改变文本Rect长宽以及缩放来改善Text(Legacy)的清晰度思路,操作以及代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PointNeXt: 通过改进的训练以及模型缩放策略重新探究PointNet++

    原文链接:https://www.techbeat.net/article-info?id=3669 作者:Gordon ::: 论文链接: https://arxiv.org/abs/2206.04670 代码链接(已开源): https://github.com/guochengqian/pointnext PointNet++ 是点云理解领域最有影响力的神经网络模型之一。虽然PointNet++ 在性能上已被一些最新的方法如PointMLP和Point Tran

    2024年02月04日
    浏览(34)
  • Python使用Matplotlib通过鼠标交互实现缩放、移动以及线上点坐标显示功能

    参考文章: 缩放:python 桌面软件开发-matplotlib画图鼠标缩放拖动_matplotlib缩放-CSDN博客 获取点坐标参考的文章忘了,侵权即删

    2024年04月13日
    浏览(30)
  • idea如何设置通过鼠标去改变字体的大小,idea如何进行作者署名以及时间显示

    目录 一、idea如何设置通过鼠标去改变字体的大小 步骤: 1、缩小字体  2、放大字体 二、idea如何进行作者署名以及时间显示 步骤:  设置settings——键盘设置keymap——缩小字体decrease——右击decrease font size添加鼠标快捷键add mouse shortcut——ctrl+鼠标下滑缩小字体(当然你可以上

    2024年02月14日
    浏览(42)
  • [unity3d][通过代码]让模型移动,动态改变模型位置,点对点移动

    阅读时长 : 10分钟 阅读难度 : 初级 阅读收获 : 可以在unity自由的完成点对点的移动过程 例子地址 : https://gitee.com/asiworld/unity3d-basic-function-code 直接修改 gameobject 的 position 内容,当然物体实际存在的有localposition和worldposition,具体要使用哪个要看需求是怎么样的 在hierarchy视图中创

    2023年04月24日
    浏览(37)
  • PHP实践:获取网络上图片的长宽以及图片类型

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🏆另有专栏PHP入门基础教程,希望各位大佬

    2024年02月11日
    浏览(34)
  • Unity Scroll Rect滚动到底部

    在使用ScrollView的时候,有这么一个需求,就是ScrollView的内容中填充的是一个动态的列表,在新添加元素的时候,需要将滚动列表自动定位到最后一个。 1、修改Scrollbar Vertical的value 值为0时,位于底部,值为1时,位于顶部。 2、修改ScrollRect的verticalNormalizedPosition 值为0时,位于

    2023年04月08日
    浏览(32)
  • Unity --- UGUI --- Rect Transform(矩形变换) --- 锚点及其相关应用

      1.所有的UI物体都没有Transform组件,取而代之的是Transform组件的派生 --- Rect Transform(矩形变换) 2.Rect Transform和Transform一样都有旋转和缩放,它两之间的区别是: Rect Transform多了:a.Pibot轴心点;b.Anchors 锚点;c.宽度,高度和略加改变后的x,y,z 3.Pos x ,Pos y , Pos z 这三个值所表示的

    2023年04月23日
    浏览(21)
  • 显示器的长宽比主要有哪几种比例,以及他们对应的分辨率?

    目录 1. 普屏 5:4 4:3 2. 宽屏 16:10 16:9 5:4 1280×1024(17吋、19吋) 4:3 800×600 1024×768(17吋CRT、15吋LCD) 1280×960 1400×1050(20吋) 1600×1200(20、21、22吋LCD) 1920×1440 2048×1536(高端CRT显示器) 16:10 1280×800(13.3、14.1、15.4吋笔记本) 1440×900(17.1吋、19吋)、 1680×1050(20吋、

    2024年02月14日
    浏览(39)
  • 通过开源端点可见性改善网络安全响应

    在当今复杂的数字环境中,企业内的许多不同端点(从数据中心的服务器到咖啡店的笔记本电脑)创建了巨大且多样化的攻击面。每个设备都存在网络安全威胁的机会,每个设备都有其独特的特征和复杂性。攻击者使用的多种攻击媒介不仅是一个挑战,而且是一个不断发展的

    2024年01月19日
    浏览(29)
  • 【虚幻4】对物体进行缩放而不改变材质的比例

    我们在初学虚幻4的时候总有很多问题,比如,你想放大一个物体,但放大以后,你发现材质也跟着放大了,原来的一个小方格变成好大好大一个方格,这样看起来很怪。所以今天教大家一种简单的方法,让缩放不改变材质的比例。 方法:我们可以先对物体进行正常的缩放。

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包