unity font研究小结

项目用ngui制作的界面。字体使用了unity默认的Arial,公布后在一些android手机上发现中文不显示,就此作了一些调查。

參考unity的font说明文档:http://docs.unity3d.com/Manual/class-Font.htmlhttp://game.ceeger.com/Components/class-Font.html(中文翻译版)

1.使用动态(Dynamic)字体:

优点,动态字基本包含全部字(中文等),大小可调,显示清晰,可用于动态文本。

unity方便的支持ttf。otf格式的字体,字体文件放到Assets文件夹下不论什么位置,untiy会自己主动为其生成材质和贴图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3AxMDAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

导入的字体能够做一些设置,在文档里对每一个都有解释。当中设置Character 为dynamic。

Include Font Data选中表示把该字体打包进安装包。然后安装到用户机器上去。假设用户机器自带有该字体。能够不打包进来,可是须要在Font Names指定系统要用到的字体顺序。(导入字体后Font
Names属性会自己主动显示这个字体的名字,注意不是字体的文件名称。字体名是该字体的系统标示名)

对于中文字体,选择Include Font Data的问题是字库太大,比方黑体有9M。雅黑10多M。会导致安装文件增大(9M黑打打包进unity将增大安装文件5M)。假设项目要用到不止一种动态字体就更郁闷了,unity方便的支持ttf等字体对西文字符是个便利的事,对中文来讲还有瘦身等问题要处理。

假设不打包字体则须要保证系统中已经存在该字体。此时Font Names属性生效,在执行时自己主动从系统中寻找列表中的字体。直到找到为止。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3AxMDAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

假设使用unity默认动态字体Arial。对此的解释是公布到不同的平台后将默认使用当前平台的默认字体。

在測试时发如今小米1的机器上,低版本号miui系统里无法显示汉字,还有一台高版本号miui的小米手机能够显示Arial,simei等字体(不须要打包进安装文件),在一台魅族手机上測试也不能显示Arial。因此unity的Arial字体与平台的映射关系并不保险。

andriod系统有自己的默认字体Droid
Sans(仅仅含西文字符)。和默认中文字体Droid Sans Fallback。unity把Arial字体在andriod平台上映射为Droid Sans (Fallback)。

在低版本号miui系统(小米1)里能够看到仅仅有一个中文字体文件DroidSansFallback.ttf,大小为2M多。拿出这个字体文件放到unity里能看到里面的字体名字是LTHYSZK。可能是由于字体名字被miui系统改成这个导致unity的Arial映射到andriod的失效。

在高版本号miui系统里有多个中文字体文件。当中DroidSansFallback.ttf的大小变为4.4M,在unity里发现字体名字已经是Droid
Sans Fallback了,可见unity的Arial映射到andriod确实和字体名字有关。(没有測试过把高版本号ttf拿到低版本号miui系统里去,貌似得刷机才干測?这个结论仅仅是推測)。

在高版本号miui里多了几种中文字体,确实是属于系统定制的字体:

以下參考文章里有把andriod默认字体与微软雅黑做对照,得出两种字体非常相似的结论。相比雅黑10M以上的体积,Droid
Sans Fallback想对瘦小。不知道DroidSansFallback.ttf是否包括全部的中文字符,我用2M多的DroidSansFallback.ttf測试了一些偏僻字,也没有发现缺失。(假设想用雅黑。能够用这个来替代)

使用Arial的另外一个问题是,作为unity默认字体。unity不会把Arial真正打包进安装文件,无法找到这个字体源文件,无法更改Font
Names属性。在找不到默认字体的系统里就会不显示中文了。

所以更好的一个做法是做空壳。

导入一种字体但不打包到安装文件,设置好Font Names属性(包括各个平台的字体名列表),则在不同的平台上调用不同的字体。仅仅要确保公布时指定的Font Names属性里有目标平台的字体即可。

要明确开发时当前显示的是导入的这个字体效果,但执行时会依据系统和平台以及Font Names的设置而效果不同。

打包进嵌入的字体则会表现效果一致,唯一的问题是安装文件会增大非常多。

公布时发现的另外一个问题:

低版本号ngui(3.0)选择Dynamic字体,Font列表里能够选择Lucida Grande字体,在公布到andriod和winpc系统时会报错无法公布:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3AxMDAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

原因是Lucida Grande是macos下的默认字体不能够公布到其它平台(应该在macos下也不让公布Arial字体吧)。在当前操作系统windows下没有这样的字体无法公布(貌似如此,没有从macos把Lucida
Grande拿过来试验。參考以下一文)。这是低版本号ngui设计的不好。ngui实际是没有动态字体的,它的动态字体实际就是调用unity的动态字体设置,自己仅仅有位图字体。在升级ngui到3.5.6之后就发现字体选项仅仅有ngui和unity,然后再选择详细用什么font。ngui最终有了自知之明。不再误导了。

并且选择unity后会屏蔽掉非当前系统的字体选项,这点改进非常好。

macos下用Lucida Grande字体(与雅黑接近),ios下默认是黑体-简Heiti
SC(早期版本号是华文黑体)。

參考:

编译时,遇到Couldn‘t
build player because of unsupported data on target platform的解决方式

http://blog.csdn.net/monzart7an/article/details/24156661

Android字体简单介绍

http://www.apkbus.com/android-58182-1-1.html

在android系统中,DroidSans是默认字体。仅仅包括西方字符,应用程序默认情况下都会调用它。而DroidSansFallback包括了东亚字符,当须要显示的字符在DroidSans字体中不存在(如:汉字)时。即没有相应编码的字符时,系统会到DroidSansFallback中去找相应编码的字符,假设找到,则使用DroidSansFallback字体来显示它,假设仍找不到该编码相应的字符,则无法在屏幕上显示该字符。

关于 Android 默认字体以及对照微软雅黑字体

http://www.cnbeta.com/articles/114854.htm

2.bmfont

bitmap font位图字体是第二种方案,把字符集做成atlas能够灵活使用各种字体。缺点是位图无法缩放有锯齿,并且中文字符一般仅仅是引入一些经常使用字或者项目中用到的字,否则整个字符集太大。会占用太多内存。或者受unity
atlas限制大小无法集成全部字符。

打开NGUI的bitmap font maker

NGUI 3.5.6以上版本号能够方便制作bitmapfont。须要导入FreeType.dll,假设找不到这个文件无法制作位图字体。

从NGUI的安装包import到项目中,它的默认位置是Assets/NGUI/Editor/FreeType.dll。我把这个文件挪走了须要又一次找下它,以下有Find
FreeType.dllbutton。

font maker能够从导入的ttf来制作bimapfont:我从source里选择导入的simhei,字符集里包括东南2个字。output atlas让指定字符集图片放到哪个已有的atlas图集中,不指定就会单独生成一张。不利于drawcall,最好非常多bitmapfont图集公用一个。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3AxMDAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

我创建的字体叫heiti.prefab。由于是prefab用起来非常方便,哪里都能用。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3AxMDAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

使用的时候选择NGUI。然后选择这个heiti字体,仅仅有图集中有的字才会显示。

时间: 2024-08-03 01:48:07

unity font研究小结的相关文章

IE内存泄露与无法回收研究小结

IE内存泄露与无法回收研究小结 一.内存泄露    之前确实看了很多资料,但这位大哥的话可谓画龙点睛,不是奉承他,一下子就打通了我的任督二脉,请看: trarck 写道 IE下的内存泄露原因就是循环引用,IE的垃圾回收器不能很好处理这种引用. 会产生泄露的循环引用,只有孤立的DOM对象(脱离DOM树). 孤立的DOM对象间的循环引用,孤立的DOM对象与JS对象的循环引用. 为什么是孤立的DOM对象呢?在离开页面时(刷新,跳转)会删除整个DOM树,在DOM树上的对象也会被删除,就算有循环引用,此时

Android与Unity交互研究

Android与Unity交互研究 转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46733221 Android与Unity交互研究 unity与android交互的由来 unity简单介绍 unity与android交互介绍 unity调用android的方法 android调用untiy的方法 unity与android交互的由来 本人在项目开发过程中,遇到这样一个需求,把unity的场景放到android中去显示.刚开始做的

phonegap研究小结

最近公司有一个用h5写的项目要求要套用phonegap框架,现在项目差不多快完成了,做一些关于这个框架的小结,主要介绍如何在这个框架下用ios原生的代码和js的一些操作 1.首先是如何使用这个框架我们是在别人的项目上改建的,先把相应的html文件放到对应的www的文件下面.如果加载不出来看看你的root文件下面是不是缺少index.html文件如果没有记得添加进去,你的项目默认的登录显示的那个文件复制一份改成index.html,不删除源文件. 2.js代用iOS的代码: 只要在js文件下的对应

阿里移动安全挑战赛第二题研究小结

1.取巧的方法 因为不太会看汇编指令,所以看了别人的解题思路后,自己想了个取巧的方法.o(╯□╰)o 之前学习的过程中学会了不少指令,例如strings,列出文件中所有字符串.突然想起来可以导出apk运行时so文件的内存(其实也是现学的- -'), 验证了一次后被比较的字符串就存放在内存中了,于是使用dd命令将内容导入SD卡: [email protected]:/ # dd if=/proc/2829/mem of=/sdcard/hah.mem bs=1 skip=1750364160 co

unity序列化系统小结-来自unity手册(Script Serialization)

一.综述 在unity中,"东西"的序列化是unity一件很核心的事情,很多特性都是建立在序列化系统之上的:像检视面板.预制体(prefabs).实例化(Instantiation).保存场景.加载(loading).编辑器代码的热重新加载(Hot reloading of editor code).unity自己的垃圾回收器(Resource.GarbageCollectSharedAssets()).序列化系统是用C++写成的,用于所有的内部物体类型(Textures, Anima

Unity插件研究-EasyTouch V5

抽空研究了下Easy Touch 5插件,发现确实很好用,下面是相应的用法: 1. Easy Touch Controls:实现虚拟摇杆的组件 在项目的"Hierarchy"窗口下,创建摇杆操作点击GameObject=>EasyTouchControls=>Joystick,创建完之后会在Hierarchy面板出现摇杆物体,Game视图也会出现一个摇杆,这个插件应该是基于UGUI写的,它的物体出现方式和创建Canvas下的控件一样(所以自定义事件和UGUI添加事件的方法基

ICE中间件说明文档

1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         通信器 2.2.2         对象适配器 2.2.3         位置透明性 2.3        异步编程模型 2.3.1         异步方法调用 2.3.2         异步方法分派 2.4        订阅/发布编程模型 2.5        动态服务管理(IceBox) 2.6       

【HAPPY FOREST】用Unreal Engine4绘制实时CG影像

用Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易.这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLANET.本文中通过Demo Movie的制作,来看看实时CG的可能性. 对应现状的问题意识与先见之明相结合的实验性项目 近年来的实时CG的品质的提升特别显著,最新的影像出现使得CG影像的相关人员兴奋起来,不光是影像的美丽程度,还感到了这种技术的可能性.这次介绍的MARZA ANIMATION PLAN

上传文件格式控制的困惑(application/octet-stream 限制不了BAT等格式上传)问题解决

允许上传类型部分代码 $uptypes=array(  //上传文件类型列表 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png','application/msword','application/vnd.ms-excel', 'image/bmp','text/plain','application/octet-stream','image/x-png','application/x-shockwave-flas