public void OnUpdate(AnimProxy animProxy, TrailMgr.InterpolationMode interpolationMode) { if (animProxy && animProxy.IsPlaying(clip)) { RawSample(animProxy, interpolationMode); } BuildTrailMesh(); }
public PlayerStructs(Transform trans) { //注意 此时可以将AnimProxy传给Model temp = trans; control = new PosImplementation(trans); animControl = new AnimProxy(); targetTime = RPGLogicBase.Time.realTimeSinceStartUp + Random.Range(0, 5f); rotControl = new RotationImplementation(trans); GameLoopTrigger.inst.RegisteUpdate(Update); }
/// <summary> /// 依据clip中固定在武器上的trail对象的移动轨迹获得一系列采样点 /// </summary> void RawSample(AnimProxy animProxy, TrailMgr.InterpolationMode interpolationMode) { // 动画的播放进度 float normalizedTime = animProxy.GetNormalizedTime(clip); // 遍历设定的每个动画采样时段(注意:时段之间不能有重叠) foreach (var clipNormalizedTime in clipNormalizedTimes) { if (normalizedTime < clipNormalizedTime.startNormalizedTime) { // 本时段尚未开始 continue; } if (normalizedTime < clipNormalizedTime.stopNormalizedTime) { // 进入指定动画进度 if (clipNormalizedTime.sampling == false) { // 开始本时段采样 clipNormalizedTime.sampling = true; for (int i = 0; i < _rawSamples.Count; ++i) { SamplePointData.pool.Collect(_rawSamples[i]); } _rawSamples.Clear(); } } else { // 离开指定动画进度 if (clipNormalizedTime.sampling) { // 停止采样 clipNormalizedTime.sampling = false; } continue; } // 添加原始样本 SamplePointData raw = SamplePointData.pool.Get(); raw.pos = trail.transform.position; raw.forward = trail.transform.forward; raw.right = trail.transform.right; raw.sampleTimer = Time.timeSinceLevelLoad; _rawSamples.Add(raw); // 平滑插值处理 MakeSmooth(/*Mathf.InverseLerp(clipNormalizedTime.startNormalizedTime, * clipNormalizedTime.stopNormalizedTime, normalizedTime)*/interpolationMode); } }