Пример #1
0
    public void Stop()
    {
        if (this == null)
        {
            return;       //可能已经被销毁
        }
        if (!m_isPlaying) //防止死锁
        {
            return;
        }

        //1 必须先把这个值设置正确,不然可能造成死锁
        m_isPlaying = false;

        //Remove和stop可能会互相调用,内部已经防止死锁,这里不用判断
        m_handle.mgr.Remove(m_handle);

        //DoDestroy和stop可能会互相调用,内部已经防止死锁,这里不用判断
        FxDestroy.DoDestroy(this.gameObject);

        m_handle = null;
        foreach (CameraAni a in m_anis)
        {
            a.OnStop();
        }
    }
Пример #2
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);
        }
    }