我遇到了一个带有素材淡出的游戏对象的问题。在Unity 3D项目中淡入。
我在每个资产上都有一个脚本,其中包含一个返回需要更改的材料数组的函数。我使用辅助设备:
public float timeToDisappear = 2.0f;
void ChangeMaterialtoTransparent (Material mat) {...}
void ChangeMaterialtoFade (Material mat) {...}
void ChangeMaterialToOpaque(Material mat) {...}
每个淡入淡出对象都有一个InvisibilityField字段,该字段返回其部分中的材质。数组中的所有InvisibilityField。
当材料褪色的时间到来时,我声称其材料并使用
void FadeOverTime( Material[] mats)
{
foreach (Material mat in mats)
{
ChangeMaterialtoFade (mat);
StartCoroutine(TurnInvisible(mats));
}
}
// TurnInvisible的代码最后是因为它不是问题而且工作正常
一切都很好。
但是当试图将它重新放回时
IEnumerator ShowAndWait(Material[] mats,int index)
{
yield return StartCoroutine(Show(mats, index));
foreach (Material mat in mats) {
ChangeMaterialToOpaque (mat);
}
IEnumerator Show(Material[] mats, int index)
{
float startTime = Time.time;
InvisibilityField VF = _visibilityComponents [index];
while (Time.time < startTime + timeToDisappear)
{
foreach (Material m in mats)
{
float target = VF.GetOpacityLevel(m);
float tmp = Mathf.Lerp(0.0f,target,(Time.time - startTime)/timeToDisappear);
FadeColorTolevel(m,tmp);
print (m.name + "opacity is " + tmp + " as for " + (Time.time - startTime)/timeToDisappear);
}
yield return null;
}
}
void FadeColorTolevel(Material mat, float lvl)
{
Color Col = mat.color;
Col.a = lvl;
mat.color = Col;
}
只显示一些材料(它的1个模型与多材料)其他仍然不可见 - 有时2个不同的部分使用相同的材料1显示,1个不显示。
打印功能的打印结果表明所有材料已经被打印到0.995。
淡出功能几乎与淡出功能完全相同,因此我不知道自己做错了什么。我使用Unity 5.2.0f3。 //作为帮助者,这是可以正常工作的隐身代码
IEnumerator TurnInvisible(Material[] mats)
{
float startTime = Time.time;
while (Time.time < startTime + timeToDisappear)
{
foreach (Material m in mats)
{
float tmp = Mathf.Lerp(1.0f,0.0f,(Time.time - startTime)/timeToDisappear);
FadeColorTolevel(m,tmp);
}
yield return null;
}
}
答案 0 :(得分:1)
问题解决了。造成混乱是因为材料设置为淡化而不是透明。我不知道有什么不同,但似乎解决了这个问题