cocos2d和unity3d,u3d cocos2d
学习游戏开发的两个方向 Cocos2d-x 和 Unity 3D/2D,哪个前景更好?
3D开发这个方向不错,以后好多游戏在视觉上都需要拥有这个模式,提升用户体验。
Unity3d和Cocos2dx有什么区别?
一、区别:
1、COCOS2D开源,有文档支持,论坛资料庞杂博大;UNITY3D闭源,有强大的文档支持,论坛资料一样的庞杂博大。
2、COCOS2D免费;UNITY3D收费。
3、COCOS2D的跨平台,需要大量重写代码;UNITY3D的跨平台,程序员只需要选选按钮就淡定许多的搞定了。
一、拓展:
1、不同:
(1)COCOS2D拥有令人发指的可定制性;UNITY3D有一个专门为订制而写的类库。
2、相同:
(1)UNITY3D和COCOS2D-X都是跨平台的游戏开发引擎。
cocos2d转unity3d小结
? ? ? unity3d第一个项目已经算是完成了,从cocos引擎转过来也有一段时间了,下面列出一些在使用中遇到的坑或者unity3d与cocos2d差异比较大的地方。适合其他引擎转U3D或者纯新手小白,万一有路过的大神请 踩了我这朵野花 指出错误,好好学习天天向上。游戏主要是2D界面,搭配live2d伪3D效果。 我也想做纯3D的可是没有钱啊。
一 .版本以及部分插件工具
? ? ?(1).unity_5.3.5p6
? ? ?(2).UGUI
? ? ?(3).DoTween
? ? ?(4).SceneManager
? ? ?(5).live2d
? ? ?(6). playerMaker;Anti-Cheat (都已弃用)
二.经验总结
? ? (1).分辨率适配
? ? ? ? ?1.使用UGUI Canvas ?Render Mode :Screen space-Camera 绑定摄像机,摄像机采用正交 Orthographic Canvas Scaler:UI Scale Mode 采用 Scale With Screen Size ; Reference Resolution 使用640*960分辨率, Screen Match? Mode:expand.
? ? ? ? ?2.部分背景设为1136*1136 在iphone5,6上依然会有白边,目前解决方案是背景设为1138*1138。
? ? ? ? ?3.建议美术CG与背景出图大小为,1024*1024(不重要的背景可512*512通过拉伸显示)。
? ? ?(2).资源相关及优化
? ? ? ? ?1.图片尽量使用尺寸为2的次幂 32*32,64*64 到 2048*2048,format 采用 compressed 压缩,个别尺寸不好做处理资源又大,可以采用16bit,采用这一方法美术需少使用渐变色,否则图片会严重色块化。
? ? ? ? 2. 图片也可直接导入PSD(相当于图集),texture Type 使用Sprite(2D and UI); SpriteMode 使用Multiple, 然后使用 Sprite? Editor自动切割,适用某个界面一堆小图。缺点是每次替换PSD需重新切割,改动有可能会使之前自动切割的被重新命名。
? ? ? ? 3.图片参数需把Generate Mip Maps 选项勾掉,可减少一定大小,这个选项的功能是在3D游戏中视野远近影响物体模糊。
? ? ? ? 4.字体可使用ttf,不需要美术单一出atlas, text控件也支持富文本、描边、阴影等。
? ? ? ? 5.plist不再可用,策划需提供TEXT文本或JSON等。
? ? ? ? 6.音频文件支持.AIFF? .WAV? .MP3 .OGG 。
? ? ? ? ? ?视屏文件支持.MOV? .MPG? .MPEG .MP4? .AVI? .ASF。
? ? ? ? 7.修改stripping level,通过库剖离来减少DLL的空间大小。
? ?(3).UGUI、脚本、其他控件相关
? ? ? ? ?1.一个场景尽量使用一个canvas,需显示不同层级可使用多个摄像机,不同摄像机culling mask不同layer,通过修改摄像机Depth来控制层级关系。
? ? ? ? ?2. live2d比较特殊,如果需要将其他控件置于它的上面,除了用单一摄像机照射外,还需改变Live2d的Z轴与它摄像机Clipping Planes的Far参数。
? ? ? ? ?3.需要做屏蔽层,只需创建一个panel 即可,改变它的层级即可屏蔽下方的点击与触摸。
? ? ? ? ?4.如果在一个button上添加image等其他控件,其他控件的范围大小也会影响到按钮的点击区域。
? ? ? ? ?5.支持帧动画,只需全部选中图片拖入Hierarchy即可生成。
? ? ? ? ?6.U3D粒子系统不支持particle Designer等粒子生成插件,但源生的功能更强,可实现预加热功能。
? ? ? ? ?7.动画建议使用自带的animator控件,也可以使用ITween,DoTween,HotTween等一些插件来实现简单的位移变形等。
? ? ? ? ?8.如果使用tween类插件,建议使用DoTween,更加类似cocos写法,性能优化等比较好,(NGUI自带itween)。
? ? ? ? ?9.注意所有的tween类插件均不支持image sprite单个透明度的变化,只能修改材质透明度,而所有的UGUI image控件共用同一材质,除非每个image单独添加材质。也可通过单独手写脚本来控制透明度变化,需要在update里计算,比较繁琐。
? ? ? ? ?10.脚本中一般使用的update有 Update 与FixedUpdate等,update 跟当前帧数相关,fixedUpdate则是物理时间,所以一些物理逻辑要放入FixedUpdate进行。
? ? ? ? ?11.想在场景切换后还保持某个GameObject存在使用方法?DontDestroyOnLoad(transform.gameObject);
? ? ? ? ?12.把一些模型投影到ui上可以用RenderTexture,也可用这个创建小地图、镜相、动态阴影等效果。注意rendertexture消耗比较大。
? ? ? ? ?13.unity 5.0后增加了AudioMixer混音器,可以把所有audioSource输出放入同一音轨,通过这个实现全局音乐开关和音效开关。
? ? ? ? ?14.游戏暂停可使用 Time.timeScale?=?0。
? ? ? ? ?15.使用u3d自带animator编辑动画,动画结束后可添加回调、动画可倒播。通过状态机可完成比较复杂的动画模块,特定情况下的动画需要与脚本同时控制。
? ? ? ? ?16.3D物理碰撞同样使用于2D,GameObjecr上需添加刚体控件。
? ? ? ? ?17.粒子贴图与cocos相似,尺寸大小最好小于64*64。
? ? ?(4)多语言
? ? ? ? ?1.简体版与繁体版,通过修改text所挂的ttf来实现,文字尽量在unity里输入,减少贴图上文字的数量,这样只需改变ttf即可实现简体繁体的切换。
? ? ? ? ?2.英文版等共存,unity内需要输入的文字全部写在text里,需要写脚本通过key value来读取每个text显示的内容。
? ? ? ? ?3.一些界面图片上的文字不好通过UNTIY输入来替换的(比如IAP礼包等界面),可创建多个不同的prefab,进入场景时候通过区分
语言环境来调用。
? ? ?(5)与IOS Android 交互
? ? ? ? ? 1.多语言 通过Application.systemLanguage区分当前设备语言环境。注意:ios9以后Unity通过Application.systemLanguage返回的简体中文和繁体中文都是SystemLanguage.Chinese,所以需要在ios 上返回当前语言参数给unity。
? ? ? ? ?2.ios上显示插屏等会应为Unity 的rootViewController时长改变而造成奔溃或者不显示,需要在调用第三方SDK弹出时候添加
UnityAppController *appController = (UnityAppController *)[UIApplication sharedApplication].delegate;
? ? ? ? ?3.Andoird 需要在点击购买后弹出屏蔽层,否则点击过快或造成传入的参数改变。提供去除屏蔽的回调,java层在购买和失败后调用。
? ? ? ? ?4.iap与兑换码最好写成单例,某些Android渠道要求在一开始调用IAP回调,回复购买只在IOS与google版本中显示,需留好接口在不同渠道中开启或关闭。
? ? ? ? ?5.unity使用ARC,ios某些广告低版本SDK未使用,需要在这些广告类中单独添加参数 -fobjc-arc。
三.遗留问题
? ? ?1.shader等使用不熟练。
? ? ?2.过场采用sceneManager插件,用GUI实现,如使用UGUI animator如何实现。
? ? ?3.所有按钮点击放大等效果公用一个animator,再触摸屏幕其他区域有可能会使其他按钮响应放大效果。
? ? ?4.Android下手机如果有系统提示或来电,在进入游戏内游戏声音丢失,需重启游戏。
? ? ?5.scorllview背包等因为包含物品数量较少没有使用动态池。
Unity3d 和 Cocos2dx有什么区别
UNITY3D和 COCOS2D-X都是跨平台的游戏开发引擎,COCOS2D是专门做IPHONE游戏的2D游戏引擎。
下面就从多个方面来对比阐述一下:
1)是否开源
COCOS2D开源,有文档支持,论坛资料庞杂博大;
UNITY3D闭源,有强大的文档支持,论坛资料一样的庞杂博大。
开源对COCOS2D来说,意味着可以进行随心所欲的改造,可以更深入的了解各种游戏需求的底层实现原理,更可以订制出更符合自己要求的类库。
相对的,它的麻烦也不小,因为开源,所以可以随便改,因为可以随便改,所以很容易改错,而且调试维护的成本也会倍增,因为更接近底层,所以往往实现一个功能的时候或者自己要更费周折。
闭源对于UNITY3D来说,意味着更能方便的使用,更有质量保证,同时意味着偶尔有使用者看不到的想看的内容,想接近底层会花费巨大的代价,想订制一种自己的数据结构或者功能来添加进去的时候很难下手。
2)是否免费
COCOS2D免费,免费意味着,服务差,很多程序员不想看到的现象会莫名其妙的出现,偶尔作者不小心出点意外什么的没有什么可以控制的方法…例如,作者一不小心使用了一种非常危险的方法来写代码,这个时候基本上使用者欲哭无泪,查起错误异常艰难,但是总能查出来.免费的好处是,有一天如果用COCOS2D做了一个很牛逼的游戏,可以正当光明的说,这个游戏是我们做的,游戏质量很好,而且不用恐惧有人冲过来收钱。
UNITY3D收费,收费意味着…服务真心是不错诶,U3D小组力求把麻烦留给自己,方便留给程序员,所以用着还真是爽,很多麻烦都被U3D消灭在萌芽阶段,真心好,但是,要钱的。
3)跨平台能力
两者都能跨平台。
COCOS2D的跨平台,需要大量重写代码,面对各种平台的各种细节麻烦.所以当使用COCOS2D的时候,很多麻烦来了,于是再面对平台特定的更麻烦的问题的时候,程序员基础好很多,更容易搞定
UNITY3D的跨平台,程序员只需要选选按钮就淡定许多的搞定了,但是当面对U3D团队没有想到的平台特定的更麻烦的问题的时候,这个时候的程序员,需要使劲的“吃”键盘来克制自己内心的焦虑吧…
4)团队开发
cocos2d压根就没往团队方面想,所以团队配合方面的工具,程序员基本自理,细节问题自理,麻烦问题自理,UNITY3D想了一些,做了很多,但是也有纠结的地方,程序员在没有完全理解的基础上使用会变得很难接受.值得一提的是,UNITY有强大的所见即所得能力,动态解释,现场执行,COCOS2D一直在向着这个方向努力,或许在未来某一天两者也会不相伯仲
5)周边工具
COCOS2D是集体智慧,各路人马都提供了各种各样的工具,COCOS2D将他们整合到了一起,各种工具都有各种麻烦,也有各种好处,总的来说,花点精力还是有好结果的。
UNITY3D自家解决了很多麻烦问题,周边工具也有很多人做,但是,不开源,而且要钱,服务好很多。
6)可定制性
COCOS2D拥有令人发指的可定制性,因为从C++写起,所以程序员可以为所欲为,为所欲为的代价就是,所有细节都要照顾,所有麻烦都要生顶(例如,写出的工具不跨平台,订制的数据结构无法通用,序列化一个类到其他平台之后无法反序列化等等)。
UNITY3D有一个专门为订制而写的类库,没怎么用过,但是可以确定的是,这个类库是跨平台的,这个优势很伟大。
7)3D
这个U3D确实完爆COCOS2D,不过,要是不想做3D游戏呢?那多余的3D功能也会很累赘。
总而言之,两家都是游戏引擎的大家,两者都能适应不同的需要,各具特色各有特点,估计谁也灭不了谁。