如图。在项目中需要在文字后面显示一个背景,背景的大小要随文字的多少变动。

遍寻百度未曾获得解决办法,但是从momo的 UGUI研究院之Text文本渐变(十一)发现了继承BaseMeshEffect可以获取字符的网格信息于是使用了如下解决办法。
具体思想:获取网格坐标,正确计算出需要使用的坐标然后,然后改变背景框的大小
我使用版本是5.3.x所以获取网格信息的接口和之前的版本不一样。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;public class TextBkg : BaseMeshEffect
{public GameObject backImage;//层级不重要,在改变大小的时候重新指定了父节点private Rect rect;protected override void Start(){}public override void ModifyMesh(VertexHelper vh){if (!IsActive()) {return;}float topX = 1000000;float topY = 1000000;float bottomX = -1000000;float bottomY = -1000000;var stream = new List<UIVertex>();vh.GetUIVertexStream(stream);foreach (var item in stream){var pos = item.position;if (topX > pos.x) {topX = pos.x;}if (topY > pos.y){topY = pos.y;}if (bottomX < pos.x){bottomX = pos.x;}if (bottomY < pos.y){bottomY = pos.y;}}rect = new Rect(topX, topY, bottomX - topX, bottomY - topY);var rt = GetComponent<RectTransform>();//计算相对于左下角的位置 如果能够保证rt.pivot为0,0则可以不用此步rect.x += rt.pivot.x * rt.rect.size.x;rect.y += rt.pivot.y * rt.rect.size.y;//计算相对于父节点的位置var parentSize = transform.parent.gameObject.GetComponent<RectTransform>().rect.size;rect.x += rt.offsetMin.x + rt.anchorMin.x * parentSize.x;rect.y += rt.offsetMin.y + rt.anchorMin.y * parentSize.y;}void OnGUI(){var backImageRect = backImage.GetComponent<RectTransform>();backImageRect.SetParent(transform.parent);backImageRect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left,   rect.x, rect.width);backImageRect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, rect.y, rect.height);backImage.SetActive(true);}}

另外附上5.3中文字渐变的实现方法:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;[AddComponentMenu("UI/Effects/Gradient")]
public class Gradient : BaseMeshEffect
{[SerializeField]private Color32topColor = Color.white;[SerializeField]private Color32bottomColor = Color.black;//如果需要对单个字符进行渐变处理,只需在在for循环中对单个字的四个顶点进行颜色指定即可public override void ModifyMesh(VertexHelper vh){if (!IsActive()){return;}List<UIVertex> stream = new List<UIVertex>();vh.GetUIVertexStream(stream);float bottomY = 100000;float topY = -100000;foreach (var item in stream){float y = item.position.y;if (y > topY){topY = y;}else if (y < bottomY){bottomY = y;}}var auiv = new UIVertex();float uiElementHeight = topY - bottomY;for (int i = 0; i < vh.currentVertCount; i++){vh.PopulateUIVertex(ref auiv, i);auiv.color = Color32.Lerp(bottomColor, topColor, (auiv.position.y - bottomY) / uiElementHeight);vh.SetUIVertex(auiv, i);}}
}

unity3d ugui 文字背景色相关推荐

  1. unity3d UGUI文字模糊

    使用u3d的UGUI遇到文字模糊的问题 方法:设置Canvas的 Pixel Perfect属性为true 原理:Pixel Perfect开启后该canvas下的ui将不使用抗锯齿渲染,物理像素对齐 ...

  2. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  3. Unity3d UGUI基础控件使用(一)

    转载自:Unity3d UGUI基础控件使用(一) 一:UGUI介绍 UGUI是Unity4.6之后,经过多重测试,推出全新的UI系统,更灵活,快捷,易用的可视化游戏UI开发工具. 由于之前传统的UI ...

  4. Unity3d UGUI 实现底部UI自适应的功能(含工程)

    Unity3d UGUI 实现底部UI自适应的功能(含工程) 前言 UI的自适应常常在项目中使用到,特别手游中,不同比例屏幕的手机,如果能考一套UI自适应显示,能省去不少的开发工作量.这里只是浅浅的讨 ...

  5. Markdown更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中,插入表格等方法

    Markdown更改字体.颜色.大小,设置文字背景色,调整图片大小设置居中,插入表格等方法 Markdown 通过简单标记语法,使普通文本内容具有一定格式.但它本身不支持修改字体.字号与颜色等功能的. ...

  6. [转载]推荐不伤眼睛的文字背景色 VS背景色

    天天使用电脑要主要保护眼睛.下面介绍下不伤眼睛的文字背景色 苹果绿 RGB 204,255,204 #CCFFCC 杏仁黄 rgb 250 249 222 #FAF9DE 青草绿 rgb 227 23 ...

  7. Unity3d Ugui图片上制作点光 、棱形光效果shader,并具有裁切

    Unity3d Ugui图片上制作点光 .棱形光效果 实现的效果可以参考如下图所示 通过shader来实现上述的效果,为了大家的适应性,推荐在unity官方的默认ui shader上更改,我用的是20 ...

  8. 【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

    项目场景:     闲来无事,写了几个关于嵌入式技能大赛的任务.希望对大家有所帮助.本文开发板由百科荣创的龙芯1b开发板支持,关于嵌入式技能大赛的开发板.  LCD显示图片&文字&背景 ...

  9. 推荐不伤眼睛的文字背景色

    天天使用电脑要主要保护眼睛.下面介绍下不伤眼睛的文字背景色 苹果绿 RGB 204,255,204 #CCFFCC 杏仁黄 rgb 250 249 222 #FAF9DE 青草绿 rgb 227 23 ...

最新文章

  1. urlrewrite使用小结
  2. Python 技术篇-使用pygame库展示界面添加图片不显示问题解决办法
  3. 硬核致敬Linux !30岁生日快乐!
  4. objective-c(初始化)
  5. 三. 自动化测试用例设计
  6. 五分钟快速入门 Spring Data JPA
  7. 普通指针到智能指针的转换
  8. vue自学入门-1(Windows下搭建vue环境)
  9. ogg与wav格式转换
  10. 响应式布局——媒体查询
  11. 重试利器之Guava Retrying
  12. html水晶按钮图片,css 如何实现一个水晶按钮的效果呢?
  13. Python 自定义程序打包 --- face_recognition 篇
  14. PDF提取页面方法,如何从PDF文件中提取页面
  15. “嗲”上海文化,女人需要学会的4种气质
  16. czl蒻蒟的一周总结(9.4~9.10)
  17. DES子密钥计算具体步骤
  18. 【愚公系列】2022年10月 微信小程序-电商项目-商品购物车功能实现
  19. .NET Remoting 最简单示例
  20. java双端加密操作 vue+springboot+AES(CBC-ECB) ------------------前传后

热门文章

  1. [备忘]how to use user-provided mentalray shader in Maya?(如何在maya里用自定义mentalray shader)
  2. 乡村“蔬菜快递”直供饭店
  3. python爬取b站弹幕分析_如何爬取b站弹幕文件
  4. 《月赛没写出来的题》
  5. MySQL:replace函数的几种实用场景,一个回答引发热烈讨论
  6. VS报错:fatal error LNK1104: 无法打开文件“kernel32.lib”解决办法
  7. 网站的策划与推广秘诀
  8. 校园正版office安装
  9. Mysql教程(九)---分组
  10. 最新最牛!功能最多的四角号码在线查询