こんにちは、Unityエンジニアのオオバです。
ふと気になったシリーズです。
Unityを使っていると、ありがたいことに様々な便利関数がラップ、または拡張追加提供されています。
例えばC#の算術関連クラスであるSystem.Math
をラップ & 拡張しているUnityEngine.Mathf
というものがUnityでは提供されています。
その中でUnityEngine.Mathf.Abs
関数は引数の絶対値を求めてくれますが、中身を覗くと以下のコードで記述されています。
内部的にはSystem.Math.Abs
関数を実行しているだけです。
ではUnityでコードを書く場合、UnityEngine.Mathf.Abs
とSystem.Math.Abs
どちらを使えばよいの?っていう話になると思いますが、これはケースによって異なると思います。
パフォーマンス観点から見た場合
上記のコードを使い、Unityプロファイラで負荷を確認すると、1回の実行では目立った差は出てきませんが、10000回実行すると顕著に出てきます。
結果は明らかですが、
UnityEngine.Mathf.Abs
はSystem.Math.Abs
に比べて約2倍の負荷がかかっているということになります。 これは、UnityEngine.Mathf.Abs
がMathf.Abs
とMath.Abs
の2つの関数をまたいでいるためだと思われます。
ということで、パフォーマンスチューニングするときの手段としてはMathクラスをそのまま使うというのは1つの手かもしれません。
マルチプラットフォーム対応観点
Unityはワンソースで複数のプラットフォームに対応するように作られているため、UnityEngine.Mathfクラスに限りませんが、UnityEngine配下のクラスを使ったほうが安全だと思われます。
※注意 : 逆のパターンもありえます
チーム開発観点
チーム内でコードレビューをすると思いますが、その際にMathfとMathどっち使うの?みたいな議論が出て、このケースだと使っていいけど、このケースはやめようというコードレビューの複雑化が予想されます。大きな問題が発生していないのであればMathfクラスを使ったほうが、シンプルで良いと思います。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
まとめ
パフォーマンスに余裕がある場合は素直にUnityEngine.Mathfを使ったほうが良いという自分の中での結論。
この記事が気に入ったらフォローしよう
- Unity2017.3.1f1