台北Unity开发者研讨会 笔记
本文转自:http://ndark.wordpress.com/2013/05/12/20130511-台北unity开发者研讨会-笔记/ (墙外)


说明
本文单纯只是笔记,若有笔误敬请见谅。
相关参考连结
- Unity Asia Bootcamp 台北场– 线上观看
- Unity着色器系统介绍(幻灯片)
- Unity 开发者论坛-台北场(Unity ASIA BOOTCAMP TOUR TAIPEI )研讨会
- 独家专访:Unity 教育认证与台湾高等教育的深度对谈| Unity IN | 社群✕媒体✕平台
- Unity - Mecanim性能与优化
总论
- 开发者成长速度与上手速度是Unity在台湾的优势。
- 在Facebook与360刘灠器中预设安装Unity Plugin。
- 大陸有超過400個Android商城。
- 认证培训(新竹教育大学,高应科大等学校)。
- 鬼武者魂由Unity開發,Server端使用PHP。
- 开发者必须要注意的三阶段:开发-平台-广告金流。
你不可不知的Unity開發技巧
- Unity三種網頁發佈的方式:WebPlayer,Flash(效能低下),Chrome NaCl(Native C++,不需要Plugin)。
- Plugin的版本分别:Stable,Release,Beta,Alpha。可以修改网页码来指定plugin的下载版本与来源。
- Web缓存许可证(收费):“我们提供的统一Web播放器,可以在本地缓存的资产包的特殊扩展这是根据我们的业务开发团队取得了一项协议,授权一般是授权给开发者提供了较大的预期收益和。没有规模较小的基础“。
- 如何动态更新Unity产品的Source Code:透过将程式码输出为二维的TextAsset,然后在包装到AssetBundle中。
- Unity4已支援动态字型,nGUI2.6才支援动态字型(东亚字体)。(EZGUI目前就已支援-感谢永康ㄉㄉ堤供情报)
- GameObject.Destroy不会移除该物件的资源(Mesh,Texture,Material等)。
- Scaleform的仅支援Unity3.5.x
- 网路伺服器的清单:Photon,Electron,SmartFox,uLink,SlimNet,SlimIOCP。
- NavMesh.Triangle()函式
- 王者之剑<蓝港在线>使用Unity开发的2D游戏。
- 开发2D游戏的插件:Sprite Manager,Ex2D。
- Unity Cache Server是开发团队用来在不同平台(资源)发布时的加速方式。
- Asset Server已不建議使用。
- 疾风,91都会自己开发对Unity的金流SDK。
- 透过设定优化发布的产品档案大小。
移动平台优化要点
- 每个动态物件(角色)的三角形面数在300到2000之间。
- 每个动态物件(角色)的Skinned Mesh Renderer仅用一个。
- 每个动态物件(角色)的材质数只用一个。
- 每个动态物件(角色)的骨架限制在30根以下。
- 使用Dynamic Batching合并那些杂类的动态物件。
- 静态物件设定为Static,方可进行Static Batching。
- 在3.5使用静态物件时移除Animation的组件。
- 地形(Terrain)的初始解析度設定為257以下。
- 地形(Terrain)筆刷貼圖數目控制在4以下。
- 贴图解析度大小控制在1024以下。
- 3D游戏开启Mipmap会增加记忆体但是可加速效能。
- 貼圖uv控制在0~1。
- 音乐档案使用ogg/mp3,短音效使用wav。
- 光源使用Light Map/Light Probe来取代动态光源。
- 使用方向光。
- Pixel Light控制在1~2。
- 控制摄影机的z-near与z-far平面。
- 设定物件的剔除距离。
- 小物件又很远得时候就不要画。
- 粒子系统将粒子总数控制在200以下。
- 粒子系统每个发射器发射粒子控制在50以下。
- 粒子的大小越小越好。
- 非常小的粒子去掉alpha channel。
- 不要开启粒子的碰撞。
- 碰撞類型不要使用Mesh Collider。
- 減少使用Animation組件。
- 不缩放的动画,去除Scale Curves的参数。
- 若只使用一个AnimationClip,就使用Unity 3.5的动画系统。
- 使用Macanim(Unity 4的動畫系統),要搭配使用Body Mask。
- IK選用Generic Mode。Humanoid Mode在Android上會耗費嚴重的效能。
- 渲染时减少使用Alpha测试与alpha混合。
- Draw Call Batching分为Static与Dynamic。后者点数控制在900下,若包含Position,Normal,UV,则是300。
- 使用Texture Packing将不同物件的材质变为相同,但必须手动修改UV。
- 使用遮挡剔除时谨慎设定谨慎设定封堵器(墙)与Occludee的角色。设定PVS只,PV和动态对象,自动生成门户(会改变的门)。
- 程式码,使用类别变数来暂存指标。
- 设定Fixed Delta Time在0.04到0.067之间。
- IOS发布时使用的快速和异常不支持的发布形式。
- Shader减少使用数学函式,减少使用Discard。Vertex使用Float,TextureUV使用Half,颜色与光使用Fixed。
- 在PowerVR的硬体下有时候使用两个Vec2反而会比较快。
- 使用Profiler。
- 使用Manager的架构来控制物件会比把每个物件都挂上脚本效率高。
资产包
- Resource这种读取资源的形态(有2G限制)会慢慢移除,统一改用Asset Bundle(可离线创造)
- Web缓存只能放资产包。
- Asset Bundle建出之后是有相容性的,ios与android的Asset Bundle与其他平台互不相容。
- BuildPipeline.BuildAssetBundle()是用来建立多个资产的资产包。
- BuildPipeline.BuildStreamedSceneAssetBundle()则是用来建立多个场景的资产包。
- 用BuildAssetBundleOptions.DeterministicAssetBundle来建立对资产的杂凑的ID做增量发布。
- 资产 assetBundleObj = WWW.AssetBundle->使用中的资产包。 新 捆绑可再进行加密动作。AssetBundle.Load() - >载入资产。
- 卸載流程:
GameObject.Destroy() AssetBundle.Unload (false)只會卸載WWW.AssetBundle,AssetBundle.Unload(true)則會卸載WWW.AssetBundle以及相關資源。true的作用相較於使用false再使用Resources.UnloadUnusedAssets ()作用並不相同。 把相同的資源基底打包為Asset捆绑 使用BuildPipeline.PushAssetDependencies()来建立资产包之间的关连性。 - 范例1:把共通资源打包。
Push
Build共通资源包
Push
Build物件包1
Pop
Push
Build物件包2
Pop
Pop - 范例2:把Level所使用的资源也做成依赖形式。
Push
Build Level1
Push
Build Level2 (依赖于Level1)
Push
Build Level3 (依赖于Level2与Level2) - 范例3:把场景包依赖于共通资源包
- 将设定各资源包依赖关系的XML设定为ScriptableObject并打包到Asset Bundle内
- 将场景切割为Asset Bundle的方式,等分,如切成九宫格。
- 将场景切割为Asset Bundle的方式,分大物件,中物件,小物件。让大物件先读入先显示。
- WWW.LoadFromCacheOrDownload()可设定版号。
- WWW.LoadFromCacheOrDownload的crc产生方式可透过错误使用同一个函式来产生真确值。
- 程式碼的加密過程:Assembly->Byte->TextAsset->加密->Asset Bundle->加密->TextAsset->Asset Bundle。
- 使用native dll来保护重要程式码,但Web应用不能使用dll。
统一着色器系统
- 透过Shader Name就会自动产生选择Shader的架构。
- SubShader可视为真正的Shader,由上而下执行。
- SubShader的Tag表示如何执行:可指定执行的顺序。
- SubShader的Tag表示如何表現。
- 著色方式Vertex Lit:快,限制多。
- 着色方式Forward:将灯光分为最重要+不重要以及其他重要。区分方式可手动,也可以依照强度与方向来自动决定。
- 着色方式Deferred:手机不能使用,也不支援透明。
- CG/HSSL会被转译为GLSL。
- 使用基本Shader会需要写132行的程式,使用Surface Shader来做隐藏简化:标明surfae code与light code。
- #pragma debug可以将隐藏的程式码显示在程式码中。
- 透过user define keyword将参数传入shader中。
台北Unity开发者研讨会 笔记的更多相关文章
- 写给Unity开发者的iOS内存调试指南
0x00 前言 工作的过程中,常常会发现有小伙伴对Unity的Profiler提供的内存数据与某些原生平台Profiler工具,例如iOS系统和Xcode,所提供的内存数据有差异而感到好奇.而且大家对 ...
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
- Unity sqlite学习笔记一
1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configur ...
- Unity ECS 视频笔记
视频摘要 本文视频资料:使用Entity Component System开发<快乐的Minecraft>游戏 使用Unity2018及以上版本才有ECS功能. 本文是看视频的一些摘要. ...
- unity 3D 学习笔记
1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...
- Unity依赖注入(笔记)
一.介绍 控制反转(Inversion of Control,简称IoC):整洁架构思想,不允许内部获知外部的存在,这就导致了我们必须在内层定义与外层交互的接口,通过依赖注入的方式将外层实现注入到内部 ...
- 从0开始学习Unity的学习笔记(I 界面学习和简单模型拼装)
先给一个大致今天学习的图,然后后面是细节 1.下载Unity :官网下载需要版本 2.Unity安装:一定不要有中文路径:一台电脑可以安装不同版本的Unity,但是要安装在不同的文件夹下: 3. 新建 ...
- Unity Shader学习笔记 - 用UV动画实现沙滩上的泡沫
这个泡沫效果来自远古时代的Unity官方海岛Demo, 原效果直接复制3个材质球在js脚本中做UV动画偏移,这里尝试在shader中做动画并且一个pass中完成: // Upgrade NOTE: r ...
- Unity AssetServer小笔记
普及一下Asset Server知识: Unity的Asset Server,其实就是一个纯PostgreSQL数据库.Unity操作Asset Server,就是一个数据库客户端操作,但是Unity ...
随机推荐
- python peewee.ImproperlyConfigured: MySQLdb or PyMySQL must be installed.
最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到“被解放的姜戈”时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: 执行python ...
- [Design Pattern] Substitute Interface
[Design Pattern] Substitute Interface 目的 将对象的成员建立为替身接口的成员,用来解耦对象之间的循环相依. 情景 假设开发人员接手一个系统,在系统里有订单对象.送 ...
- 使用CodeMirror在浏览器中实现编辑器的代码高亮效果
使用CodeMirror在浏览器中实现编辑器的代码高亮效果 在网站后台管理中希望能够对网站的样式表css与js文件以及模板html进行管理,在编辑的时候只是以普通文本展示又太普通,显得好难看,于是便在 ...
- 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 . xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...
- 在 SharePoint 2013 中配置 Office Web Apps
原文发布于 2012 年 7 月 23 日(星期一) 如您所知或您即将知道,SharePoint 2013 中的 Office Web Apps 不再是 SharePoint 场中的服务应用程序.相反 ...
- C安全编码--预处理
建议和规则 建议: 用内联函数或静态函数代替与函数相似的宏 在宏参数名两边加上括号 宏替换列表应该加上括号 应该使用typedef定义编码类型 不要复用标准头文件名 理解连接标记或执行字符串化时的宏替 ...
- C++map类型
map是键-值对的集合,可以理解为关联数组,可以使用键作为下标来获取一个值 本文地址:http://www.cnblogs.com/archimedes/p/cpp-map.html,转载请注明源地址 ...
- oc语言常用的字符串函数
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- IO流02--毕向东JAVA基础教程视频学习笔记
提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-rea ...
- mysql给数据库授权 GRANT ALL PRIVILEGES ON
mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’; show grants for mustang@ ...