In UAnimSequenceBase::GetTimeAtFrame(const int32 Frame)
function,FrameTime = GetNumberOfFrames() - 1
float UAnimSequenceBase::GetTimeAtFrame(const int32 Frame) const
{
const float FrameTime = GetNumberOfFrames() > 1 ? SequenceLength / (float)(GetNumberOfFrames() - 1) : 0.0f;
return FMath::Clamp(FrameTime * Frame, 0.0f, SequenceLength);
}
But In SAnimTimeline::OnMouseButtonUp
, did not subtract 1
uint32 NumFrames = AnimSequence->GetNumberOfFrames();
int32 CurrentFrameNumber = CurrentFrameFraction * NumFrames;
float CurrentFrameFraction = CurrentFrameTime / SequenceLength;
CurrentFrameFraction = (float)CurrentFrameNumber / (float)NumFrames;
In order to use the function UAnimSequence::CropRawAnimData
, the method in SAnimTimeline::OnMouseButtonUp
is correct,and the time given by the function GetTimeAtFrame
will cause CropRawAnimData
to cut one more frame. I want to know why?