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)); }
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;*/ }