検証環境
- Unity 2019.3.10f1
- TextMesh Pro 2.0.1
概要
TMP_Text.cs を見てみると
public string text { get { return m_text; } set { if (m_text == value) return; m_text = old_text = value; m_inputSource = TextInputSources.String; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); } }
text プロパティの setter では、文字列が変わらない場合は return されるようになっているが
public void SetText(string text) { SetText(text, true); } public void SetText(string text, bool syncTextInputBox) { //if (text == old_text) return; //old_text = text; m_inputSource = TextInputSources.SetCharArray; StringToCharArray(text, ref m_TextParsingBuffer); #if UNITY_EDITOR // Set the text in the Text Input Box in the Unity Editor only. // TODO: Could revise to convert to string literal if (syncTextInputBox) m_text = text; #endif m_isInputParsingRequired = true; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
SetText 関数では文字列が変わらない場合に return されないようになっている
そのため、TextMesh Pro のオブジェクトが存在する Canvas に
他にもたくさんの UI オブジェクトが存在する場合、
SetText するだけでリビルドが走り、処理に時間がかかることがある