台北Unity开发者研讨会 笔记

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

说明

本文单纯只是笔记,若有笔误敬请见谅。

相关参考连结

  1. 你必须知道的Unity引擎知识
  2. Unity Asia Bootcamp 台北场– 线上观看
  3. Unity 今日首次在台举办亚洲开发者研讨会– 巴哈姆特
  4. Unity着色器系统介绍(幻灯片)
  5. Unity 开发者论坛-台北场(Unity ASIA BOOTCAMP TOUR TAIPEI )研讨会
  6. 独家专访:Unity 教育认证与台湾高等教育的深度对谈| Unity IN | 社群?媒体?平台
  7. Unity - Mecanim性能与优化

总论

  1. 开发者成长速度与上手速度是Unity在台湾的优势。
  2. 在Facebook与360刘灠器中预设安装Unity Plugin。
  3. 大陸有超過400個Android商城。
  4. 认证培训(新竹教育大学,高应科大等学校)。
  5. 鬼武者魂由Unity開發,Server端使用PHP。
  6. 开发者必须要注意的三阶段:开发-平台-广告金流。

你不可不知的Unity開發技巧

  1. Unity三種網頁發佈的方式:WebPlayer,Flash(效能低下),Chrome NaCl(Native C++,不需要Plugin)。
  2. Plugin的版本分别:Stable,Release,Beta,Alpha。可以修改网页码来指定plugin的下载版本与来源。
  3. Web缓存许可证(收费):“我们提供的统一Web播放器,可以在本地缓存的资产包的特殊扩展这是根据我们的业务开发团队取得了一项协议,授权一般是授权给开发者提供了较大的预期收益和。没有规模较小的基础“。
  4. 如何动态更新Unity产品的Source Code:透过将程式码输出为二维的TextAsset,然后在包装到AssetBundle中。
  5. Unity4已支援动态字型,nGUI2.6才支援动态字型(东亚字体)。(EZGUI目前就已支援-感谢永康ㄉㄉ堤供情报)
  6. GameObject.Destroy不会移除该物件的资源(Mesh,Texture,Material等)。
  7. Scaleform的仅支援Unity3.5.x
  8. 网路伺服器的清单:PhotonElectronSmartFoxuLinkSlimNetSlimIOCP
  9. NavMesh.Triangle()函式
  10. 王者之剑<蓝港在线>使用Unity开发的2D游戏。
  11. 开发2D游戏的插件:Sprite ManagerEx2D
  12. Unity Cache Server是开发团队用来在不同平台(资源)发布时的加速方式。
  13. Asset Server已不建議使用。
  14. 疾风,91都会自己开发对Unity的金流SDK。
  15. 透过设定优化发布的产品档案大小。

移动平台优化要点

  1. 每个动态物件(角色)的三角形面数在300到2000之间。
  2. 每个动态物件(角色)的Skinned Mesh Renderer仅用一个。
  3. 每个动态物件(角色)的材质数只用一个。
  4. 每个动态物件(角色)的骨架限制在30根以下。
  5. 使用Dynamic Batching合并那些杂类的动态物件。
  6. 静态物件设定为Static,方可进行Static Batching。
  7. 在3.5使用静态物件时移除Animation的组件。
  8. 地形(Terrain)的初始解析度設定為257以下。
  9. 地形(Terrain)筆刷貼圖數目控制在4以下。
  10. 贴图解析度大小控制在1024以下。
  11. 3D游戏开启Mipmap会增加记忆体但是可加速效能。
  12. 貼圖uv控制在0~1。
  13. 音乐档案使用ogg/mp3,短音效使用wav。
  14. 光源使用Light Map/Light Probe来取代动态光源。
  15. 使用方向光。
  16. Pixel Light控制在1~2。
  17. 控制摄影机的z-near与z-far平面。
  18. 设定物件的剔除距离。
  19. 小物件又很远得时候就不要画。
  20. 粒子系统将粒子总数控制在200以下。
  21. 粒子系统每个发射器发射粒子控制在50以下。
  22. 粒子的大小越小越好。
  23. 非常小的粒子去掉alpha channel。
  24. 不要开启粒子的碰撞。
  25. 碰撞類型不要使用Mesh Collider。
  26. 減少使用Animation組件。
  27. 不缩放的动画,去除Scale Curves的参数。
  28. 若只使用一个AnimationClip,就使用Unity 3.5的动画系统。
  29. 使用Macanim(Unity 4的動畫系統),要搭配使用Body Mask。
  30. IK選用Generic Mode。Humanoid Mode在Android上會耗費嚴重的效能。
  31. 渲染时减少使用Alpha测试与alpha混合。
  32. Draw Call Batching分为Static与Dynamic。后者点数控制在900下,若包含Position,Normal,UV,则是300。
  33. 使用Texture Packing将不同物件的材质变为相同,但必须手动修改UV。
  34. 使用遮挡剔除时谨慎设定谨慎设定封堵器(墙)与Occludee的角色。设定PVS只,PV和动态对象,自动生成门户(会改变的门)。
  35. 程式码,使用类别变数来暂存指标。
  36. 设定Fixed Delta Time在0.04到0.067之间。
  37. IOS发布时使用的快速和异常不支持的发布形式。
  38. Shader减少使用数学函式,减少使用Discard。Vertex使用Float,TextureUV使用Half,颜色与光使用Fixed。
  39. 在PowerVR的硬体下有时候使用两个Vec2反而会比较快。
  40. 使用Profiler。
  41. 使用Manager的架构来控制物件会比把每个物件都挂上脚本效率高。

资产包

  1. Resource这种读取资源的形态(有2G限制)会慢慢移除,统一改用Asset Bundle(可离线创造)
  2. Web缓存只能放资产包。
  3. Asset Bundle建出之后是有相容性的,ios与android的Asset Bundle与其他平台互不相容。
  4. BuildPipeline.BuildAssetBundle()是用来建立多个资产的资产包。
  5. BuildPipeline.BuildStreamedSceneAssetBundle()则是用来建立多个场景的资产包。
  6. BuildAssetBundleOptions.DeterministicAssetBundle来建立对资产的杂凑的ID做增量发布。
  7. 资产 assetBundleObj = WWW.AssetBundle->使用中的资产包。 新 捆绑可再进行加密动作。AssetBundle.Load() - >载入资产。
  8. 卸載流程:
    GameObject.Destroy() AssetBundle.Unload (false)只會卸載WWW.AssetBundle,AssetBundle.Unload(true)則會卸載WWW.AssetBundle以及相關資源。true的作用相較於使用false再使用Resources.UnloadUnusedAssets ()作用並不相同。 把相同的資源基底打包為Asset捆绑 使用BuildPipeline.PushAssetDependencies()来建立资产包之间的关连性。
  9. 范例1:把共通资源打包。
    Push
    Build共通资源包
    Push
    Build物件包1
    Pop
    Push
    Build物件包2
    Pop
    Pop
  10. 范例2:把Level所使用的资源也做成依赖形式。
    Push
    Build Level1
    Push
    Build Level2 (依赖于Level1)
    Push
    Build Level3 (依赖于Level2与Level2)
  11. 范例3:把场景包依赖于共通资源包
  12. 将设定各资源包依赖关系的XML设定为ScriptableObject并打包到Asset Bundle内
  13. 将场景切割为Asset Bundle的方式,等分,如切成九宫格。
  14. 将场景切割为Asset Bundle的方式,分大物件,中物件,小物件。让大物件先读入先显示。
  15. WWW.LoadFromCacheOrDownload()可设定版号。
  16. WWW.LoadFromCacheOrDownload的crc产生方式可透过错误使用同一个函式来产生真确值。
  17. 程式碼的加密過程:Assembly->Byte->TextAsset->加密->Asset Bundle->加密->TextAsset->Asset Bundle。
  18. 使用native dll来保护重要程式码,但Web应用不能使用dll。

统一着色器系统

  1. 透过Shader Name就会自动产生选择Shader的架构。
  2. SubShader可视为真正的Shader,由上而下执行。
  3. SubShader的Tag表示如何执行:可指定执行的顺序。
  4. SubShader的Tag表示如何表現。
  5. 著色方式Vertex Lit:快,限制多。
  6. 着色方式Forward:将灯光分为最重要+不重要以及其他重要。区分方式可手动,也可以依照强度与方向来自动决定。
  7. 着色方式Deferred:手机不能使用,也不支援透明。
  8. CG/HSSL会被转译为GLSL。
  9. 使用基本Shader会需要写132行的程式,使用Surface Shader来做隐藏简化:标明surfae code与light code。
  10. #pragma debug可以将隐藏的程式码显示在程式码中。
  11. 透过user define keyword将参数传入shader中。
时间: 2024-08-03 04:27:41

台北Unity开发者研讨会 笔记的相关文章

《NGUI for Unity》 翻译笔记开篇

Unity的教程总是零零散散的分布在网络的个个角落,作为一个初学者,总是依葫芦画瓢的跟着教程走,折腾了一个月,还是感觉啥都没学到.可能是我是个很菜的初级编程者,没有找到入门之道.作为一个各方面零基础的人,学习unity,既不像美工转来的那样对3D知识和软件操作思想有比较深入的理解,也不像从程序转来的那样有着扎实的编程功底.浑浑噩噩的度日,转眼到了大四.环顾四周,活了二十多年依旧一无所有,糟糕的将近一塌糊涂. 此时此刻,脑子里突然冒出那句"纸上得来终觉浅,绝知此事要躬行".是啊,上了这么

Unity开发者的C#内存管理(上篇)

本文翻译自:C# Memory Management for Unity Developers (part 1 of 3) 很多游戏时常崩溃,大多数情况下都是内存泄露导致的.这系列文章详细讲解了内存泄露的原因,如何找到泄露,又如何规避. 我要在开始这个帖子之前忏悔一下.虽然一直作为一个C / C++开发者,但是很长一段时间我都是微软的C#语言和.NET框架的秘密粉丝.大约三年前,当我决定离开狂野的基于C / C++的图形库,进入现代游戏引擎的文明世界,Unity 带着一个让我毫不犹豫选择它的特性

unity初探学习笔记-hello unity

unity3d是目前使用最广泛的3d游戏引擎之一,本系列教程将使用unity制作一款坦克大战游戏,从而带大家体验一下unity的使用. 这一篇教程主要介绍引擎的安装和环境的搭建,最后,我们会在手机上运行起来unity的第一个程序. 首先在unity的官方网站上下载unity的最新引擎,目前最新的版本是5.3.4,下载地址:http://unity3d.com/cn/get-unity/download?ref=personal 下载后一步步的按照提示安装即可,运行起unity,效果如下: 在这里

【小松教你手游开发】【unity系统模块开发】Unity Assetbundle打包笔记

*最近项目更新了Unity5.5.2,顺便更新了项目的ui打包,也更新一下这边的笔记 首先打包分为两部分,一部分是打包成Assetbundle包,一部分是从Assetbundle包解包出来成为可用的资源. 首先说第一部分 打包 所有资源都可以打包,甚至不是资源(一些数据)也可以打包,只要你需要. 打包出来的东西都可以直接用,一个字体,一个Texture,一个Prefab,一个场景,都是一打出来成Assetbundle包就可以直接用,但是为什么大家还是要各自开发自己的打包流程呢? 最重要的原因就是

unity基础知识笔记一(快捷方式、基础概念)

快捷方式: 飞行模式,可以用alt+wasd ,切换,实现用户以第一视角在场景漫游 alt+鼠标左键:围着关注点旋绕 :切换天空盒.雾效,光晕的显示与隐藏. ctrl+6:可以弹出animation视图 基础概念: Mesh Filter:网格过滤器用于从对象中获取网格信息(Mesh)并将其传递到用于将其渲染至屏幕的网格渲染器当中 Mesh Collider:Mesh碰撞体,为了防止物体被穿透,需要给对象添加碰撞体 Mesh Renderer:网格渲染器从网格过滤器获得几何形状,并且根据Tran

Unity 3D学习笔记之一 界面介绍

因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通) 一.Unity界面介绍 首先进入Unity3D,在菜单栏,File中new project,选择自己的工作路径初始时我们先默认不引入任何的package. 进入Unity的界面中,先对界面进行一下简要的介绍.区域大致依次分为Hierarchy.Scene.Inspector.Project,和上方的菜单栏(Menu bar)和工具栏(Tool

有关Unity 的一些 笔记之prefab

unity动态创建对象,需要使用预设prefab,以下方法可以动态创建. 首先需要在Hierarchy视图里创建GameObject,然后创建Prefab. 方法一: public   GameObject instantiate; GameObject go=Instantiate(instantiate,transform.position,transform.rotation) as GameObject; 将做好的prefab拖到Inspector界面中的 instantiate 字段中

Unity客户端框架笔记(状态模式和策略模式在游戏中的应用)

最近花了几天时间梳理了一下新游戏的客户端框架,虽然本身就有相对明确的方向,但是在一开始写的时候还是有些混乱,不过最终梳理完成后,个人感觉代码清爽很多. 这篇文章不是设计模式的教学,而是自己的一些想法和实践,我把代码梳理成自己喜欢的结构,保证逻辑和结构的清晰,但是这并不意味者它是符合所有人习惯的. 我之前有写过一两篇文章讨论客户端的结构,也吐槽过一些其他人的设计.可以说我在写代码之初就有一个相对明确的方向,多年的经验也可以告诉我什么样的代码是漂亮的,什么样的代码是有坏味道的. 首先我把客户端结构分

Unity sqlite学习笔记一

1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configuration)紧凑(compactness)可移植(Portability)它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symb