【问题标题】:How to fade TextMesh alpha with LeanTween?如何使用 LeanTween 淡化 TextMesh alpha?
【发布时间】:2020-06-15 20:19:17
【问题描述】:

我一直在寻找一种在 Unity 中淡化 TextMesh-Text 的 alpha 值的方法,但在网上和LeanTween Documentation 中都找不到解决方案。

  • LeanTween.alphaText() 只适用于普通的 UI-Text(不是 TextMesh)
  • LeanTween.alpha() 在 Text 上对我没有任何帮助。

【问题讨论】:

  • 那么您是否尝试过使用协程并在不使用 LeanTween 的情况下随着时间的推移简单地淡化 text.color.a 值?
  • 是的,我做到了。这很好用。但正如主题所说,它是关于 LeanTween 的解决方案。因此,您可以从 LeanTween 功能中受益,例如用于平滑曲线的 setEase()、setDelay() 等。
  • 您也可以使用协程来完成所有这些工作;)并且在引入新类型时显然更加灵活;)

标签: unity3d user-interface fade leantween


【解决方案1】:

您还可以使用以下行扩展 LeanTween 扩展方法文件 (LeanTweenExt.cs)。此方法将允许您在 textMeshes 上应用 LeanAlphaText,就像您在 UI 文本上所做的那样。

public static LTDescr LeanAlphaText (this TextMesh textMesh, float to, float time) {
    var _color = textMesh.color;
    var _tween = LeanTween
        .value (textMesh.gameObject, _color.a, to, time)
        .setOnUpdate ((float _value) => {
            _color.a = _value;
            textMesh.color = _color;
        });
    return _tween;
}

【讨论】:

  • 这看起来非常漂亮和先进。我试了一下,没有成功。我在我的项目中找到了 LeanTweenExt.cs。我在第 19 行添加了您的代码,在“public static LTDescr LeanAlphaText(this RectTransform rectTransform, float (...)”下方,并保存了它。在一个新脚本中,附加到一个带有 TextMeshPro 组件的 GameObject,我在 Start( ): TextMesh textMesh = this.GetComponent(); LeanTween.textAlpha(textMesh, 0f, 1f); Visual Studio 标记变量 textMesh: Can not convert 'UnityEngine.TextMesh' to 'UnityEngine.RectTransform'. 看起来像我的更改没有任何效果。
  • 我通过以下方法让它工作:将您的代码复制并粘贴到 LeanTweenExt.sc 中。我不得不将代码中的类型从 TextMesh 更改为 TMP_Text 并添加“使用 TMPro;”在上面。现在我可以通过从其他脚本调用它来使用您的代码,方法是输入:TMP_Text text = this.GetComponent<TMP_Text>(); text.LeanAlphaText(0, 1); 这是您的意图吗?
【解决方案2】:

在简要浏览 API 之后,我想一个更好的方法是使用 LeanTwean.value 来设置它的 color,而不是仅仅为了淡化单个文本而引入 CanvasGroupsCanvasGroup 在我看来有点矫枉过正。

(取自 API 的示例)

TextMeshProUGUI text;

void Start()
{
    text = GetComponent<TextMeshProUGUI>();
    var color = text.color;
    var fadeoutcolor = color;
    fadeoutcolor.a = 0;
    LeanTween.value(gameObject, updateValueExampleCallback, fadeoutcolor, color, 1f).setEase(LeanTweenType.easeOutElastic).setDelay(2f);
}


void updateValueExampleCallback(Color val)
{
    text.color = val;
}

【讨论】:

    【解决方案3】:

    我想出了自己的解决方案。

    我没有直接更改 TextMesh-Component 的 alpha,而是将 CanvasGroup 添加到包含我的 TextMesh-Component 的 Gameobject。然后我改为操作 CanvasGroup 的 alpha 值。

    使用我的示例代码:

    1. 在您的画布上:[右键单击] > UI > 文本 - TextMeshPro
    2. 将我的示例脚本附加到这个游戏对象。 (这会自动创建所需的 CanvasGroup)
    3. 按播放键 (Ctrl + P)

    延迟 2 秒后(因为 .setDelay(2f) 文本应该淡入。

    示例代码:

    using UnityEngine;
    using TMPro;
    
    [RequireComponent(typeof(CanvasGroup))]
    public class LeanTweenTextFade : MonoBehaviour
    {          
        private void Start()
        {
            CanvasGroup canvasgroup = this.gameObject.GetComponent<CanvasGroup>();
            TextMeshProUGUI infoTextTMPro = this.gameObject.GetComponent<TextMeshProUGUI>();
    
            canvasgroup.alpha = 0f;
            infoTextTMPro.text = "This Text should fade in.";
    
            float duration = 1f;
            LeanTween.alphaCanvas(canvasgroup, 1.0f, duration).setDelay(2f);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多