public void Play() { if (m_isPlaying) { Debuger.Log("还没结束就重新播放了"); Stop();//先结束老的 } //先找到对应的脚本 m_fx = GetComponent <PostEffectsBase>(); if (m_fx == null) { Debuger.Log("没有找到后期处理特效"); FxDestroy.DoDestroy(this.gameObject); return; } GetComponent <Camera>().enabled = false;//隐藏相机,如果没有隐藏的话 Type t = m_fx.GetType(); m_method = t.GetMethod("OnRenderImage", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (m_method == null) { Debuger.Log("没有找到OnRenderImage方法:{0}", t.Name); FxDestroy.DoDestroy(this.gameObject); return; } //添加到相机特效管理器 Camera c = null; #if ART_DEBUG c = Camera.main; #else c = CameraMgr.instance == null?null:CameraMgr.instance.CurCamera; #endif if (c == null) { Debuger.LogError("找不到相机"); FxDestroy.DoDestroy(this.gameObject); return; } CameraFxMgr camFxMgr = c.AddComponentIfNoExist <CameraFxMgr>(); m_handle = camFxMgr.Add(t.Name, this); m_isPlaying = true; m_beginTime = Util.time; m_destroyTime = -1; GameObjectPoolObject po = this.AddComponentIfNoExist <GameObjectPoolObject>(); if (po != null)//为了实现延迟销毁机制,要用到对象池 { po.m_onIngoreDestroy = IngorePoolDestroy; } foreach (CameraAni a in m_anis) { a.OnBegin(m_fx); } }
void UpdateFloat(PostEffectsBase fx) { if (m_state == enState.begin || m_state == enState.middle) { m_fieldInfo.SetValue(fx, Mathf.Lerp(m_beginFloat, m_endFloat, m_beginCurve.Evaluate(m_curFactor))); } else if (m_state == enState.end || m_state == enState.over) { m_fieldInfo.SetValue(fx, Mathf.Lerp(m_beginFloat, m_endFloat, m_endCurve.Evaluate(m_curFactor))); } }
public void OnUpdateCamera(PostEffectsBase fx, float time) { m_curTime = time; enState state = CalcState(); if (m_fieldInfo != null)//找不到属性不需要变化 { switch (m_type) { case enType.Color: UpdateColor(fx); break; //如果是颜色渐变 case enType.Float: UpdateFloat(fx); break; //如果是float值渐变 default: Debuger.LogError("未知的类型{0}", m_type); break; } } m_state = state; m_lastTime = m_curTime; }
public void OnBegin(PostEffectsBase fx) { m_state = enState.init; m_lastTime = -1; m_isEnd = false; //找到对应的字段 Type t = fx.GetType(); m_fieldInfo = t.GetField(m_fieldName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (m_fieldInfo == null) { m_fieldInfo = t.GetField("m_" + m_fieldName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); } if (m_fieldInfo == null) { Debuger.LogError("找不到字段:{0}", m_fieldName); } OnUpdateCamera(fx, 0); }