Esempio n. 1
0
    public static int SetKey(AnimationCurve curve, float time, float value)
    {
        float prevTime = PlayManually.prevFrameTime;

        //Debug.Log("time:" + time);
        //Debug.Log("prevTime:" + prevTime);

        if (PlayManually.IsPlaying() && prevTime != time)//リアルタイムレコードなら
        {
            var keys = curve.keys;
            for (int i = keys.Length - 1; i >= 0; i--)
            {
                //ループしてたら
                if (prevTime > time)
                {
                    //前回以降のキーは削除
                    if (keys[i].time > prevTime)
                    {
                        curve.RemoveKey(i);
                    }

                    //timeより前のキーは削除
                    else if (keys[i].time <= time)
                    {
                        curve.RemoveKey(i);
                    }
                }
                else if (keys[i].time > prevTime && keys[i].time <= time)
                {
                    //Debug.Log("RemoveKey:" + i + "time:" + keys[i].time);
                    //前回から今回までのキーは削除
                    curve.RemoveKey(i);
                }
            }
        }
        else//再生中じゃないなら
        {
            var keys = curve.keys;
            for (int i = keys.Length - 1; i >= 0; i--)
            {
                if (keys[i].time == time)
                {
                    //同じフレームのキーは削除
                    curve.RemoveKey(i);
                }
            }
        }

        //Debug.Log("AddKey time:" + time);
        return(curve.AddKey(time, value));
    }
Esempio n. 2
0
    private void RecordObject()
    {
        AnimationClip clip = wAnimationWindowHelper.GetAnimationWindowCurrentClip();

        if (clip == null)
        {
            return;
        }
        if (PlayManually.IsPlaying() && clip.length < wAnimationWindowHelper.GetCurrentTime())
        {
            return;
        }                                                                                                  //クリップが終了してたら

        Transform rootObjectTransform = wAnimationWindowHelper.GetAnimationWindowCurrentRootGameObject().transform;
        string    path = AnimationRecorderHelper.GetTransformPathName(rootObjectTransform, followTarget.transform);

        //今編集中のアニメーターと無関係なオブジェクトならレコードしない
        if (path == null)
        {
            return;
        }

        float time;

        if (PlayManually.IsPlaying())
        {
            time = PlayManually.nowFrameTime;
        }
        else
        {
            time = wAnimationWindowHelper.GetCurrentTime();
        }

        AnimationWindowController.SetCurve(time, path, followTarget.transform, clip);

        /*
         * if (generateNodes.RecordAllChildObjects)
         * {
         *  generateNodes.RecordAllUngrab();
         * }*/

        //Grabする前のtransformを記録しておく

        /*savedPosition = followTarget.localPosition;
         * savedQuaternion = followTarget.localRotation;
         * savedScale = followTarget.localScale;*/
    }