概要
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の内容をキャッシュして変数側にアクセスすることをお勧めします。