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); } }
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(); }