台北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 ...
随机推荐
- sqlserver 存储过程 try catch TRANSACTION (转)
CREATE PROCEDURE YourProcedure ASBEGIN SET NOCOUNT ON; BEGIN TRY---------------------开始捕捉异常 ...
- 调试CRM JS开发
CRM 2013 的表单是一个IFrame,如果使用jquey来控制表单的话调试起来比较麻烦,如果直接使用浏览器(firefox)来开发和验证脚本可能会事半功倍. 首页列表页主窗体:var table ...
- 实验12:Problem I: 成绩排序
Home Web Board ProblemSet Standing Status Statistics Problem I: 成绩排序 Problem I: 成绩排序 Time Limit: 1 ...
- 转:jQuery 常见操作实现方式
http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...
- [android] SQLite 数据库的升级 和 降级
public class SqliteHelp extends SQLiteOpenHelper { /* * context:创建数据库所需的 上下文对象 * name: 数据库名字 * facto ...
- UWP开发中的流媒体
写这篇的目的只是为了记住这个东西, win10原生支持HLS了 AdaptiveMediaSourceCreationResult amsResult = await AdaptiveMediaSou ...
- C语言中void*详解及应用
void在英文中作为名词的解释为“空虚:空间:空隙”:而在C语言中,void被翻译为“无类型”,相应的void *为“无类型指针”.void似乎只有“注释”和限制程序的作用,当然,这里的“注释”不是为 ...
- 主程序底部TabBar功能跟登录页面布局
1:主程序底部TabBar的功能实现 效果图: 主要代码如下: - (UITabBarController*)setRootVC:(BOOL)bShowCart { //创建一个子控制器 用于显示当前 ...
- 我对XCode Objective-c Cocoa的简单理解
我对XCode Objective-c Cocoa的简单理解 Xcode Xcode说的通俗一点就是开发OS X 和 iOS 应用程序的. 如果我们想要认真点说 ,Xcode 是运行在操作系统Mac ...
- LeetCode 8 String to Integer (string转int)
题目来源:https://leetcode.com/problems/string-to-integer-atoi/ Implement atoi to convert a string to an ...