14

这可能是我一段时间以来收到的最好的错误消息,我很好奇出了什么问题。

原始代码

float currElbowAngle = LeftArm ? Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

我正在使用 Unity3d 和 C#;LeftArm 是一种bool类型,根据文档 Elbow.transform.localRotation.eulerAngles.y返回一个float值。

这段代码给了我错误:

存在从“float”和“float”以及从“float”到“float”的隐式转换

这修复了它:

float currElbowAngle = LeftArm ? (float) Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

所以我的问题是:试图沟通的错误是什么,实际上出了什么问题?

更新 1: Elbow 是 aGameObject并且此错误在 Visual Studio 中

4

1 回答 1

3

三元 (e?a:b) 运算符对于类型系统来说稍微复杂一些,因为双方都需要给出相同的返回类型。如果那里有一个微妙的错误,我不会感到惊讶。编译器偶尔让我们发笑是件好事。

这可能也解决了它:

float currElbowAngle = LeftArm ? 0.0f + Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

我推测问题在于你的真分支是左值,而假分支是右值。我的解决方法使两个分支都成为右值。

于 2013-01-18T00:34:05.780 回答