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);
}
}
}