unityでいってみよう!

unityがチョットワカル位の人のブログ

TextAsset.textプロパティの実装を比較してみよう!(Unity2019vsUnity2020)

概要

Unity2020へバージョンアップしてから、TextAssetのtextプロパティの処理負荷が上がっている気がしたので、Unityのソースコードを確認したらプロパティへアクセスする毎にbytesデータを処理するように変更されていたというお話しです。

Unityのソースコードについて

UnityのソースコードC#で実装されている部分はGitで公開されているので、なんかUnity怪しいと思ったら確認してみましょう。 github.com

TextAsset.textの比較

Unity2019.4及びUnity2020.3ではそれぞれ下記のようにtextプロパティが実装されています。

Unity2019.4の場合

public extern string text { get; }

Unity2020.3の場合

public string text
{
     get
     {
          return DecodeString(bytes);
     }
}

Unity2019では単純なgetterでしたが、Unity2020ではDecodeStringという処理を噛ましてその返値がreturnされています。 DecodeStringの実装もTextAsset.csで行われていますが処理内容を見ると、EncordingClassを使って変換処理を行っているようです。 ちょっと前にCamera.mainでFindTagをやっていたのを直したと思ったら、今度はTextAsset.textが改悪されてしまったようです。 もし、TextAsset.textへ頻繁にアクセスするような部分があるのであれば、変数にtextの内容をキャッシュして変数側にアクセスすることをお勧めします。