[Unity]CutScene工具Cinema Suite Rotion 角度不能負數方向旋轉的bug修正。
阿新 • • 發佈:2018-11-03
美術使用這個工具做動畫時,對一些物體旋轉,結果想 y軸方向 從0 往-30° 旋轉,結果編輯模式自動會變出來一個 330°的關鍵幀。。。。完全不是美術預期。
研究發現原來 Unity的根本機制, 編輯工具Vector3支援負數,但 賦值給 localEulerAngles,unity自動會換算到 0~360
沒法處理這裡。
只能在編輯器,判斷是否要插關鍵幀的程式碼裡做判斷。
CinemaCurveControl.cs 裡,checkToAddNewKeyframes 函式裡 加了判斷是修改localEulerAngles,則把負數的情況換算一下,如果一致則不要加關鍵幀了。 完美解決這個問題。
else if (typeInfo == PropertyTypeInfo.Vector3) { Vector3 vec3 = (Vector3)value; float curve1Value = data.Curve1.Evaluate(state.ScrubberPosition); float curve2Value = data.Curve2.Evaluate(state.ScrubberPosition); float curve3Value = data.Curve3.Evaluate(state.ScrubberPosition); //解決編輯轉向時 角度不能為負的bug if ("localEulerAngles" == data.PropertyName) { if (curve1Value < 0 && Mathf.Approximately(curve1Value % 360 + 360, vec3.x)) { vec3.x = curve1Value; } if (curve2Value < 0 && Mathf.Approximately(curve2Value % 360 + 360, vec3.y)) { vec3.y = curve2Value; } if (curve3Value < 0 && Mathf.Approximately(curve3Value % 360 + 360, vec3.z)) { vec3.z = curve3Value; } } hasDifferenceBeenFound |= addKeyOnUserInteraction(vec3.x, curve1Value, data.Curve1, state.ScrubberPosition); hasDifferenceBeenFound |= addKeyOnUserInteraction(vec3.y, curve2Value, data.Curve2, state.ScrubberPosition); hasDifferenceBeenFound |= addKeyOnUserInteraction(vec3.z, curve3Value, data.Curve3, state.ScrubberPosition); }