台北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 ...
随机推荐
- C语言动态调用库(转)
转自:http://cloverprince.iteye.com/blog/481309 现有一个主程序用C语言写成.现在要允许第三方开发人员编写扩展的模块,约定第三方开发的模块必须提供一系列已知名称 ...
- JavaScript基础10——node对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- rails provide与content_for的区别
页面渲染时:provide先执行,但找到一个provide之后就不再查找 content_for 顺序执行,在哪个位置,就等之前的渲染完后才执行.但是要等到所有的content被查找完后一块返回,也就 ...
- css3属性(一)
圆角效果: border-radius: 5px 4px 3px 2px; /* 四个半径值分别是左上角.右上角.右下角和左下角,顺时针 */ 阴影: box-shadow:X轴偏移量 Y轴偏移量 [ ...
- CSS类选择器和ID选择器
CSS类选择器和ID选择器皆允许以一种独立于文档元素的方式来指定样式,同时二者皆区分大小写. 区别如下: 第一:在同一个页面内,不允许有相同名字的id对象出现,但是允许相同名字的class 第二:当页 ...
- Android中使用抖动动画吸引来用户注意
原文:http://www.androidcn.org/topic/552e65bc61d460226ab27a5c 在应用中,有时候我们要吸引用户去点击某些按钮,比如应用市场的推荐按钮,为了能够吸引 ...
- JAVA基础学习day14--集合一
一.集合的出现 1.1.集合简述 面向对象语言对事物的体现都是以对象形式,为了方便对多个对象的操作,就对象对象进行存储,集合就是存仪储对象最常用的一种试 1.2.数组和集合都是容器 数组也存对象,存储 ...
- IOS开发支付宝集成
开发准备 1.首先新建项目,然后去官网下载最新的开发包:http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&am ...
- IOS开发中(null)与<null>的处理
不小心在开发过程中,得到了(null)以及<null>的返回值,找了好长时间只找到了一个关于<null>的. 由于要根据返回值进行判断,做出必要反应,因此必须知道返回值所代表的 ...
- 百度地图开发的学习(一)——配置环境&基础地图
由于项目需求缘故,最近在学习Android地图的开发,所以就记录一下学习过程.最近都会陆续更新啦.目前使用百度地图API的挺多的,所以就先以它为基础学习一些地图的调用. 一.AK的申请 与web开发不 ...