Наследование: MonoBehaviour
Пример #1
0
    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);
        }
    }
Пример #2
0
 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)));
     }
 }
Пример #3
0
    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;
    }
Пример #4
0
    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);
    }