こんにちは、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を使ったほうが良いという自分の中での結論。

筆者のXをフォローしよう
- Unity2017.3.1f1







