public float w; //表示幅 public CharacterRenderInfo(CharData charInfo, FontRenderInfo fontInfo, float x, float y, float w, bool isAutoLineBreak) { this.charInfo = charInfo; this.fontInfo = fontInfo; this.x = x; this.y = y; this.w = w; this.isAutoLineBreak = isAutoLineBreak; }
/// <summary> /// 指定の文字の描画情報取得 /// もし、未作成だったら作成してから描画情報を返す /// </summary> /// <param name="c">文字</param> /// <returns>描画情報</returns> public FontRenderInfo GetRenderInfoCreateIfMissing(char c, float pixelsToUnits) { FontRenderInfo renderInfo; bool isMakeSprite = false; if (!renderInfos.TryGetValue(c, out renderInfo)) { isMakeSprite = true; } else { if (null == renderInfo.Sprite) { isMakeSprite = true; } } if (isMakeSprite) { CharacterInfo info; if (font.GetCharacterInfo(c, out info, size, style)) { Texture2D texture = font.material.mainTexture as Texture2D; float x = info.uv.x * texture.width; float w = info.uv.width * texture.width; float y = info.uv.y * texture.height; float h = info.uv.height * texture.height; Rect rect = new Rect(x, y, w, h); Vector2 pivot = new Vector2(0.5f, 0.5f); Sprite sprite = Sprite.Create(texture, rect, pivot, pixelsToUnits, 0, SpriteMeshType.FullRect); renderInfo = new FontRenderInfo(c, info, sprite, OffsetY); if (renderInfos.ContainsKey(c)) { renderInfos[c] = renderInfo; } else { renderInfos.Add(c, renderInfo); } } else { Debug.LogError(LanguageErrorMsg.LocalizeTextFormat(ErrorMsg.UnknownFontData, c)); return(null); } } return(renderInfo); }
public static Vector3 GetFontSpriteAngles(FontRenderInfo fontInfo) { //Fillped判定 #if UNITY_4_6_OR_EARLIER if (fontInfo.CharInfo.flipped) #else if (Mathf.Approximately(fontInfo.CharInfo.uvTopLeft.x, fontInfo.CharInfo.uvTopRight.x)) #endif { return(new Vector3(0, 0, 90)); } else { return(new Vector3(180, 0, 0)); } }
public static Vector3 GetFontSpriteAngles( FontRenderInfo fontInfo) { //Fillped判定 #if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 if (fontInfo.CharInfo.flipped) #else if( Mathf.Approximately( fontInfo.CharInfo.uvTopLeft.x, fontInfo.CharInfo.uvTopRight.x ) ) #endif { return new Vector3(0, 0, 90); } else { return new Vector3(180, 0, 0); } }
//文字の表示位置の調整値を取得 float GetCharacterRenderWidthOffsetX(FontRenderInfo renderInfo) { return(renderInfo.GetOffsetX(IsKerning) * TextScale); }
//各文字の描画データを作成 List <CharacterRenderInfo> CreateRenderInfo(TextData textData) { List <CharacterRenderInfo> infoList = new List <CharacterRenderInfo>(); if (textData == null) { return(infoList); } float y = -Size; bool isOverHeight = false; while (infoList.Count < textData.Length && !isOverHeight) { float x = 0; while (infoList.Count < textData.Length) { CharData c = textData.CharList[infoList.Count]; FontRenderInfo renderInfo = null; float w = 0; bool isAutoLineBreak = false; if (c.IsBr) { } else if (char.IsWhiteSpace(c.Char)) { w = Space; } else { renderInfo = Font.GetRenderInfoCreateIfMissing(c.Char, pixcelsToUnits); if (renderInfo != null) { w = GetCharacterRenderWidth(renderInfo); //横幅を越えるなら自動改行 isAutoLineBreak = IsOverMaxWidth(x, w); } } //文字の追加 CharacterRenderInfo charInfo = new CharacterRenderInfo(c, renderInfo, x, y, w, isAutoLineBreak); infoList.Add(charInfo); x += w + LetterSpace; //改行処理 if (charInfo.IsBr) { if (isAutoLineBreak) { //自動改行 AutoLineBreak(infoList); } float offsetY = -(LineSpace + Size); //縦幅のチェック if (IsOverMaxHeight(y + offsetY)) { isOverHeight = true; } else { y += offsetY; } break; } } } MoveLayout(y, infoList); return(infoList); }
/// <summary> /// 指定の文字の描画情報取得 /// もし、未作成だったら作成してから描画情報を返す /// </summary> /// <param name="c">文字</param> /// <returns>描画情報</returns> public FontRenderInfo GetRenderInfoCreateIfMissing(char c, float pixelsToUnits) { FontRenderInfo renderInfo; bool isMakeSprite = false; if (!renderInfos.TryGetValue(c, out renderInfo)) { isMakeSprite = true; } else { if (null == renderInfo.Sprite) isMakeSprite = true; } if (isMakeSprite) { CharacterInfo info; if (font.GetCharacterInfo(c, out info, size, style)) { Texture2D texture = font.material.mainTexture as Texture2D; Rect rect = WrapperUnityVersion.GetUvRect( ref info, texture ); Vector2 pivot = new Vector2(0.5f, 0.5f); Sprite sprite = Sprite.Create(texture, rect, pivot,pixelsToUnits,0,SpriteMeshType.FullRect); renderInfo = new FontRenderInfo(c, info, sprite, OffsetY, size ); if (renderInfos.ContainsKey(c)) { renderInfos[c] = renderInfo; } else { renderInfos.Add(c, renderInfo); } } else { Debug.LogError( LanguageErrorMsg.LocalizeTextFormat(ErrorMsg.UnknownFontData, c) ); return null; } } return renderInfo; }
//文字の表示位置の調整値を取得 float GetCharacterRenderWidthOffsetX(FontRenderInfo renderInfo) { return renderInfo.GetOffsetX(IsKerning) * TextScale; }
public float w; //表示幅 public CharacterRenderInfo(CharData charInfo, FontRenderInfo fontInfo, float x, float y, float w, bool isAutoLineBreak) { this.charInfo = charInfo; this.fontInfo = fontInfo; this.x = x; this.y = y; this.w = w; this.isAutoLineBreak = isAutoLineBreak; }