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:エルボーは、GameObjectこのエラーは Visual Studio にあります

4

1 に答える 1

3

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 に答える