//テキストデータの再作成 bool TryUpdateTextData(string text) { if (CurrentChangeType != ChagneType.All && this.TextData != null && this.TextData.OriginalText == text) { return(false); } else { //TextData作成 this.textData = new TextData(text); if (isDebugLog) { Debug.Log(this.TextData.ParsedText.OriginalText); } //文字データを作成 this.characterDataList = CreateCharacterDataList(this.TextData); //拡張的な情報を作成 this.additional = new UguiNovelTextGeneratorAdditional(this.CharacterDataList, this); //フォントの文字画像を準備・設定 InitFontCharactes(NovelText.font, this.CharacterDataList); //拡張的な情報の初期化 Additional.InitAfterCharacterInfo(this); return(true); } }
//頂点情報を作成 void Refresh() { if (isRequestingCharactersInTexture) { if (isDebugLog) { Debug.LogError("RequestingCharactersInTexture on Refresh"); } return; } //TextData作成 textData = new TextData(NovelText.text); if (isDebugLog) { Debug.Log(textData.ParsedText.OriginalText); } //描画範囲のサイズを設定しておく Rect rect = CachedRectTransform.rect; maxWidth = Mathf.Abs(rect.width); maxHeight = Mathf.Abs(rect.height); //文字データを作成 List <UguiNovelTextCharacter> characterDataList = CreateCharacterDataList(); //拡張的な情報を作成 additional = new UguiNovelTextGeneratorAdditional(characterDataList, this); //フォントの文字画像を準備・設定 InitFontCharactes(NovelText.font, characterDataList); //拡張的な情報の初期化 Additional.InitAfterCharacterInfo(this); //独自の改行処理を入れる AutoLineBreak(characterDataList); //行ごとの文字データを作成 lineDataList = CreateLineList(characterDataList); //テキストのアンカーを適用する ApplyTextAnchor(lineDataList, NovelText.alignment); //Offsetを適用する ApplyOffset(lineDataList); //拡張的な情報の表示位置を初期化 Additional.InitPosition(this); //当たり判定の情報を作成 MakeHitGroups(characterDataList); isInitGraphicObjectList = false; IsRebuidFont = false; }
//フォントの文字画像の作成リクエスト void RequestCharactersInTexture(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional) { List <RequestCharactersInfo> infoList = MakeRequestCharactersInfoList(characterDataList, additional); RequestingCharactersInTexture = true; Font.textureRebuilt += FontTextureRebuildCallback; foreach (RequestCharactersInfo info in infoList) { font.RequestCharactersInTexture(info.characters, info.size, info.style); } Font.textureRebuilt -= FontTextureRebuildCallback; RequestingCharactersInTexture = false; }
//フォントの文字画像の設定を試行 bool TryeSetFontCharcters(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional) { foreach (UguiNovelTextCharacter character in characterDataList) { if (!character.TrySetCharacterInfo(font)) { return(false); } } return(additional.TrySetFontCharcters(font)); }
//フォントのテクスチャだけ再作成(つまり、文字情報のうちUV座標だけ変更) internal void RebuildFontTexture(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional) { throw new NotImplementedException(); }
//フォントの文字画像を準備・設定 internal void InitFontCharactes(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional) { bool isComplete = false; //再試行回数 int retryCount = 5; for (int i = 0; i < retryCount; ++i) { if (TryeSetFontCharcters(font, characterDataList, additional)) { isComplete = true; break; } else { RequestCharactersInTexture(font, characterDataList, additional); if (i == retryCount - 1) { SetFontCharcters(font, characterDataList); } } } if (!isComplete) { Debug.LogError("InitFontCharactes Error"); TryeSetFontCharcters(font, characterDataList, additional); } }
//フォントの文字画像の作成のための情報を作成 List <RequestCharactersInfo> MakeRequestCharactersInfoList(List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional) { List <RequestCharactersInfo> infoList = new List <RequestCharactersInfo>(); foreach (UguiNovelTextCharacter characterData in characterDataList) { AddToRequestCharactersInfoList(characterData, infoList); } List <UguiNovelTextCharacter> additionalCharacterList = additional.MakeCharacterList(); foreach (UguiNovelTextCharacter characterData in additionalCharacterList) { AddToRequestCharactersInfoList(characterData, infoList); } return(infoList); }