示例#1
0
    // 绘制设置
    private void DrawSetting()
    {
        GUI.backgroundColor = COLOR_ORANGE;
        GUILayout.BeginHorizontal(new GUIStyle(EditorStyles.textField), GUILayout.Width(WINDOW_WIDTH), GUILayout.Height(32));
        GUI.backgroundColor = m_defaultBgClr;

        GUILayout.Label("帧率:", GUILayout.Width(55));
        m_effectData.r = EditorGUILayout.IntField(m_effectData.r, GUILayout.Width(100));
        GUILayout.Label("总播放时间:" + EffectEditorUtil.CalcEffectTime(m_effectData) + "s", GUILayout.Width(200));

        GUILayout.EndHorizontal();
    }
示例#2
0
    // 播放特效
    // @effData:特效数据
    public void Play(EffectData effData)
    {
        if (effData.aF.Length < 2)
        {
            return;
        }

        m_isPlay     = true;
        m_effectData = effData;
        m_runTime    = 0;
        m_endTime    = EffectEditorUtil.CalcEffectTime(effData);

        //SimulateFrameData();
    }
示例#3
0
    void Update()
    {
        //Debug.Log(ani.keys[0].inTangent);
        //Debug.Log(ani.keys[0].outTangent);
        //Debug.Log(ani.keys[1].inTangent);
        //Debug.Log(ani.keys[1].outTangent);


        if (!m_isPlay || m_effectData == null)
        {
            return;
        }

        if (m_runTime > m_endTime)
        {
            m_isPlay = false;
            HideAllImg();
            return;
        }

        int             no      = EffectEditorUtil.CalcFrameNo(m_runTime, m_effectData.r);
        EffectFrameData effData = EffectEditorUtil.SimulateFrameData(m_effectData, no);

        if (effData == null)
        {
            m_isPlay = false;
        }
        else
        {
            UpdateByFrame(m_effectData, effData);
        }

        m_runTime += Time.deltaTime;

        Debug.Log(m_runTime);
    }
    // 模拟特效指定帧的帧数据
    // @effectData:特效数据
    // @frameNo:帧的编号
    // return:有效的帧序号,返回对应的帧数据;否则null
    public static EffectFrameData SimulateFrameData(EffectData effectData, int frameNo)
    {
        int defFrameNum = effectData.aF.Length;

        if (effectData.aF.Length < 2 || frameNo < 0)
        {
            return(null);
        }

        EffectFrameData lastFrameData = effectData.aF[defFrameNum - 1];

        if (frameNo > lastFrameData.n)
        {
            return(null);
        }

        // 找出最近的帧数据索引
        int targetLeftFrameIdx = 0;

        for (int i = 0; i < defFrameNum - 1; ++i)
        {
            EffectFrameData tmpFrame = effectData.aF[i];
            if (frameNo >= tmpFrame.n)
            {
                targetLeftFrameIdx = i;
            }
        }

        EffectFrameData frame1 = effectData.aF[targetLeftFrameIdx];
        EffectFrameData frame2 = effectData.aF[targetLeftFrameIdx + 1];

        EffectFrameData nFrameData = new EffectFrameData();

        nFrameData.n = frameNo;

        List <EffectImageData> listImgData = new List <EffectImageData>();

        for (int k = 0; k < frame1.aI.Length; ++k)
        {
            EffectImageData imgData1 = frame1.aI[k];
            EffectImageData imgData2 = GetImgDataFromFrame(frame2, imgData1.i);

            if (imgData2 != null)
            {
                EffectImageData nImgData = new EffectImageData();
                nImgData.i    = imgData1.i;
                nImgData.sX   = EffectEditorUtil.EvaluteInperpolation(imgData1.sX, imgData2.sX, frame1.n, frame2.n, frameNo);
                nImgData.sY   = EffectEditorUtil.EvaluteInperpolation(imgData1.sY, imgData2.sY, frame1.n, frame2.n, frameNo);
                nImgData.pX   = EffectEditorUtil.EvaluteInperpolation(imgData1.pX, imgData2.pX, frame1.n, frame2.n, frameNo);
                nImgData.pY   = EffectEditorUtil.EvaluteInperpolation(imgData1.pY, imgData2.pY, frame1.n, frame2.n, frameNo);
                nImgData.r    = EffectEditorUtil.EvaluteInperpolation(imgData1.r, imgData2.r, frame1.n, frame2.n, frameNo);
                nImgData.c[0] = (int)EffectEditorUtil.EvaluteInperpolation(imgData1.c[0], imgData2.c[0], frame1.n, frame2.n, frameNo);
                nImgData.c[1] = (int)EffectEditorUtil.EvaluteInperpolation(imgData1.c[1], imgData2.c[1], frame1.n, frame2.n, frameNo);
                nImgData.c[2] = (int)EffectEditorUtil.EvaluteInperpolation(imgData1.c[2], imgData2.c[2], frame1.n, frame2.n, frameNo);
                nImgData.c[3] = (int)EffectEditorUtil.EvaluteInperpolation(imgData1.c[3], imgData2.c[3], frame1.n, frame2.n, frameNo);

                listImgData.Add(nImgData);
            }
            else
            {
                listImgData.Add(imgData1);
            }

            nFrameData.aI = listImgData.ToArray();
        }

        return(nFrameData);
    }