如何在Unity中显示类似于Android中的Toast消息?

zyo*_*neo 1 c# unity-game-engine

Unity中是否有类似Toast的消息,类似于GUI,而与android类似。在android中,只需一行代码就很容易。

public void buttonclick()
{
// Message to show
}
Run Code Online (Sandbox Code Playgroud)

小智 13

/// <param name="message">Message string to show in the toast.</param>
    private void _ShowAndroidToastMessage(string message)
    {
        AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

        if (unityActivity != null)
        {
            AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast");
            unityActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
            {
                AndroidJavaObject toastObject = toastClass.CallStatic<AndroidJavaObject>("makeText", unityActivity, message, 0);
                toastObject.Call("show");
            }));
        }
    }
Run Code Online (Sandbox Code Playgroud)


Pro*_*mer 6

您可以使用Text组件和Mathf.Lerp功能通过将文本淡入Color.clear颜色,等待一段时间然后淡入淡出来完成此操作。这篇文章描述了如何通过一个简单的fadeInAndOut功能来做到这一点。在淡化文本之前,获取原始的文本颜色,然后启用“文本”组件。淡出后,恢复颜色,然后禁用“文本”组件。

这是带有Text组件的简化吐司:

void Start()
{
    showToast("Hello", 2);
}

public Text txt;

void showToast(string text,
    int duration)
{
    StartCoroutine(showToastCOR(text, duration));
}

private IEnumerator showToastCOR(string text,
    int duration)
{
    Color orginalColor = txt.color;

    txt.text = text;
    txt.enabled = true;

    //Fade in
    yield return fadeInAndOut(txt, true, 0.5f);

    //Wait for the duration
    float counter = 0;
    while (counter < duration)
    {
        counter += Time.deltaTime;
        yield return null;
    }

    //Fade out
    yield return fadeInAndOut(txt, false, 0.5f);

    txt.enabled = false;
    txt.color = orginalColor;
}

IEnumerator fadeInAndOut(Text targetText, bool fadeIn, float duration)
{
    //Set Values depending on if fadeIn or fadeOut
    float a, b;
    if (fadeIn)
    {
        a = 0f;
        b = 1f;
    }
    else
    {
        a = 1f;
        b = 0f;
    }

    Color currentColor = Color.clear;
    float counter = 0f;

    while (counter < duration)
    {
        counter += Time.deltaTime;
        float alpha = Mathf.Lerp(a, b, counter / duration);

        targetText.color = new Color(currentColor.r, currentColor.g, currentColor.b, alpha);
        yield return null;
    }
}
Run Code Online (Sandbox Code Playgroud)