2017-04-23 12:00:15 yu__jiaoshou 阅读数 6147

Unity 3D - UGUI 设置Text组件文本颜色 :

效果图 :

这里写图片描述

这里写图片描述

  • 通过颜色赋值
<color=blue>艾利的天镜</color>
  • 通过颜色表色码赋值
    注意 : 要加# .
<color=#5cacee>玩具</color> 

unity提供下列颜色可以选择 :

这里写图片描述

颜色色码表 :

这里写图片描述

2015-04-16 09:57:32 u012842807 阅读数 10730

很所的时候我们想改变一串字符串中某几个字体的颜色 那该如何实现这小功能呢?

其实很简单 就是在要改变字体两边加上如下的玩意 。


UGUI代码改变字体的颜色 与NGUI不同,这里就不多说 直接上例子。

UGUI中: <color=#0000ff>要改变的字的颜色</color>  

NGUI中:[0000ff]要改变的字体颜色[-]



我室友的是一个技术大神
这里分享他的网站 http://www.feehi.com 有需求的大家可以进去看看 这是他的博客网http://blog.feehi.com/

2017-09-14 13:06:21 JeterPong 阅读数 2362

前言:
在某句话或某个段落中,为了彰显某个词的特性,起强调作用,往往会对这个词做一些特殊处理,让其突出显示,比如添加颜色或加粗显示。

在Unity3D 中,通常会通过改变文本的颜色,来改变字体的颜色。但如果是要在这个文本的字符串的某个词 改变颜色。Text 组件的color 属性是实现不了的。(至少我还没发现有实现的方法~)。

在字符串中,让部分字符添加颜色:

<color=#ff0000ff>" + 12 + "</color>

如:把下面的”测试”添加颜色
“这是个测试案例”

"这是个<color=#ff0000ff>测试</color>案例"

test1

给字体加粗:

"这是个<b>测试</b>案例"

test2

添加颜色,且加粗显示:

"这是个<color=#ff0000ff><b>测试</b></color>案例"

test3

这样就可以给字符串的某个词或某句话,添加颜色着重显示。达到效果

2018-01-05 16:20:14 ls9512 阅读数 1142

Unity 中的 Rich Text

Unity中的富文本格式,通过类似html的标签语言来实现,支持常见的加粗,倾斜,颜色等,可以应用于GUI、UGUI和Debug日志输出。

Rich Text 的使用

原文: We are <b><i>definitely not</i></b> amused
显示: We are definitely not amused

具体使用方法大多数人应该都已经知道了,详见官方API文档。[UnityAPI - Rich Text]

如上所示,如果文本量很大,并且内容格式很复杂的情况下,原文的可阅读性会变得很差,而且,标签的配对层层嵌套后,很容易发生错误,虽然不是十分必要也不是什么非常强大的功能,但我们还是来尝试对它进行一下封装,让富文本标签用起来更简单一点。

代码实现

  • MarkupAdapter.cs
    标签装配器,用于给指定内容拼接指定的标签。
    public class MarkupAdapter
    {
        protected static StringBuilder StringBuilder = new StringBuilder();

        public string LeftMark { get; }
        public string RightMark { get; }

        public MarkupAdapter(string leftMark, string rightMark)
        {
            LeftMark = leftMark;
            RightMark = rightMark;
        }

        public string ToString(string str)
        {
            StringBuilder.Remove(0, StringBuilder.Length);
            StringBuilder.Append(LeftMark);
            StringBuilder.Append(str);
            StringBuilder.Append(RightMark);
            return StringBuilder.ToString();
        }
    }
  • Markup.cs
    为了使用方便,将所有接口都写在 Markup 类中,但不同的标签实现方式有所区别,写在一起代码比较冗长,故使用partial将代码分成多个文件。
    public static partial class Markup 
    {
        public static string Create(string str, params MarkupAdapter[] markups) 
        {
            for (var i = 0; i < markups.Length; i++)
            {
                var markup = markups[i];
                str = markup.ToString(str);
            }
            return str;
        }
    }
  • MarkupStyle.cs
    样式标签相关的接口:
    public static partial class Markup
    {
        public static MarkupAdapter Blod = new MarkupAdapter("<b>", "</b>");

        public static MarkupAdapter Italic = new MarkupAdapter("<i>", "</i>");

        public static MarkupAdapter Size(int size)
        {
            size = size < 1 ? 1 : size;
            return new MarkupAdapter("<size=" + size + ">", "</size>");
        }

        public static MarkupAdapter Material(int index) 
        {
            index = index < 0 ? 0 : index;
            return new MarkupAdapter("<material=" + index + ">", "</material>");
        }

        public static MarkupAdapter Quad(int materialIndex, int size, float x, float y, float width, float height)
        {
            materialIndex = materialIndex < 0 ? 0 : materialIndex;
            return new MarkupAdapter(
                "<quad material=" + materialIndex +
                " size=" + size +
                " x=" + x +
                " y=" + y +
                " width=" + width +
                " height=" + height + ">",
                "</material>");
        }

        public static MarkupAdapter Quad(string name, int size, float x, float y, float width, float height)
        {
            size = size < 0 ? 0 : size;
            return new MarkupAdapter(
                "<quad name=" + name +
                " size=" + size +
                " x=" + x +
                " y=" + y +
                " width=" + width +
                " height=" + height + ">",
                "</quad>");
        }
    }
  • MarkupColor.cs
    颜色标签相关的接口:
    public static partial class Markup
    {
        public static MarkupAdapter Red = Color(new Color(1f, 0f, 0f, 1f));
        public static MarkupAdapter Green = Color(new Color(0f, 1f, 0f, 1f));
        public static MrkupAdapter Blue = Color(new Color(0f, 0f, 1f, 1f));
        public static MarkupAdapter White = Color(new Color(1f, 1f, 1f, 1f));
        public static MarkupAdapter Black = Color(new Color(0f, 0f, 0f, 1f));
        public static MarkupAdapter Yellow = Color(new Color(1f, 0.9215686f, 0.01568628f, 1f));
        public static MarkupAdapter Cyan = Color(new Color(0.0f, 1f, 1f, 1f));
        public static MarkupAdapter Magenta = Color(new Color(1f, 0.0f, 1f, 1f));
        public static MarkupAdapter Gray = Color(new Color(0.5f, 0.5f, 0.5f, 1f));
        public static MarkupAdapter Clear = Color(new Color(0.0f, 0.0f, 0.0f, 0.0f));

        public static MarkupAdapter Color(Color color)
        {
            return new MarkupAdapter("<color=" + ColorToMarkup(color) + ">", "</color>");
        }

        private static string ColorToMarkup(Color color)
        {
            var r = (int) (color.r*255);
            var g = (int) (color.g*255);
            var b = (int) (color.b*255);
            var a = (int) (color.a*255);
            return "#" + r.ToString("x2") + g.ToString("x2") + b.ToString("x2") + a.ToString("x2");
        }
    }
  • MarkupExtension.cs
    为了使用方便,再对string做一些扩展。
    public static class MarkupExtension
    {
        public static string ToMarkup(this string str, params MarkupAdapter[] markups)
        {
            return Markup.Create(str, markups);
        }

        public static string ToMarkup(this string str, Color color)
        {
            return Markup.Create(str, Markup.Color(color));
        }

        public static string ToMarkup(this object obj, params MarkupAdapter[] markups) {
            return Markup.Create(obj.ToString(), markups);
        }

        public static string ToMarkup(this object obj, Color color) {
            return Markup.Create(obj.ToString(), Markup.Color(color));
        }
    }

使用方法

由于代码很简单代码量也很少,就不做过多说明了,直接上使用效果。
写一段测试代码,执行效果如下:
Console截图
对比一下原文;
[Markup 测试1]<size=15><b><color=#00ff00ff> 复合样式</color></b></size><color=#ffffffff> 白色</color><i> 斜体</i><b> 加粗</b>
[Markup 测试2]<size=12><i><color=#ffea04ff> 复合样式</color></i></size><color=#ff00ffff> 洋红</color><i> 斜体</i><size=14><b> 加粗</b></size>

测试代码如下:

    public class MarkupTest : MonoBehaviour
    {
        private void Start()
        {
            // 方式1
            var str1 = "[Markup 测试1]"
                       + " 复合样式".ToMarkup(Markup.Green, Markup.Blod, Markup.Size(15))
                       + " 白色".ToMarkup(Color.white)
                       + " 斜体".ToMarkup(Markup.Italic)
                       + " 加粗".ToMarkup(Markup.Blod);
            Debug.Log(str1);

            // 方式2
            var str2 = "[Markup 测试2]"
                       + Markup.Create(" 复合样式", Markup.Yellow, Markup.Italic, Markup.Size(12))
                       + Markup.Create(" 洋红", Markup.Magenta)
                       + Markup.Create(" 斜体", Markup.Italic)
                       + Markup.Create(" 加粗", Markup.Blod, Markup.Size(14));
            Debug.Log(str2);
        }
    }

这样使用起来,要写的代码其实并不短,但是,比较清晰明了,不容易出错,格式修改起来也容易了很多,比直接手写标签要直观很多。

后续

Unity支持的标签格式比较少,实际开发中还缺少了很多样式和功能,比如下划线,删除线,脚注,超链接等等,看情况以后可能会专门写几篇相关的内容。

没有更多推荐了,返回首页