この記事でのバージョン
Unity 2018.3.4f1
はじめに
GameObjectにはTagが設定でき、そのTagを比較して判別するという事はよくありますが、
![]() |
var isPlayer = gameObject.tag == "Player";
実はCompareTagというメソッドを使って比較する事も可能で、
しかもCompareTagの方が処理が早かったりもします。
var isPlayer = gameObject.CompareTag("Player");
と言う事で今回は、gameObject.tagをイコールで比較した場合と、CompareTagを使って比較した場合の
具体的な処理時間の比較記事です。
なお、記事内の処理時間は以下のProcessTimerを使って測っています。
処理時間の比較
早速、比較に使ったプログラムです。
int loopCount = 100000000; //実行回数 string playerTag = "Player"; //gameObject.tagをイコールで比較した場合の処理時間計測 ProcessTimer.Restart(); for (int i = 0; i < loopCount; i++) { var isPlayer = gameObject.tag == playerTag; } Debug.Log("equal : " + ProcessTimer.Stop().ToString("F5")); //CompareTagで比較した場合の処理時間計測 ProcessTimer.Restart(); for (int i = 0; i < loopCount; i++) { var isPlayer = gameObject.CompareTag(playerTag); } Debug.Log("CompareTag : " + ProcessTimer.Stop().ToString("F5"));
![]() |
実際にUnityエディタ上で実行し、処理時間をまとめてみたものが以下の通りです。
実行回数 | ==の処理時間[秒] | CompareTagの処理時間[秒] |
---|---|---|
1 | 0.00012 | 0.00007 |
100 | 0.00015 | 0.00008 |
10,000 | 0.00250 | 0.00116 |
1,000,000 | 0.26340 | 0.09998 |
100,000,000 | 25.13310 | 10.01015 |
前述の通り、CompareTagを使った方が常に早く、1.7倍 ~ 2.6倍もの速度になっています。
ちなみにMac用にビルドし、実機で確認してもほぼ同様の結果が得られました。
![]() |
なお、重いのはイコールでの比較ではなく、gameObject.tagへのアクセスだったりします。
なので、tagをキャッシュし、それをイコールで比較するとむしろCompareTagより早くなります。
int loopCount = 100000000; //実行回数 string playerTag = "Player"; //タグをキャッシュ string thisTag = gameObject.tag; //キャッシュしたタグをイコールで比較した場合の処理時間計測 ProcessTimer.Restart(); for (int i = 0; i < loopCount; i++) { var isPlayer = thisTag == playerTag; } Debug.Log("equal : " + ProcessTimer.Stop().ToString("F5")); //CompareTagで比較した場合の処理時間計測 ProcessTimer.Restart(); for (int i = 0; i < loopCount; i++) { var isPlayer = gameObject.CompareTag(playerTag); } Debug.Log("CompareTag : " + ProcessTimer.Stop().ToString("F5"));
![]() |
おわりに
処理時間が増えるといっても、少ない処理回数では大したものではありませんが、
色んなものが重なって時間が増していくので、ちょっとした事に気を付けて行くと後々楽になります。
特にCompareTagは簡単に使えますし、可読性も上がりそうなので積極的に使って行きましょう。
なお、tagのキャッシュはよほどの事がない限り、しなくて大丈夫だと思います。
ちなみにRiderだと、gameObject.tagをイコールで比較しているとCompareTagの使用を勧めてくれます。
(これでCompareTagの存在を知った)
![]() |