//播放perform 并返回一个唯一ID public int UF_Play(string pName, int pValue, string param) { if (m_PerformPkg == null) { Debugger.UF_Warn("AssetPerformAction Not been Load,Play Failed"); return(0); } var perform = m_PerformPkg.UF_Get(pName); if (perform == null) { Debugger.UF_Warn(string.Format("Can not find perform[{0}] in AssetPerformAction", pName)); return(0); } var node = PerformPlayNode.UF_Acquire(); node.clip = perform; node.pValue = pValue; node.param = param; m_ListPerformPlay.Add(node); return(node.uid); }
public static PerformPlayNode UF_Acquire() { var node = s_PoolData.Pop(); if (node == null) { node = new PerformPlayNode(); } node.uid = ++s_UidIdx; return(node); }
//执行动画事件 private void UF_ExcutePerformActionClipEvent(PerformPlayNode perform, ClipEvent clipEvent) { if (clipEvent.rate > 0) { //根据概率设定是否触发 if (Random.Range(1, 10000) > clipEvent.rate) { return; } } MessageSystem.UF_GetInstance().UF_Send(DefineEvent.E_PERFORM_ACTION_CLIP, perform.uid, perform.pValue, perform.param, clipEvent.name, clipEvent.param); }
public void UF_OnSyncUpdate() { tickTimes++; float dtime = GTime.RunDeltaTime; PerformPlayNode tempNode = null; for (int k = 0; k < m_ListPerformPlay.Count; k++) { tempNode = m_ListPerformPlay[k]; if (tempNode == null || tempNode.clip == null) { tempNode.UF_Release(); m_ListPerformPlay.RemoveAt(k); k--; continue; } tempNode.curTime += dtime; float progress = 1; if (tempNode.clip.length > 0) { progress = tempNode.curTime / tempNode.clip.length; } //ClipEvent 必须为顺序列表,否则错乱 for (int i = tempNode.playedIdx; i < tempNode.clip.clipEvents.Count; i++) { if (progress >= tempNode.clip.clipEvents[i].trigger) { //do something event trigger //播放索引提前 tempNode.playedIdx++; UF_ExcutePerformActionClipEvent(tempNode, tempNode.clip.clipEvents[i]); } } if (tempNode.curTime >= tempNode.clip.length) { if (tempNode.clip.loop) { tempNode.playedIdx = 0; tempNode.curTime = 0; } else { tempNode.UF_Release(); m_ListPerformPlay.RemoveAt(k); k--; continue; } } } }