您的位置:首页 > 移动开发 > Unity3D

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

2018-01-04 20:43 501 查看
美术使用这个工具做动画时,对一些物体旋转,结果想 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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: