繁体   English   中英

如何随着时间的推移使用透明/漫射的 alpha 0 到可见的 alpha 255 制作不可见的游戏对象

[英]How to make invisible game object with transparent/diffuse with alpha 0 to visible alpha 255 over time

大家好。

我正在 Unity3D 中制作塔防游戏,并且正在尝试创建塔建造动画。

所以基本上,出于测试目的,我有一个原始立方体,其材质带有透明/漫反射旧着色器,并且我已将其颜色的 alpha 设置为 0,因为塔在创建时应该完全不可见。 它附加了一个用于动画的 Tower 脚本。 我有另一个脚本来处理塔立方体的放置。

当塔在一定时间内创建时,如何使塔完全可见,其材料颜色的 alpha 为 255?

所以如果塔的建造时间是 5 秒,那么 alpha 应该在 5 秒内从 0 变成 255。

我试过以下(Tower.cs):

public float buildTime = 10;

private MeshRenderer mr;;
private Color currentColor;
private bool built = false;

void Start() {
    mr = GetComponent<MeshRenderer>()
    currentColor = mr.material.color;
    StartCorroutine(BuildAnimation());
}

IEnumerator BuildAnimation() {
    float a = 0;
    Color newColor = new Color(currentColor.r, currentColor.g, currentColor.b, a);
    while (!built) {
        mr.material.color = newColor;
        if (a >= 255) {
            built = true;
        }
        a+= 255 / buildTime;
        yield return new WaitForSeconds(255 / buildTime);
    }
}

帮助将不胜感激,提前致谢!

[Tooltip("Time to fade in seconds")]
public float FadeTime;
private float _alpha = 0.0f;
private const float _startAlpha = 0f;
private const float _endAlpha = 1.0f;

IEnumerator Fade(MeshRenderer myMesh)
{
    for (float t = 0f; t < FadeTime; t += Time.deltaTime)
    {
        float normalizedTime = t / FadeTime;

        _alpha = Mathf.Lerp(_startAlpha, _endAlpha, normalizedTime);

        yield return null;
    }
    _alpha = _endAlpha; 
    myMesh.material.color = new Color(myMesh.material.color.r,myMesh.material.color.g,myMesh.material.color.b,_alpha)
}

然后通过Fade()传递你的网格。

感谢@Martin Mazza Dawson 的回答。 虽然一开始它不能正常工作,但我通过一个简单的修复让它工作。

IEnumerator Fade(MeshRenderer myMesh)
{
    for (float t = 0f; t < FadeTime; t += Time.deltaTime)
    {
        float normalizedTime = t / FadeTime;

        _alpha = Mathf.Lerp(_startAlpha, _endAlpha, normalizedTime);
        // The fix
        myMesh.material.color = new Color (myMesh.material.color.r, myMesh.material.color.g, myMesh.material.color.b, _alpha);
        yield return null;
    }
    //_alpha = _endAlpha; 
    //myMesh.material.color = new Color (myMesh.material.color.r, myMesh.material.color.g, myMesh.material.color.b, _alpha);
}

爱你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM