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

C# 如何使不可见的游戏对象随着时间的推移透明/漫反射alpha 0到可见alpha 255,c#,unity3d,unity5,C#,Unity3d,Unity5,大家好 我正在Unity3D中制作一个塔楼防御游戏,我正在尝试创建一个塔楼建造动画 因此,基本上,出于测试目的,我有一个带有透明/漫反射传统着色器的材质的基本立方体,并且我已经将其颜色的alpha设置为0,因为塔楼在创建时应该是完全不可见的。它附带了一个用于动画的塔脚本。我有另一个脚本处理塔立方体的放置 当塔在一定时间内创建时,如何使其材质颜色的alpha为255的塔完全可见 所以如果塔的建造时间是5秒,阿尔法应该在5秒内从0变为255 我尝试了以下方法(Tower.cs): public fl

大家好

我正在Unity3D中制作一个塔楼防御游戏,我正在尝试创建一个塔楼建造动画

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

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

所以如果塔的建造时间是5秒,阿尔法应该在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);
    }
}
public float buildTime=10;
私人秘书;mr;;
私人色彩;
私有布尔构建=假;
void Start(){
mr=GetComponent()
currentColor=mr.material.color;
StartCorroutine(BuildAnimation());
}
IEnumerator BuildAnimation(){
浮点数a=0;
Color newColor=新颜色(currentColor.r、currentColor.g、currentColor.b、a);
而(!构建){
mr.material.color=newColor;
如果(a>=255){
构建=真实;
}
a+=255/构建时间;
返回新的WaitForSeconds(255/构建时间);
}
}
非常感谢您的帮助,提前谢谢

[工具提示(“以秒为单位的淡入淡出时间”)]
[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)
}
公共浮动淡出时间; 私人浮动α=0.0f; 私有常量浮点值_startAlpha=0f; 私有常数浮点_endAlpha=1.0f; IEnumerator淡入淡出(网格渲染器myMesh) { for(float t=0f;t

然后将网格穿过
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);
}
IEnumerator淡入淡出(网格渲染器myMesh)
{
for(float t=0f;t

爱你:)

工作正常但不正常。颜色以0 alpha开始,然后在FaceTime之后突然变为255。你能检查一下你的代码,看看有什么问题吗?我希望塔慢慢变得可见,而不是突然。无论如何谢谢你@Tayab您是否在inspector中设置了
FadeTime
?可以在inspector中将其设置为5秒,也可以在
Start()
中进行设置,使其与塔的建造时间相等。如果你不设置它,它会跳过for循环并将alpha设置为endalpha。是的,我尝试过将FadeTime设置为5秒和其他各种时间,但结果是一样的,FadeTime之后alpha突然从0变为255。是的,我的错,很明显,它只是在时间结束之前设置alpha。@MartinMazzaDawson这是游戏的代码外观:-再次感谢