2d0aaa98aa
- 重写 PageController.cs,为所有按钮回调添加完整 Debug.Log - 自动修复 _btnFixationBack:未赋值时自动查找 FixationPanel/BtnBack - 自动修复 _btnExperimentBack:未赋值时自动查找 ExperimentPanel/Navbar/BtnBack - 删除失效的 Canvas 根级冗余 BtnFixationBack - 添加 3D 角色模型资源(man/woman 模型、动画、TextMesh Pro) - 添加 ExperimentPanel UI 资源和 TrainingBackground 素材 测试方法:进入 Play 模式,查看 Console 以验证每个按钮的绑定状态和点击回调是否正常触发。
121 lines
3.7 KiB
C#
Executable File
121 lines
3.7 KiB
C#
Executable File
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
|
|
namespace TMPro.Examples
|
|
{
|
|
public class TextConsoleSimulator : MonoBehaviour
|
|
{
|
|
private TMP_Text m_TextComponent;
|
|
private bool hasTextChanged;
|
|
|
|
void Awake()
|
|
{
|
|
m_TextComponent = gameObject.GetComponent<TMP_Text>();
|
|
}
|
|
|
|
|
|
void Start()
|
|
{
|
|
StartCoroutine(RevealCharacters(m_TextComponent));
|
|
//StartCoroutine(RevealWords(m_TextComponent));
|
|
}
|
|
|
|
|
|
void OnEnable()
|
|
{
|
|
// Subscribe to event fired when text object has been regenerated.
|
|
TMPro_EventManager.TEXT_CHANGED_EVENT.Add(ON_TEXT_CHANGED);
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(ON_TEXT_CHANGED);
|
|
}
|
|
|
|
|
|
// Event received when the text object has changed.
|
|
void ON_TEXT_CHANGED(Object obj)
|
|
{
|
|
hasTextChanged = true;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Method revealing the text one character at a time.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator RevealCharacters(TMP_Text textComponent)
|
|
{
|
|
textComponent.ForceMeshUpdate();
|
|
|
|
TMP_TextInfo textInfo = textComponent.textInfo;
|
|
|
|
int totalVisibleCharacters = textInfo.characterCount; // Get # of Visible Character in text object
|
|
int visibleCount = 0;
|
|
|
|
while (true)
|
|
{
|
|
if (hasTextChanged)
|
|
{
|
|
totalVisibleCharacters = textInfo.characterCount; // Update visible character count.
|
|
hasTextChanged = false;
|
|
}
|
|
|
|
if (visibleCount > totalVisibleCharacters)
|
|
{
|
|
yield return new WaitForSeconds(1.0f);
|
|
visibleCount = 0;
|
|
}
|
|
|
|
textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display?
|
|
|
|
visibleCount += 1;
|
|
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Method revealing the text one word at a time.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator RevealWords(TMP_Text textComponent)
|
|
{
|
|
textComponent.ForceMeshUpdate();
|
|
|
|
int totalWordCount = textComponent.textInfo.wordCount;
|
|
int totalVisibleCharacters = textComponent.textInfo.characterCount; // Get # of Visible Character in text object
|
|
int counter = 0;
|
|
int currentWord = 0;
|
|
int visibleCount = 0;
|
|
|
|
while (true)
|
|
{
|
|
currentWord = counter % (totalWordCount + 1);
|
|
|
|
// Get last character index for the current word.
|
|
if (currentWord == 0) // Display no words.
|
|
visibleCount = 0;
|
|
else if (currentWord < totalWordCount) // Display all other words with the exception of the last one.
|
|
visibleCount = textComponent.textInfo.wordInfo[currentWord - 1].lastCharacterIndex + 1;
|
|
else if (currentWord == totalWordCount) // Display last word and all remaining characters.
|
|
visibleCount = totalVisibleCharacters;
|
|
|
|
textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display?
|
|
|
|
// Once the last character has been revealed, wait 1.0 second and start over.
|
|
if (visibleCount >= totalVisibleCharacters)
|
|
{
|
|
yield return new WaitForSeconds(1.0f);
|
|
}
|
|
|
|
counter += 1;
|
|
|
|
yield return new WaitForSeconds(0.1f);
|
|
}
|
|
}
|
|
|
|
}
|
|
} |