Unity:通过代码设置alpha

时间:2018-01-15 08:58:05

标签: c# unity3d

我正在开发一款安卓游戏,我希望在它们产生时淡入敌人,敌人正在使用标准(镜面着色器),渲染模式设置为淡入淡出,预制件在反照率中有0 alpha。为此,我使用以下代码

敌人淡出

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemySetAlpha : MonoBehaviour {

    public Color enemyMesh;
    public float fadetime = 255;

    // Use this for initialization
    void Start () {

        enemyMesh = GetComponent<SkinnedMeshRenderer> ().material.color;
    }

    // Update is called once per frame
    void Update () {
            fadeIn (fadetime);
    }

    void fadeIn(float time)
    {
        enemyMesh = new Color (1, 1, 1, 0 + (fadetime*Time.deltaTime));
    }
}

我面临的问题是脚本增加了alpha的敌人,但反照率alpha仍为0,因此不会在敌人身上消失。

2 个答案:

答案 0 :(得分:2)

由于if是结构(值类型),而不是类(引用类型),因此更改私有颜色Color不会更改材质的颜色。 enemyMesh使复制材料的颜色。一个完整的新实体。

您必须引用材质(这是一种参考类型)并更改其颜色:

enemyMesh = GetComponent<SkinnedMeshRenderer> ().material.color;

答案 1 :(得分:0)

加载对象后,您必须通过添加另一个“步”值来修改(而不仅仅是替换)alpha值。

基本上,你需要的是这段代码:

void setAlpha()
{
    Color c = material.color;
    float current = c.a;
    current = Mathf.Min(current + fadetime * Time.deltaTime, 1.0f);
    c.a = current;
    material.color = c;
}

然后在Update电话中,您只需进行一次简单的检查:

if(material.color.a < 1.0f)
{
    setAlpha();
}