示例#1
0
        public void OnUpdate(AnimProxy animProxy, TrailMgr.InterpolationMode interpolationMode)
        {
            if (animProxy && animProxy.IsPlaying(clip))
            {
                RawSample(animProxy, interpolationMode);
            }

            BuildTrailMesh();
        }
示例#2
0
    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);
    }
示例#3
0
        /// <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);
            }
        }