public void AddShader(EntityShaderInfo info) { RemoveShader(info.entity.m_hid); m_entityMap[info.entity.m_hid] = info; for (int i = 0; i < info.entity.m_listRenderer.Count; i++) { Renderer render = info.entity.m_listRenderer[i]; if (render == null) { continue; } Material mat = render.material; switch (info.type) { case eShaderType.eAlphaToHalf: mat.shader = GetShader(eShaderRes.eAlphaDiffuse); info.color.a = 1f; mat.SetColor("_TintColor", info.color); break; case eShaderType.eAlphaToHide: mat.shader = GetShader(eShaderRes.eAlphaDiffuse); info.color.a = 1f; mat.SetColor("_TintColor", info.color); break; case eShaderType.eNihility: mat.shader = GetShader(eShaderRes.eNihility); mat.SetColor("_TintColor", info.color); break; case eShaderType.eRim: mat.shader = GetShader(eShaderRes.eRim); mat.SetColor("_RimColor", info.color); break; } } }
public override void Update(float fTime, float fDTime) { Dictionary <int, EntityShaderInfo> .Enumerator ms = m_entityMap.GetEnumerator(); while (ms.MoveNext()) { EntityShaderInfo info = ms.Current.Value; info.curTime += fDTime; if (info.curTime >= info.showTime) { if (info.showEnd != null) // time out,execute callback { info.showEnd(); info.showEnd = null; } if (info.bAutoEnd) { m_tempDestoryEntityList.Add(info); } UpdatePower(info, 1.0f); } else { UpdatePower(info, info.curTime / info.showTime); } } List <EntityShaderInfo> .Enumerator del = m_tempDestoryEntityList.GetEnumerator(); while (del.MoveNext()) { EntityShaderInfo info = del.Current; RemoveShader(info.entity.m_hid); //info = null; } m_tempDestoryEntityList.Clear(); }
private void UpdatePower(EntityShaderInfo info, float val) { //if (info == null) // return; Entity ent = info.entity; if (ent == null) { return; } List <Renderer> list = ent.m_listRenderer; if (list == null) { return; } for (int i = 0; i < list.Count; i++) { Renderer render = list[i]; if (render == null) { continue; } switch (info.type) { case eShaderType.eAlphaToHalf: info.color.a = val < 0.5f ? 1 - val : 0.5f; render.material.SetColor("_TintColor", info.color); break; case eShaderType.eAlphaToHide: if (val < 0.5f) { val = 0.5f; } info.color.a = 1 - val; render.material.SetColor("_TintColor", info.color); break; } //if (info.type == eShaderType.eColorToBlack) //{ // float rgb = ((1 - val) * 0.1f + 0.2f); // render.material.SetColor("_Color", // new Color( // info.color.r * rgb, // info.color.g * rgb, // info.color.b * rgb, // 1.0f)); //} //else if (info.type == eShaderType.eOutLine) //{ // render.material.SetFloat("_RimPower", val); //} //else if (info.type == eShaderType.eDissolve) //{ // render.material.SetFloat("_Tile", val); // render.material.SetFloat("_Amount", val); // render.material.SetFloat("_DissSize", val * 0.5f); // render.material.SetTexture("_DissolveText", render.material.GetTexture("_MainTex")); //} } }