我正在开发一款安卓游戏,我希望在它们产生时淡入敌人,敌人正在使用标准(镜面着色器),渲染模式设置为淡入淡出,预制件在反照率中有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,因此不会在敌人身上消失。
答案 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();
}