Beispiel #1
0
            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;
            }
Beispiel #2
0
        /// <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);
			}
		}
Beispiel #5
0
 //文字の表示位置の調整値を取得
 float GetCharacterRenderWidthOffsetX(FontRenderInfo renderInfo)
 {
     return(renderInfo.GetOffsetX(IsKerning) * TextScale);
 }
Beispiel #6
0
        //各文字の描画データを作成
        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;
			}