文本提示悬浮

 

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

public class Text_over_show : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
{
    private Text text_myself;
    public bool active_;

    private string old_value;
    private GameObject show_text;
    private Text input;
    private void Awake()
    {
        text_myself = GetComponent<Text>();
    }
    void Start()
    {
        //省略号
        // SetTextWithEllipsis(text_myself, text_myself.text, characterVisibleCount_);
        //show_text = InitilizeJinShuiTanData.Instance.show_text;
        //input = show_text.transform.GetChild(0).GetChild(0).GetComponent<Text>();
    }
    public void Xuan_fu()
    {
        text_myself = GetComponent<Text>();
        show_text = InitilizeJinShuiTanData.Instance.show_text;
        input = show_text.transform.GetChild(0).GetChild(0).GetComponent<Text>();
        //省略号
        SetTextWithEllipsis(text_myself, text_myself.text);
    }
    /// <summary>
    /// 获取原有值
    /// </summary>
    /// <returns></returns>
    public string GetOldValue()
    {
        return old_value;
    }
    public void OnPointerEnter(PointerEventData eventData)
    {
        if (active_)
        {
            input.text = old_value;
            show_text.transform.position = this.transform.position;
            LayoutRebuilder.ForceRebuildLayoutImmediate(input.GetComponent<RectTransform>());
            LayoutRebuilder.ForceRebuildLayoutImmediate(show_text.transform.FindChildComptent<RectTransform>("悬浮"));
            show_text.SetActive(true);
            show_text.transform.SetAsLastSibling();
           
        }
    }  
    public void OnPointerExit(PointerEventData eventData)
    {
        show_text.SetActive(false);
    }
    #region wy
    / <summary>
    / 文本超出部分省略号
    / </summary>
    / <param name="textTemp">目标文本框</param>
    / <param name="value">文本</param>
    //private void SetTextWithEllipsis(Text textTemp, string value)
    //{
    //    old_value = value;

    //    var generator = new TextGenerator();
    //    var rectTransform = textTemp.GetComponent<RectTransform>();
    //    //设置文本绘制范围
    //    var settings = textTemp.GetGenerationSettings(rectTransform.rect.size);
    //    string valuetemp = value.Replace("\\n","");
    //    valuetemp.Replace(" ", "");
    //    generator.Populate(valuetemp, settings);

    //    //设置可见的字符数
    //    var characterVisibleCount = generator.characterCountVisible;
    //    var updateText = value;

    //    //超出部分以省略号显示
    //    if (value.Length > characterVisibleCount)
    //    {
    //        if (characterVisibleCount - 1 < 0)
    //        {
    //            return;
    //        }
    //        int lineEndIndex = value.IndexOfAny("\\n".ToCharArray());
    //        if (lineEndIndex == -1 || lineEndIndex > characterVisibleCount - 1)
    //        {
    //            updateText = value.Substring(0, characterVisibleCount - 1);
    //            updateText += "...";
    //        }
    //        else
    //        {
    //            updateText = value.Substring(0, lineEndIndex);
    //            updateText += "...";
    //        }
    //        active_ = true;
    //    }
    //    else
    //    {
    //        active_ = false;
    //    }
    //    textTemp.text = updateText;
    //}
    #endregion
    /// <summary>
    /// 文本超出部分省略号
    /// </summary>
    /// <param name="textTemp">目标文本框</param>
    /// <param name="value">文本</param>
    private void SetTextWithEllipsis(Text textTemp, string value)
    {
        old_value = value;
        var generator = new TextGenerator();
        var rectTransform = textTemp.GetComponent<RectTransform>();
        //设置文本绘制范围
        var settings = textTemp.GetGenerationSettings(rectTransform.rect.size);
        string valuetemp = value.Replace("\\n", "").Replace("\r", "").Replace("\t", "").Replace("\n", "").Replace(" ", "").Replace(" ", "");
        generator.Populate(valuetemp, settings);
        //设置可见的字符数
        var characterVisibleCount = generator.characterCountVisible;
        var updateText = valuetemp;
        //超出部分以省略号显示
        if (valuetemp.Length > characterVisibleCount)
        {
            updateText = valuetemp.Substring(0, characterVisibleCount - 1);
            updateText += "...";
            active_ = true;
        }
        else
        {
            updateText = old_value;
            active_ = false;
        }

        textTemp.text = updateText;
    }
}

 把上方脚本挂到TextUI组件上,切记不可Overflow,调用方法如下

以下脚本控制文字框平移!!!


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/****************************************************************************
 *  Copyright (C) 2013-2023 北京普源瑞新仿真科技有限公司 All Rights Reserved
 *  描述: xxxxxxxxxxxxx
 *  版本: V1.00
 *  创建人员: 
 *  创建时间: 2023-00-00
 *  程序修改记录(最新的放在最前面):
 * <版本号> <修改日期>, <修改人员>: <修改功能概述>
 * **************************************************************************/

public class Move_text_over : MonoBehaviour//记住修改日期
{
    RectTransform rectTransform;
   
    Canvas canvas;
    float x_left;
    Vector3 default_pos;
    private void Awake()
    {
        canvas = GameObject.FindObjectOfType<Canvas>();
        rectTransform = GetComponent<RectTransform>();
        default_pos = new Vector3 (2.7f,18.2f,0);
    }
    private void OnEnable()
    {
        rectTransform.localPosition = default_pos;
    }
    // Start is called before the first frame update
    void Start()
    {
        x_left =  Screen.width- rectTransform.rect.width * 0.5f * canvas.scaleFactor;
    }

    // Update is called once per frame
    void Update()
    {
        if(rectTransform.position.x< rectTransform.rect.width * 0.5f* canvas.scaleFactor)
        {
            rectTransform.position = new Vector3(rectTransform.rect.width * 0.5f * canvas.scaleFactor, transform.position.y);
        }
        if (rectTransform.position.x > x_left)
        {
            rectTransform.position = new Vector3(x_left, transform.position.y);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值