[Unity]CutScene工具Cinema Suite Rotion 角度不能负数方向旋转的bug修正。

美术使用这个工具做动画时,对一些物体旋转,结果想 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);
                    
                }


猜你喜欢

转载自blog.csdn.net/zhenmu/article/details/78975149