UGUI实现字符串竖行显示

UGUI实现字符串竖行显示

请大家关注我的微博:@NormanLin_BadPixel坏像素


最近程序小伙伴问我Unity有没有可以竖行显示文本的组件,类似古书上从右到左显示的那种。
我找了半天没找到啊。(大家如果找到的话可以留言分享一下)

我说这个你自己写一下很快吧。
比如你想显示

休放星星星星星
息假期期期期期
  五四三二一

那你就在Text里面填成这个样子就好了啊!

程序小伙伴:“你滚。”

看来他是想填成

星期一
星期二
星期三
星期四
星期五
放假
休息

然后显示成上面哪个样子。

我:好说啊,你按照规律把后面的字符串转换成前面的字符串就好了啊。

小伙伴: 你这个想法反人类,我们就不能从底层修改它的显示方法吗?

我:。。。

这里分享一下我写的方法。。。很短,大家看看就好

代码分享

首先,创建一个ColumnText组件

using UnityEngine;

public class ColumnText : MonoBehaviour {
    public string Text = "";
    public bool Left = false;
}

然后,创建Editor文件夹,并且创建ColumnEditor脚本。

这里我用到了其他人写的一个类,方便使用的。
InspectorBase

using UnityEditor;
public class InspectorBase : Editor where T : UnityEngine.Object {
    protected T Target { get { return (T)target; } }
}

这个类可以比较方便的获取到当前编辑的组件,而不用每次自己获取。

ColumnEditor


using System;
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
[CustomEditor(typeof(ColumnText))]
public class ColumnEditor : InspectorBase {

    char[] _k;
    //注意这里的" "是通过输入法输入v1选择第一个空白出现的符号
    string _s = " ";
    Text _text;
    private void Awake() {
        _k = Environment.NewLine.ToCharArray();
    }
    private void OnEnable() {
        _text = Target.GetComponent();
    }

    public override void OnInspectorGUI() {
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("AlignLeft");
        Target.Left = EditorGUILayout.Toggle(Target.Left);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.LabelField("Text");
        Target.Text = EditorGUILayout.TextArea(Target.Text);
        string[] _temps = Target.Text.Split(_k);
        if (!Target.Left) {
            Array.Reverse(_temps);
        }
        int max = 0;
        for (int i = 0; i < _temps.Length; i++) {
            if(max < _temps[i].Length) {
                max = _temps[i].Length;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < max; i++) {
            for(int j = 0; j < _temps.Length; j++) {
                if(_temps[j].Length > i) {
                    sb.Append(_temps[j][i]);
                } else {
                    sb.Append(_s);
                }
            }
            sb.Append(_k);
        }
        _text.text = sb.ToString();
        EditorUtility.SetDirty(_text);
    }
}

然后把ColumnText组件拖到Text的UI上面,在ColumnText里面填写想要显示的文字,Text会自动转换。

虽然这个方法很简单,但是效果不错啊。而且是编辑器功能,又没有性能消耗。

最后附上效果图。

UGUI实现字符串竖行显示_第1张图片
UGUI实现字符串竖行显示_第2张图片
image

UGUI实现字符串竖行显示_第3张图片
image

结束语

不管黑猫白猫,能抓老鼠的都是好猫。(现在宠物猫都怕老鼠了。)

你可能感兴趣的:(Unity学习笔记,Unity,Unity编辑器)