Lerp() public static method

public static Lerp ( AniBoxCollider left, AniBoxCollider right, float lerp ) : AniBoxCollider
left AniBoxCollider
right AniBoxCollider
lerp float
return AniBoxCollider
Beispiel #1
0
        public void ResetBoxLerpFrameSegment(int frame)
        {
            //搜索开始与结束帧
            if (frames[frame].box_key)
            {
                return;
            }
            if (frame <= 0 || frame >= frames.Count - 1)
            {
                return;
            }

            int ibegin = frame;

            for (; ibegin >= 0; ibegin--)
            {
                if (frames[ibegin].box_key)
                {
                    break;
                }
            }
            if (ibegin == frame)
            {
                return;
            }
            int iend = frame;

            for (; iend < frames.Count; iend++)
            {
                if (frames[iend].box_key)
                {
                    break;
                }
            }
            if (iend == frame)
            {
                return;
            }
            //建立对位关系
            Dictionary <AniBoxCollider, AniBoxCollider> map = new Dictionary <AniBoxCollider, AniBoxCollider>();
            var leftlist  = frames[ibegin].boxesinfo;
            var rightlist = frames[iend].boxesinfo;

            for (int i = 0; i < leftlist.Count; i++)
            {
                //对位
                AniBoxCollider boxcollider = rightlist.Find(b => b.mIndex == leftlist[i].mIndex && b.mBoxType == leftlist[i].mBoxType);
                //
                map.Add(leftlist[i], boxcollider);
            }
            //找到两个Box关键帧之间插值
            for (int i = ibegin + 1; i < iend; i++)
            {
                float d1   = (i - ibegin);
                float d2   = (iend - i);
                float lerp = d1 / (d1 + d2);
                List <AniBoxCollider> colliderList = new List <AniBoxCollider>();
                foreach (var b in map.Keys)
                {
                    if (map[b] == null)
                    {
                        colliderList.Add(b);
                        continue;
                    }
                    else
                    {
                        colliderList.Add(AniBoxCollider.Lerp(b, map[b], lerp));
                    }
                }
                frames[i].boxesinfo = new List <AniBoxCollider>(colliderList);
            }
        }