【问题标题】:How to make transitions between images in canvas (unity)?如何在画布(统一)中的图像之间进行转换?
【发布时间】:2016-02-28 21:19:56
【问题描述】:

所以我有 3 张相同的图像,但我想在我的菜单中循环使用不同的颜色。它们只有不同的色相/饱和度,我希望它们慢慢将 alpha 1 减 1,以便弹出后面的那个,然后重新开始循环。

我正在尝试设置一个公共图像并降低它的 alpha 值,但它并不流畅。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class Fading : MonoBehaviour {

    public Image image;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update ()
    {
        //image.CrossFadeAlpha(50, 5, false);

        image.GetComponent<CanvasRenderer>().SetAlpha(0.1f);
        image.CrossFadeAlpha(10f, 4f, false);
    }
}

【问题讨论】:

  • 你应该显示你正在使用的代码。
  • 它只是保持在 alpha 状态。我添加了上面的代码。我想知道是否可能以某种方式使用 time.deltaTime,通过一个循环,我可以通过/减去每一秒来稍微降低 alpha。
  • 你只需从任何你想要的地方拨打CrossFadeAlpha一次,它与Update没有任何联系

标签: c# unity3d unity5 unity3d-2dtools


【解决方案1】:

CrossFadeAlpha 只能通过按下按钮或类似方式调用以启动图像淡入淡出过渡,因为该方法的工作方式类似于 Coroutine 示例(按下鼠标按钮);

public class ImageFade : MonoBehaviour
{
    [SerializeField]
    private Image m_img;
    [SerializeField]
    private float m_fadeDuration;
    [SerializeField]
    private bool m_ignoreTimeScale;

    public void Update()
    {
        if (Input.GetMouseButtonDown(0))
            m_img.CrossFadeAlpha(0f, m_fadeDuration, m_ignoreTimeScale);
        if (Input.GetMouseButtonDown(1))
            m_img.CrossFadeAlpha(1f, m_fadeDuration, m_ignoreTimeScale);
    }
}

但是,如果您希望手动控制此功能,则必须采取更长的方法。下面你可以看到,每次按下鼠标时,淡入淡出乘数都会被取反,使其始终为 1 或 -1。然后将该值乘以此更新所需的时间分数(在添加到当前 alpha 值之前);

Time.deltaTime / m_fadeDuration

除此之外,布尔值 m_requiresUpdate 确保避免不必要的更新,在淡入淡出完成后将其自身设置为 false。

public class ImageFade : MonoBehaviour
{
    [SerializeField]
    private Image   m_img;
    [SerializeField]
    private float   m_fadeDuration;
    [SerializeField]
    private bool    m_ignoreTimeScale;

    private int     m_fadeMultiplier;
    private float   m_alpha;
    private bool    m_requiresUpdate;

    public void Start()
    {
        m_fadeMultiplier    = 1;
        m_alpha             = 1f;
    }

    public void Update()
    {
        //Toggle subtracting/adding
        if (Input.GetMouseButtonDown(0))
        {
            m_fadeMultiplier = -m_fadeMultiplier;
            m_requiresUpdate = true;
        }

        //Update
        if (m_requiresUpdate)
        {
            //Fade
            m_alpha = Mathf.Clamp(m_alpha + (m_fadeMultiplier * (Time.deltaTime / m_fadeDuration)), 0f, 1f);
            m_img.canvasRenderer.SetAlpha(m_alpha);

            //Finished fading
            if (m_alpha == 0f || m_alpha == 1f)
                m_requiresUpdate = false;
        }
    }
}

希望这对您来说将所有内容很好地联系在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2011-11-21
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多