目次

ダイナミックフォント使用時にUILabelのテキストが壊れる現象について

フォントテクスチャのサイズを超えてテキストを書き込もうとした時に、 テクスチャの再構築が走るため1フレーム壊れることがある。(3.9.4で確認) NGUIの不具合なのかUnityの不具合なのかは不明。

修正方法

UILabel.cs 983 行目あたりのOnFontChanged 関数を修正します。

===== 対策コード

#define DYNAMIC_FONT_BUG_FIX 
 
if (mTempDrawcalls != null)
{
	for (int i = 0, imax = mTempDrawcalls.Count; i < imax; ++i)
	{
		UIDrawCall dc = mTempDrawcalls[i];
#if DYNAMIC_FONT_BUG_FIX
		if (dc.panel != null)
        {
	        dc.panel.FillDrawCall(dc);
	        dc.panel.Refresh();
        }
#else
        if (dc.panel != null) dc.panel.FillDrawCall(dc);
#endif

DYNAMIC_FONT_BUG_FIX 定義でくくった部分。パネルのリフレッシュを挟みました。

もし、上記修正で他の不具合が出てしまった場合は、壊れるUILabelを表示する親のUIPanelだけリフレッシュする様にすれば良いです。