/// <summary> /// 获取下一个动画Key /// 0 - 100 <= AnimTime /// 101-199 <= TotalTime (这个是算上pose时间) /// 200 pose时间也结束了 /// </summary> /// <param name="deltaTime"></param> /// <returns></returns> int GetNextKey(int deltaTime) { if (_activeActionData == null) { return(-1); } int currentTime = _actionTime + deltaTime; // [0-100] if (currentTime <= _activeActionData.AnimTime) { return(currentTime * 100 / _activeActionData.AnimTime); } // [200-...] if (currentTime >= ActionHelp.GetActionTotalTime(_activeActionData)) { return(200); } // [101 - TotalTime(animTime + poseTime)] //int leftTime = currentTime - _activeActionData.AnimTime; return(100 + (currentTime - _activeActionData.AnimTime) * 100 / _activeActionData.PoseTime); }
void TickAction(int deltaTime, float dt) { //if (ProcessInterruptEveryFrame()) //{ // return; //} // 检测是否有[等待]中断动画 if (ProcessQueuedInterrupt(deltaTime)) { return; } int nextActionTime = 0; bool thisActionIsFinished = false; if ((_actionTime + deltaTime) > ActionHelp.GetActionTotalTime(_activeActionData)) { nextActionTime = deltaTime; deltaTime = ActionHelp.GetActionTotalTime(_activeActionData) - _actionTime; nextActionTime -= deltaTime; thisActionIsFinished = true; } int nextActionKey = GetNextKey(deltaTime); tempNextKey = nextActionKey; if (nextActionKey > _actionKey) { int nextKeyTime; if (nextActionKey > 100) { nextKeyTime = (_activeActionData.AnimTime + _activeActionData.PoseTime) * nextActionKey / 200; } else { nextKeyTime = _activeActionData.AnimTime * nextActionKey / 100; } // 事件处理 ProcessEvent(nextKeyTime, deltaTime); // hit define // 中断处理 if (ProcessActionInterruptList(_actionKey, nextActionKey)) { return; } // 如果有Pose,尝试进入Pose状态 if (_activeActionData.PoseTime > 0 && _actionKey < 100 && nextActionKey >= 100) { // enter posetime // animation speed 0.001f _ownerUnit.OnEnterPoseTime(); } // hack the event interrupts. } ProcessMoving(dt); _actionTime += deltaTime; beforKey = _actionKey; _actionKey = nextActionKey; if (thisActionIsFinished) { ProcessAnimFinish(nextActionTime); } }