脱力駆動開発記

ゲームアプリを作るエンジニアの技術メモ

MENU

GameObjectの文字列プロパティについて

今日もスクリプト最適化のTipsについて。
cocokyoro.hateblo.jp


・GameObject.tag の参照を呼び出すのは重いからやめましょう

というお話。

        • (以下原文の翻訳)

通常C#のオブジェクトが持つ文字列プロパティにアクセスした場合追加のメモリコストが発生することはない。
しかし、GameObjectが持つ文字列のプロパティに関しては文字列を参照した場合に重複してメモリが割り当てられる。

GameObjectが持つ文字列のプロパティはname や tag なんかがある。
特にtagを使って処理を分岐させることは多いはずだ。

if(someGameObject.tag == "Player"){
    //何かする
}

Objectを特定する際にComponentやClassの型やstring以外の値を使って判別するのは問題ない。
しかし、時にはtagをつかって判別せざるをえないような状況もあるかもしれない。
そんなときはGameObject.CompareTag()を使おう。

パフォーマンステスト用のコードを実行してみると、その違いは一目瞭然である。

      • -

というわけで実行してみました。

実行結果がこちら↓
f:id:cocokyoro:20160716000212p:plain
CPU Usageの一つ目の山がtagの比較で二つ目の山がCompareTagを使った比較。
2段目のメモリの使用は前者の方が高く後者はほぼゼロなのがわかると思います。

tagの比較で何かするとか頻繁にやってたので気をつけなきゃなーと思いました (小並