コード例 #1
0
    public void SyncKeyFramesWithSimpleAnimator()
    {
        if (hitboxes == null)
        {
            return;
        }

        //simpleanimationに存在しないステートのデータがHitBoxesに入っている場合削除
        var states = simpleAnimation.GetEditorStates();

        hitboxes.data.RemoveAll(hitboxkeyval => !states.Any((s) => s.name == hitboxkeyval.Key));

        foreach (var state in states)
        {
            //ToInt32は四捨五入するので、多少の誤差があっても正確にフレーム数を取得できる
            var numframe = Convert.ToInt32(state.clip.length * state.clip.frameRate);

            //keyframesの数が変化しない場合
            if (hitboxes[state.name].keyframes.Count == numframe)
            {
                continue;
            }
            //keyframesが縮小する場合
            else if (hitboxes[state.name].keyframes.Count > numframe)
            {
                hitboxes[state.name].keyframes.RemoveRange(numframe, hitboxes[state.name].keyframes.Count - numframe);
            }
            //keyframesが拡大する場合
            else
            {
                var addSize = numframe - hitboxes[state.name].keyframes.Count;
                for (int i = 0; i < addSize; i++)
                {
                    hitboxes[state.name].keyframes.Add(new KeyFrameData());
                }
            }
        }
    }