2013-10-18 14:58:57 jbjwpzyl3611421 阅读数 10590

最方便的思路大概就是用GUISkin了。

 

先在windows的Font文件夹下弄来一个中文字体比如宋体.ttf,把这个字体文件放在unity3d的Assets目录下。这样unity3d就会自动加载这个字体。要使用这个字体还需要建立一个GUISink。Assets->Creat->GUI Sink。建立好GUISink后点开属性,最上面Font项的字体改为新加入的中文字体。

 

这边我发现依然不能显示中文,得把Font中的Character变为unicode才可以。。

 

复制代码
using UnityEngine;
using System.Collections;

public class Font : MonoBehaviour {
public GUISkin mySkin;
void OnGUI(){
   if(mySkin){
    GUI.skin = mySkin;
   }
   GUI.Button(new Rect(10,10,50,50),"字体显示测试");
}
}
复制代码


这样就可以显示中文了。。

 

接下来要做的是从文本文件中读取中文并显示。

可以用到TextAsset这个东西,然后用C#的IO来一行行读取。

复制代码
void LoadDataFromTxt(string filename)
    {
        TextAsset txtAsset = (TextAsset)Resources.Load("Config/"+filename.Split('.')[0]);
        StringReader reader = new StringReader(txtAsset.text);
        string line;
        
        string[] lineData;
        
        line = reader.ReadLine();
        while (line != null)
        {
            lineData = line.Split('');
            
            line = reader.ReadLine();
        }
    }
复制代码



文本须存为unicode的格式。

 

另一种方法是,把要用的文字做成图片来显示。bitmap方式

http://www.angelcode.com/products/bmfont/

上面是一个文字生成工具,很不错。

和UIToolkit配合着来用,很方便。

2019-02-26 02:54:12 Wei_Yuan_2012 阅读数 1574

Unity3D中支持动态字体静态字体两种格式字体,动态字体即使用TTF格式字体库,静态字体则需要自己打包字体图集。动态字体和静态字体区别在于,动态字体如果出现字体库中不存在的字体,会使用系统字体,而静态字体则不会,而且静态字体是图片,字体大小通过缩放来改变。Unity3D也有自带的字体,Windows下自带字体为Arial。如果使用Unity3D的自带字体Arial字体,在某些机型上可能显示不全。因为Arial是英文字体,并不包含中文字体,在程序运行过程中如果遇到字库中没有的字,程序就会从系统的默认字体库中查找对应的文字,如果系统默认的字库中也没有这个字,那么就会造成字体不显示问题。在Android系统中Unity3D默认会去查找名为DroidSansFallback的字体,因为这个字体是Android的默认字体,但是因为Android系统的可定制性,很多手机厂商会去修改默认字体。Android系统是根据字体的文件名称来找字体的,但Unity3D识别字体却是通过字体内部的设置来识别字体的,所以即使在Android手机中有DroidSansFallback.ttf字体,也有可能导致Unity3D找不到这个字体。由于上面的原因,尽量不要使用Unity3D的自带字体Arial,除非你做的游戏是纯英文的。

Unity3D的动态字体:

想要在Untiy3D中使用动态字体,只要把TTF格式字体库导入到Unity3D工程中,然后在需要使用该字体的地方设置字体类型Font为该TTF字体库即可。对于导入工程中的TTF字体库,可以在控制面板中设置一些属性,比如字体大小,渲染模式等。

  

其中,Font Size就是设置字体大小,数值越大,设置文字时字体对应的texture越大。Rendering Mode 设置字体的渲染模式,这个会直接影响字体在游戏中的显示清晰度,Smooth 是渲染字体纹理最快的抗锯齿模式,Hinted Smooth 通过字体像素描边的抗锯齿模式,Hinted Raster 是对于小号字体显示最清晰的无抗锯齿渲染模式,OS Default 是使用系统字体渲染模式,只能用于动态字体,因为静态字体是在打包时候生成的。Character 设置字体库的字体集,比较常用的是Dynamic,选择该项就是动态字体,只要改字体库中有的字体都能显示,另外Custom Set 选项让我们可以自定义只使用字体库中的某些字体集合,如当我们设置如下图,

那么我们就只能使用“1.2.3”三个字符,其他字符即使TTF中有也不显示。当我们设置该选项的时候,其实相当于使用了静态字体库,因为他生成了文字图集和贴图,如上图的Font Material和Font Texture,并且可以在Debug模式下看到该自定义字体图集的UV信息。

Incl.FontData 若勾选,在导出包的时候把字体添加到包中,若不勾选,则不会将该字体打包,程序运行时会从FontNames列表里检索需要的字体,如果没有,字体就不显示。Font Names 这个参数的主要作用是设置替代字体用的,当程序需要某一个字体时,首先会从当前字体查找字符,如果没有,会依次查找FontNames列表里的其它字体,直到找到或者找完为止。

Unity3D的静态字体:

Unity3D的静态字体,也称为自定义字体,它可以支持美术字体。使用Unity3D的静态字体需要先制作静态字体库,可以借助BMFont这个工具来生成字体图集和UV信息,得到png图片和fnt文件。

接下来使用Unity3D生成静态字体库。导入字体图集,勾选Alpha From Grayscal,新建材质球,材质球Shader指定为GUI/Text Shader。

接着创建Custom Font,配置字体UV信息,这个UV信息保存在fnt文件中,如果图集不大可以手动设置一下,如果很大可以通过代码来设置。如果想要在项目中使用静态字体库,则和动态字体一样,在需要使用该字体的地方设置字体类型Font为该静态字体库即可。

参考:

【Unity】UGUI 如何使用CustomFont(自定义字体)

Unity中制作自定义字体的两种方式

拓展:

常见字体格式及TTF文件制作

字体库剥离和精简

2019-08-05 20:58:08 qq_39588003 阅读数 372

Unity支持所有的 .ttf 的字符集,默认的字体为Arial

设置其它字体前,需要得到一个 .ttf 的字符集,获取的方法很多,可以在网上下载,或者复制本机电脑中的字符集。

win10电脑中所有字体存放路径为:C:\Windows\Fonts,打开文件夹后,选择需要的字体,将其拖入unity当前工程资源的文件夹下。

在“project”视图中选择“Creat” ==》“GUI Skin” 菜单项,创建一个GUI皮肤来设置自定义字体。

图中 1 为从别处拖进来的字体,2 为Unity的默认字体,3 为Unity自带的字体以及从外面导入的字体(从外面将某个字体拖进工程资源后,这里立马就会显示该字体),4 将导入的字体设置为某个控件的显示字体。

另外也可以自己设置字体:选择“Creat” ==> “Custom Font” 菜单项即可

2017-05-04 20:17:05 yongh701 阅读数 4907

启动场景一般直接简单放个影片,或者高端些则使用淡入效果完成。如下图所示:


这使用Unity3D很容易完成,脚本也很简单,就是透明度Alpha变大、字体变大与延迟函数构成的。

同时,这里的字体换成微软雅黑了,借此说明Unity3D如何导入字体的。

首先,我们从C:\Windows\Fonts文件夹拷贝出自己的喜欢的字体到一个纯英文的路径。微软雅黑拷贝出来有两个文件,msyh.ttf是普通的微软雅黑字体,而msyhbd.ttf是加粗的微软雅黑字体,msyh.ttf是比较常用的。在Unity3D的Asset新建一个Fonts文件夹,只能叫这个名字,以便编译的时候发布简单。将msyh.ttf导入进来。


之后设置一个Canvas如《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)调成自适应屏幕,然后放入一个UI->Text。透明度设置成0。字体设置成微软雅黑。垂直、水平对齐,空白框留大一点,因为一会儿还要放大。Text的内容、字号随意。


之后赋予Text如下的脚本Fade.cs:

using UnityEngine;
using UnityEngine.UI;//用到UI必须的头文件
using System.Collections;

public class Fade : MonoBehaviour
{
    Text text;
    float increment;//增量

    void Start()
    {
        /*初始化*/
        text = this.GetComponent<Text>();//因为脚本将会直接赋予给Text,因此直接将其GameObject转化为Text即可
        increment = 0;//初始为0
    }

    void Update()//每帧都会被执行
    {
        if (text.color.a <= 1)//虽然外部显示的是255,但在脚本内alpha的从0到1的
        {
            /*颜色的变化*/
            increment += 0.5f * Time.deltaTime;//增量每帧都增加
            /*这里我也想直接写成text.color.a=increment,但无奈这东西是只读属性,只能如下写法*/
            Color color = text.color;
            color.a = increment;
            text.color = color;
            /*大小的变化*/
            Vector3 scale_unit_vector = new Vector3(1 + increment, 1 + increment, 1 + increment);
            text.transform.localScale = scale_unit_vector;//Unity3D一个物体的大小只能修改缩放尺寸来控制
            //实际大小就是固定的原始大小*单位增量。localScale代表单位增量。
        }
        else//当Text变得完全不透明
        {
            StartCoroutine(WaitAndRun(2.0F));//2s后执行下面WaitAndRun函数
        }
    }

    IEnumerator WaitAndRun(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);
        Debug.Log("进入下一Scene");//使用Application.LoadLevel(sceneName);或者做其它的事情
    }
}
基本上注释已经说明得比较清楚了,其中这里延迟执行,类似于《【Unity3D】利用预设、实例化Instantiate和协程完成生成器》(点击打开链接)中的协程。协程,也就是定时执行函数,就是一个在不断调用延迟执行函数的函数。

2014-07-09 10:43:19 wangwenzl 阅读数 55
unity中文显示:


1. 将ttf字体文件拖到项目的Assets目录下


2. 激活Unity会自动导入字体,可以调整导入选项,unity3d


    Inspector窗口中True Type Font Importer项下Character选择Dynamic则只会导入用到的字符,如果选择Unicode则会导入所有字符。当然,如果导入全部字符可能会生成超大的font Texture,如果想在ios或者android上使用,可能需要删减


3.在Project窗口中新建一个GUI Skin


4.调整GUI Skin的属性中的Font


5.在代码中定义GUISkin对象,并把它赋值给默认skin之后则之后调用 GUI.Label, GUI.Button等都会使用新指定的字体


    public GUISkin mySkin;


    void OnGUI(){


        if(mySkin) GUI.skin = mySkin;//unity3d脚本


    }


6.如果使用GUIText,则可以直接指定新导入的字体






20110805补充:


1.字体导入时dynamic字符模式只支持在mac和pc的standalone,对ios不支持! 坑爹啊!


2.ttf字体文件在导入到unity中如果显示模糊,则在ios上会显示为不出,可以调整导入时的font size设置,如果在scene窗口中显示为非常清晰,则ios上没问题.例如我在使用windows的楷体(simkai)时,默认导入字体大小为16,则显示不出,调整到22再重新导入则可以正常显示.目前原因不明,有待研究.


3.如果脚本代码中有中文,一定要把代码文件保存为utf-16编码格式, unitron(默认代码编辑器)可以选中菜单text ->text encoding ->unicode (utf-16)

unity3d ios 更改字体

阅读数 2875

没有更多推荐了,返回首页