如何制作具有透明/漫反射的隐形游戏对象,其中alpha 0到可见alpha 255随着时间的推移

时间:2016-03-25 20:27:27

标签: c# unity3d unity5

美好的一天。

我在Unity3D中制作塔防游戏,我试图创建塔式制作动画。

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

如果在一定时间内创建塔的材质为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);
    }
}

提前感谢帮助真的很感激!

2 个答案:

答案 0 :(得分:1)

[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()传递你的网格。

答案 1 :(得分:0)

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

{{1}}

爱你:)。