- ベストアンサー
UNITYでFloat型の接尾辞fについて
- UNITYでFloat型の値を表現する際に使用される接尾辞「f」について詳しく説明します。
- また、Vector3構造体やTransformでの位置指定において「f」の有無が位置を変化させることについても解説します。
- 更に、理解を深めるための参考サイトも紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
これは多分、C#の解説を見たんでしょうね。Unityでは、JavaScript(UnityScript)の他、C#などの言語が使えます。Unityのコードの解説を読むときは、それが何の言語で書かれたものかを理解して読む必要があります。 0.5fとかの「f」は、C#で「float型リテラル」を示すものです。リテラルというのはソース・コード内に直接記述される値のことです。C#では、fを付けずに普通に0.5というように書くとdouble型(floatより値の精度が高い値と判断されます。Unityでは、実数を扱うメソッドなどではすべてfloat型が使われているため、そのまま0.5というように書くと叱られるのです。それで、0.5fというように書いて、float型の値にします。 また、Vector3 v = new Vector3(765, 961, 876);というサンプルコードは、これは引数すべてが整数(int値)になっています。C#では、floatなどの実数の引数に整数を指定すると暗示的キャストといって自動的にfloatに変換してくれるんです。だから、わざわざnew Vector3(765f, 961f, 876f);なんて書かなくていいんです。(doubleからfloatへは自動で変換してくれません。だから、0.5はいちいち0.5fと書かないといけません) ただし、これは「C#という言語を使ってプログラムを書くとき」の話です。UnityのソフトでインスペクターのTransformに値を設定するときは、(Unityのソフトの部分はプログラミング言語とは関係ないので)0.5と書きます。0.5fって数字はありませんから、そんな具合に書くと正しく判断されないでしょう(おそらく、ゼロ扱いになるのでは)。 またUnityのプログラムでも、JavaScriptではソースコードはすべて0.5と書かれます。0.5fとは書きません(書いても動きますが意味ありません)。言語が違えば、書き方も変わってくるのです。 Unityの解説サイトなどでは、C#とJavaScriptが混在しています。そして大抵の場合、C#などの言語は既に理解しているものとして詳しい説明は省いてます。ですので、まずはC#について初歩から学んでおくとよいと思います。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
これは Unity の仕様というよりは C 言語およびその表記を流用している言語の大半で採用している言語仕様の話です。 たとえば 0.5 という値をそのまま書いた場合。これは実数値の 0.5 として扱われます。しかし、上記の大半の言語では実数値を表す型は float と double の 2 種類があり、0.5 が float と double のどちらの型かを仕様で決めなくてはなりません。そして、上記の大半の言語ではこれを double 型の 0.5 と規定しています。 では float 型の 0.5 がほしい場合はどうしたらいいか。そのときのために f を後置した 0.5f という表記を float 型の 0.5 として扱うと言語仕様で規定しています。 http://msdn.microsoft.com/ja-jp/library/aa691085(v=vs.71).aspx では > Vector3 v = new Vector3(765, 961, 876); になぜ f を付けていないかですが、この場合はこう書かれた時点では数値に . が使われていないため整数型の値としてまず扱われます。しかし、整数型の値を float 型の引数の値として扱う時点で暗黙の型変換が行われます。 http://msdn.microsoft.com/ja-jp/library/ms173105.aspx http://msdn.microsoft.com/ja-jp/library/y5b434w4.aspx つまり、この場合は f をつけなくてもその値が float に自動的に変換されることになっているため、つけてもつけなくてもそれぞれの値は float 型の値として処理されます。
お礼
回答ありがとうございます! 参考リンクも教えて頂き、感謝致します。 まずは、c#の初歩について学んでいきたいと思います。
お礼
回答ありがとうございます! 丁寧に解説頂き、とても良くわかりました。 C#の初歩について、並行して学んでいきたいと思います。 ありがとうございました。