示例#1
0
    public void CopyFrom(AniRateCfg cfg)
    {
        if (cfg == null)
        {
            return;
        }

        //复制值类型的属性
        Util.Copy(cfg, this, BindingFlags.Public | BindingFlags.Instance);

        //复制其他
        clips.Clear();
        AniClipCfg clip;

        foreach (AniClipCfg c2 in cfg.clips)
        {
            clip = new AniClipCfg();
            clips.Add(clip);
            clip.CopyFrom(c2);
        }
    }
示例#2
0
    public void Play(string ani, WrapMode wrapMode, AniRateCfg rateCfg, float fade = 0.2f)
    {
        Cache();

        //先做些音效的处理
#if !ART_DEBUG
        StopSound();
        m_sounds.Clear();
        AniSoundCfg.Get(m_modName, ani, ref m_sounds);
#endif
        ResetPause();//上一个动作如果卡帧中那么清空

        m_curRateCfg      = rateCfg;
        m_curRateIdx      = -1;
        m_curRateEndFrame = -1;


        //如果当前动作没有结束要先结束
        if (m_curGroup != null && !m_isEnd)
        {
            m_curGroup.End();
            m_isEnd = true;
        }

        //播放
        m_curSt = m_sts.Get(ani);
        if (m_curSt != null)
        {
            if (m_curRateCfg.clips.Count > 0)
            {
                m_curRateIdx      = 0;
                m_curRateEndFrame = m_curRateCfg.clips[0].frame;
            }
            m_curSt.speed          = GetRateSpeed();
            m_curSt.normalizedTime = 0;
            m_curSt.wrapMode       = wrapMode;

            if (fade == 0 || (m_simpleRole != null && !m_simpleRole.m_needFade))
            {
                m_ani.Play(ani);
            }
            else
            {
                m_ani.CrossFade(ani, fade);
            }
        }
        else
        {
            m_ani.Stop();
            Debuger.LogError("{0}找不到动作{1}", this.transform.parent.name, ani);
        }

        //当前动作的处理
        m_curGroup      = m_curSt == null ? null : GetGroup(ani);
        m_curTotalFrame = 0;
        if (m_curGroup != null)
        {
            CalcSt(m_curSt, out m_curFrame, out m_curLoop, out m_isEnd);

            m_curGroup.Begin();
            m_curGroup.UpdateFrame(m_curFrame, m_curLoop, false, m_root);
            if (m_isEnd)
            {
                m_curGroup.End();
            }
        }

        //检查播放声音
        CheckSound();
    }