有没有办法使用 Animator 更改 TextMeshPro 的文本内容?

Is there a way to change the Text content of TextMeshPro using Animator?

我正在使用 Animator 创建一个 On/Off 切换按钮

我试着让图片变了,颜色变了,文字变了。

结果换了图片和颜色,不知道怎么改文字内容。 我没有看到动画师添加的字段。

难道不能用动画师改变文字内容吗?

您问题的简短回答是否定的,您不能在 Unity 动画中应用称为 Type Writer 的效果。但是下面的代码解决了你的问题。下面的代码是一个基本的 Type Writer 效果,它通过调用 Coroutine 来工作。将你的TextMeshProUGI设置为第一个参数,效果就完成了。

public TextMeshProUGUI tmp;
public void Start()
{
    StartCoroutine(TypeWriter("Your text here..", .2f));
}
public IEnumerator TypeWriter(string text, float waitTime)
{
    for (var i = 0; i < text.Length; i++)
    {
        tmp.text = text.Substring(0, i);

        yield return new WaitForSecondsRealtime(waitTime);
    }
}

如何给Animator添加Type Writer效果?

在这里,我建议在动画师中应用这种效果的好方法。在动画器中单击您想要的状态,然后单击 AddBehavior 创建 Type Writer 脚本。

最后,您所要做的就是将脚本引用到 OnStateEnter 事件。我已经从我的 MenuManager 单例中调用了这里的脚本,你也可以将它放在你的动画角色中。

public class TypeWriter : StateMachineBehaviour
{
    public string text;
    public float waitTime;
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        MenuManager.singleton.StartCoroutine(TypeWriter(text, waitTime)); // reference your mono behaviour script here
    }
}

如果你写过动画师角色内部的脚本类型编写器,你可以在下面获取。请记住将您的脚本名称替换为波纹管上的 Character 类型,并且 IEnumerator 只能用于 mono behavior.

public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    animator.GetComponent<Character>().StartCoroutine(TypeWriter(text, waitTime)); // reference your mono behaviour script here
}