宁波市政务网站建设和管理标准,基于php+mysql的网站开发,做的很好的黑白网站,建立网站有什么作用效果 直接将脚本挂载在Text Mesh Pro上#xff0c;但是需要滚动的文本必须在Scroll View中#xff0c;否侧会定位错误#xff0c;还需要给Scroll View中看需求添加垂直或者水平布局的组件
代码
using System.Collections;
using System.Collections.Generic;
using UnityE…效果 直接将脚本挂载在Text Mesh Pro上但是需要滚动的文本必须在Scroll View中否侧会定位错误还需要给Scroll View中看需求添加垂直或者水平布局的组件
代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;using TMPro;
using UnityEngine.EventSystems;public class TextScroll : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {// TextMeshPro的文本框private TextMeshProUGUI text;private string saveStr; // 保存文本内容,可以保存但是没有必要需要实现动态文本private Vector3 savePostion; // 保存文本位置private Vector2 savesizeDelta; // 保存尺寸private float saveMoveWeight;private RectTransform rect; // 文本的方形转换器[Tooltip(开启自动权重)]public bool AutoMoveWeight true;// 如果开启自动权重那么对该变量修改不在起作用[Tooltip(溢出文本移动的权重会根据权重的值来对溢出内容的多少进行加速)]public float moveWeight 3;private void OnEnable() {text GetComponentTextMeshProUGUI();rect text.gameObject.GetComponentRectTransform();Init();}/// summary/// 初始化文本内容/// /summarypublic void Init() {saveStr text.text;savePostion rect.position;savesizeDelta rect.sizeDelta;saveMoveWeight moveWeight;}private Coroutine coroutine; // 接收协程/// summary/// 鼠标进入/// /summary/// param nameeventData传入事件数据鼠标位置等/parampublic void OnPointerEnter(PointerEventData eventData) {// Debug.Log(鼠标进入开始文本滚动);// saveStr text.text;// 是否存在截断float fontsLenght CalculateTextWidth(text);if (fontsLenght rect.sizeDelta.x ) return;// 处理上一次退出后未完成恢复完成就再次进入if (coroutine ! null) {StopCoroutine(coroutine);Reset();}// 是否启动自动更新if (AutoMoveWeight) {moveWeight (fontsLenght - rect.sizeDelta.x) / 100;}// 计算所需时间float sumTime (fontsLenght - rect.sizeDelta.x) / text.fontSize / moveWeight;rect.sizeDelta new Vector2(fontsLenght 100, rect.sizeDelta.y);coroutine StartCoroutine(IETextScroll(sumTime, false));}/// summary/// 鼠标移出/// /summary/// param nameeventData/parampublic void OnPointerExit(PointerEventData eventData) {// Debug.Log(text begine reset);// 过滤if (text null || (coroutine null CalculateTextWidth(text) rect.sizeDelta.x) || totalDistance 0) return;if (coroutine ! null) { // 文本正在向左滚动StopCoroutine(coroutine);} coroutine StartCoroutine(IETextScroll(totalTime / 3, true));// Reset();}/// summary/// 计算文本内容宽度/// /summary/// param nametext/param/// returns/returnsprivate float CalculateTextWidth(TextMeshProUGUI text) {float width text.preferredWidth;return width;}private float totalDistance 0;private float totalTime 0;/// summary/// 文本滚动的协程/// /summary/// param nametime协程运行时间/param/// param nameisReset是否是恢复时启动的协程/param/// returns/returnsprivate IEnumerator IETextScroll(float time, bool isReset) {// float moveSpeed 0;float perDistance 0;if (!isReset) {while (time 0) {// Time.deltaTime 是一个不确定的量需要每帧更新。perDistance moveWeight * text.fontSize * Time.deltaTime;rect.position new Vector3(rect.position.x - perDistance, rect.position.y);time - Time.deltaTime;totalDistance perDistance;totalTime Time.deltaTime;yield return null;}} else { // 恢复//moveSpeed totalDistance / time;//while (time 0) {// perDistance moveSpeed * Time.deltaTime;// rect.position new Vector3(rect.position.x perDistance, rect.position.y);// time - Time.deltaTime;// yield return null;//}Reset();}// Debug.Log(移动权重: moveWeight 每次距离: totalDistance 花费时间: totalTime);yield return null;}/// summary/// 恢复/// /summaryprivate void Reset() {if (text null) return;// text.text saveStr;rect.position savePostion;rect.sizeDelta savesizeDelta;moveWeight saveMoveWeight; // 采用自动权重时会再次自动计算权重totalDistance 0;totalTime 0;}
}