不解

你不可不知的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中。

评论