Unityでfloatの値が0にならないケース
Unityちゃんの3DモデルにRigidBodyをアタッチして、キー操作でキャラが動くようにサンプルを作成した際に引っかかった点。
RigidBodyのvelocityとangularVelocityの値のどちらかが0になった時点で走るアニメの再生を停止するようにプログラムを作成した。
if(RB.velocity.magnitude > 0.0f || RB.angularVelocity.magnitude > 0.0f)
{
//アニメ再生処理
}
else
{
//アニメ停止処理
}
問題はこのmagnitudeの値なのだが、toString()で変換してTextに表示すると0になるのだが、実際に値を見てみると「6.837816E - 21」なる謎の値を取っている。これはどうやら0以上という判別になるらしく、アニメ再生処理が実行されてしまう。
おそらくfloat型であることが影響していると思われ、Cなどをしっかり勉強している方には既知の事象なのだろうが、ActionScript書き上がりの自分にはなんのことだかさっぱりである。おそらく以下のURLの内容が理解できれば対処できるのだろうが、全然分かんね。
やっぱきちんと勉強せにゃあかん。。。。
ちなみに本件は条件文を
if(Mathf.Floor(RB.velocity.magnitude) > 0.0f || Mathf.Floor(RB.angularVelocity.magnitude) > 0.0f)
とすることで強引に対応した。やれやれ。