高山流水

爱自己!

音乐随身听:

世界让我遍体鳞伤,但伤口长出的却是翅膀。

——阿多尼斯

(图片来自摄影师Kasia Derwinska)


Unity游戏开发之“屏幕截图”

麦兜Unity3D游戏开发者:

        在unity游戏开发中,可能会遇到在游戏中截屏的效果。这儿提供两种截屏方法。(方法二提供显示截图缩略图代码)

                方法一:在unity的API中,unity给我们提供了一个现成的API  :  Application.CaptureScreenshot(imagename)。但是这个API虽然简单,在PC、mac运用没有多大的影响,但是如果是在移动平台上使用的话就显得相当的吃力,因为它会消耗我们很大的CUP,所以你在移动端使用它截屏的时候会发现很长一段的卡顿现象。但是不得不说使用起来非常的方便,但是在我们使用这个API截图后的截图存放在哪儿呢?很多新朋友可能不是很清楚,当然不同的平台它的存放路径是有差别的。下面是各个平台的截图存放路径:

             Application.CaptureScreenshot(screencapture.png)

            if(Application.platform==RuntimePlatform.Android || Application.platform==RuntimePlatform.IPhonePlayer)  

                 imagePath=Application.persistentDataPath;  

            else if(Application.platform==RuntimePlatform.WindowsPlayer)  

                 imagePath=Application.dataPath;  

           else if(Application.platform==RuntimePlatform.WindowsEditor)

            {  

                 imagePath=Application.dataPath;  

                 imagePath= imagePath.Replace("/Assets",null);  

             }   

            imagePath = imagePath + "/screencapture.png";

         如果你想要你的游戏中显示你截图的缩略图,那么这种方法不是一个好方法,因为你                要用 WWW去加载你刚才的截图,这会消耗你一部分的时间。    



                方法二:通过读取屏幕缓存然后转化为Png图片进行截图。(当然截图存储路径你可以自己设置)

                IEnumerator GetCapture()

                {

                        yield return new WaitForEndOfFrame();

                        int width = Screen.width;

                        int height = Screen.height;

                        Texture2D tex = new Texture2D(width,height,TextureFormat.RGB24,false);

                        tex.ReadPixels(new Rect(0,0,width,height),0,0,true);

                        byte[] imagebytes = tex.EncodeToPNG();//转化为png图

                        tex.Compress(false);//对屏幕缓存进行压缩

                        image.mainTexture = tex;//对屏幕缓存进行显示(缩略图)

                        File.WriteAllBytes(Application.dataPath + "/screencapture.png",imagebytes);//存储png图

                }

有兴趣的朋友可以试试这两种截图方法的性能和可用性。

上面的方法只能截屏整个屏幕,但是我们想要截取某一部分,比如除去UI层的截图。但是我们怎么样才能做到分层截屏呢。我现在的想法是通过摄像机的RenderTexture来实现分层截图,但是目前阶段还没有实现。如果有兴趣的朋友或者有更好方法的朋友可以加群Unity开发学习交流QQ群:3112035



                                                                                                      ————  麦兜



NGUI制作APP页面的规则

徐先生的成长:

上阶段,我们将Unity 3D中的中文字体包创建了出来,现在规划整个UI的架构。

查看各种资料之后,定义下面几个原则。

1、所有的panle都放在第一级

2、页面和元素命名的规则为(类型—一级panle名—二级panle名)

3、Panle中各元素的Z轴只有0、-1、-2,这3个层级关系。

为什么定这样的原则呢,是为了尽量避免panle多了之后在不同的设备上UI元素显示出现BUG。


NGUI制作清晰中文字体的方法

徐先生的成长:

从来未接触过Unity3D,也没弄过代码!因为公司新的项目要用到这个软件,做为创业公司的成员又需要什么都会。任何职位都能搞起一部分的事情,产品原型,UI设计,交互,策划,商务,运营..感觉除开实际去画图和写代码,啥都要弄!

现在公司换全新的引擎Unity3D,没人用过。都要自学,摸索!正好利用这次机会把一些学习上面的资料,加入到这个小天地。方便自己查阅和回顾!

磨刀不误砍柴工,有了好工具才能更有效率的做好工作!

所有软件我都会放上下载地址,这里给的下载地址为我的百度云,以后所有链接都为云地址!

http://pan.baidu.com/share/link?shareid=3872637998&uk=2685011111

软件工具:

1、Axure

2、Unity3D

3、visio

4、Photoshop

5、Office

今天就先从Unity3D说起吧!

安装+新建项目这些就不多说了,因为是破解版本自己安装都不太会,还是同事帮忙装的。在家里也搞了好半天!

这次的项目是2D卡牌手游的,游戏名字叫《弹江湖》不知道什么时候可以面世。第一次自己整个负责项目各个方面,希望能做到最好。

Unity3D中插件暂时用的是NGUI,这第一个页面就遇见了问题!字体,Unity3D对中文的兼容型太弱。没办法,开始google吧!

google果然是无所不能啊,就开始来制作超清晰的字体吧!

第一步:

准备工具:

1、bmfon

2、黑体-简,【STHeiti-Light.ttc】各种黑体集合

3、3500font,也就是3500常用中文字

4、notepad++

第二步:

打开bmfon-Options-Font settings


第二步:

选择你需要的使用的字体样式,我们这里选择的字体样式为【黑体-简】。该字体为ios原始样式,看起来会比较舒服。

页面设置


完成后点击OK,点击OK后会发现界面的最下面有提示


这是告诉我们,这个字体库的文字数量已选0总量10001.很显然10001个字体对于日常来说太过于庞大,所以我们需要自己来选择需要的文字。

第三步:

点击Edit-Select chars from file


然后选择开始下载好的常用字体文件【3500font】,选择文件后会发现有如下错误提示。


这是因为3500font这个文件的编码有问题,我们需要先将该文件的编码转换成UTF-8的格式。

我使用的是notepad++,设置如下


转换完成后保存。

再一次点击Edit-Select chars from file,你会看到界面下面的已选字符发现了变化。


这个时候还需要加入英文和字符,如图

选中英文和符号之后,下面的再次已选字符信息再次发生变化。

现在字体和字符都选中完成后,再就是输出文件了。

第四步:

输出文件之前,我们先设置输出的条件。

点击Options-Export options

设置页面如下


页面中红框里面的内容是根据需求来定义的

Width和Height是用来包所需字符的图片的大小,如果定义大了浪费资源,设置小了则会出现多张图片。原则上是所有的字符用一张图片来包裹。

Bit depth:像素的大小。选择32则会更清楚,但是也会更加占用手机的资源。

我们这里的设置是Width-1024,Height-2048,Bit depth-32。

其他的设置按上图中的设置来选择。

第五步:

输出文件,点击Options-Save bitmap font as-指定存放输出文件的路径


第六步:

软件会为其输出2个文件,我对开始输出文件的命名为font,所以它输出的2个文件分别是font.fnt和font_0.png。

现在为了方便NGUI更好的使用该输出文件,将font.fnt改为font.txt。

现在关闭bmfon

第七步:

打开Unity 3D,安装NGUI的插件。这个插件在3d.rar中NGUI2.6.3!

打开项目后,直接双击NGUI插件。


点击Import,后会出现加载信息。请耐心等待


加载完成后你会看见,Project下面的Assets下面多出一个NGUI的文件夹,这就表示安装成功了。


再选择Assets文件夹,为了更好的管理资源文件,我们用2级目录来管理。现在先在这个文件夹下面建立一个文件夹放入刚才输出的2个文件


如何创建文件夹呢?

Unity 3D中resource文件夹为系统默认的资源文件夹,自己创建文件夹的时候不要取这个名字。

先选中创建位置,然后点击Create或者点击鼠标右键


文件夹创建好了之后,再将刚才输出的2个文件直接拖入到这个文件之中。


第八步:

点击NGUI-Open the Font Maker


然后将刚才的2个文件分别拖到对应的设置页面中

Font Data对应font.txt文件

Texture对应font_0.png文件


填写名称为Font,这些命名都是根据不同的规则或习惯来定义的。没有过多要求!

再点击Create a Font without an Atlas。

点击按钮后这个页面不会关闭,在页面中的select这一栏会显示出对应的字体包,你可以主动关闭该设置页面。


同时在Project对应的文件夹中会出现1个字体包(方形的)和1个资源文件


这个时候NGUI中的字体包就已经制作完成了,现在来测试一下效果。

第九步:

创建NGUI的场景,来测试字体包的效果。

点击NGUI-Open the UI Wizard


向导页面点击Create Your UI


创建UI后,会在Hierarchy界面中出现UI Root(2D)的UI层级


现在选中Panel,在这个页面中创建一个Label进行测试。

点击NGUI-Open the Widget Wizard


打开控件向导后,将字体包Font拖到Font中;Template则选择Label;Color则随便选择,它影响字体显示的颜色。


完成后Add To会变成绿色


点击Add To,这时在Hierarchy中会出现一个Label的控件


然后选择上Label,对它的Inspector中的UILabel(Script)属性进行编辑,这里我输入的是中文+英文+符号+数字

第十步:

我们现在吧Scene中的坐标调整到X.Y轴的方位,点击右上角的坐标轴就可以调整方位。


但是当字体显示在Game中时,我们才发现字体还是不清楚。


难道是方法错误啦!!这真是晴天霹雳啊,不会所有的功夫白费了吧!

为了让字体更清楚,我们再次找到font_0.png这个文件并选中它。然后调整对它的Inspector属性进行调整。

原有设置


调整后


选中完成后则点击图片红框中的Apply,出现提示点击Yes

然后再看看Game中的字体显示。


最后就很清楚了!测试中发现如果是中文的。,没有显示出来!但是没关系,再把上面的方法重复一次。就能很快的把新的字体包给整出来!


圆满搞定,写一下记录。温故而知新,真是一点都没错啊!

不过下次再也不能搞到这么晚了,明天还得早起加班。

努力吧,少年!

让自己变的强大才是根本 http://163.fm/MaE8MPw

推荐! 分享周华健的单曲《泼墨》 http://163.fm/ARuoR8Z(来自@网易云音乐)