以下是我參加會議的筆記,並參考他們Blog做修正。
+Chrome NaCl支援Chrome用C++ base,不需另外安裝plugin。
+與FB談好在FB預設自動安裝Unity plugin
----實現Code動態更新
+Andorid:Include scripts in AssetBundle.去看TextAsset的binary data一節
+iOS:把第一關以及原始碼包成一個App,其他的資料做成AssetBundle
+加密程式碼:看Protecting content一節。
----
+NUGI目前不支援動態字體,2.6版後會有
+500個半透明粒子可以讓mobile的FPS降到7
+mobile硬體主要對triangle做最佳化,而不是對pixel
+推薦用easyTouch做為手勢判別
+Object.Destroy()並不會release material/mesh/texture等資源。
+GUI的使用上仍然推薦用NUGI而不是UNITY內建的GUI
----關於MMO
+大規模場景需要AsserBundle、ScriptableObject
+NavMesh:
NavMesh.Triangulate()可以輸出mesh。(應該是讓企劃或美術在Unity中編
輯後輸出給美術再作編輯)
----
+2D推薦工具有
-2D toolkit
-Sprite Manager 2
-ex2D
+不再推薦使用AssetServer,會在editor支援SVN、Perforce
----3D mobile Game最佳化
+主角/怪物
-300~2000面
-只用一個Skin mesh renderer
-材質1~3個
-bone數量小於30
+動態物體
-用Dynamic batching
+靜態物體
-少於500面
-標記為static
-不要加上Animation component
+地形
-長寬小於257(預設為2000)
-一個terrain物件不要超過4個貼圖
+貼圖
-建議png或tga
-長寬小於等於1024
-使用mipmap
-UV盡量不要超過0~1,因為貼圖合併實比較不會出問題。
+聲音
-BGM用.ogg或.mp3
-音效用.wav或.aif
+Light
-能用lightMap或light probe就盡量用
-Important light設為0或1個,一般會用在方向光,各數越多Drawcall會越
多
-Pixel light數量設為1~2。(在Quality setting中)
+Camera
-使用camera.layerCullDistances來讓某些layer下的物件只在夠近
的距離中才被繪製。
+粒子
-螢幕上同時出現少於200顆
-每個Emitter最多放50個粒子
-粒子的size盡量小
-非常小的粒子的話,拿掉alpha channel(只留顏色/貼圖或是只用1 bit alpha)
-盡量不要用粒子碰撞
+物理
-最好不要用mesh collider
+動畫
-沒有使用動畫的gameObject要拿掉animation controller(手動)
-不需要縮放的話可以在animation editor中手動拿掉scaleCurves,可減少
33%的blending time
-只有一個animation clip的話,改回用原來的animation system
-使用Body mask
-IK用generic mode比較好,用Humanoid Mode的話會套用兩次所以很慢
(一般Bone套用成Humanoid mode,算完IK後再套回去bone)
-Macanim system在有些Android設備上有問題,硬體不支援NEON的會
有問題
+Render
-避免Alpha blending/testing,都很慢。盡量減少需要這樣做的pixel數量。
-使用Static Batching,會需要用到靜態的vertex buffer及動態的
index buffer,會用多一點 memory
-使用Dynamic Batching,會動到動態的vertex buffer及動態的index buffer,
限制是只能用在900面以下的mesh,如果vertex format較複雜的話,其點
數限制會更嚴格。
-設好Occlution culling,建議用PVS and Dynamic Object
+程式碼
-事先cache起來transform等常用的component,直接取用transform等同
於getComponent(),最好在Start()時用
myTransform = transform存起來,在update時只用myTransform
-減少FixedDeltaTime,設在0.04~0.067,可減少物理運算量
-iOS build時使用Fast and Exception Unsupported的build setting選項,
Slow and Safe 會比較慢。
+Shader
-不要用discard指令(用來放棄繼續執行的指令)
-少用sin/cos/sqrt之類的數學運算,用查表代替。
-在PowerVR上用兩個Vec2來而不是合併成一個Vec4,這跟文件上不同
但是測試後是這樣沒錯。
+如何做好最佳化
-多用Profiler
-優化做的再好,不如規劃好
-不停試驗
----AssetBundle工作流程
+Resource資料夾下只能放2G資料。(以後的版本會慢慢捨棄Resource的
功能,改用AssetBundle)
+WWW.Load不會在本地留下cache。
WWW.LoadFromCacheOrDownload()會留Cache。
+AssetBundle.CreateFromMemory()主要用在加解密資料
+用AB的依賴關係可以減少Memory的使用:
Push/PopAssetDependcies()
+描述場景依賴關係的檔案可以用ScriptableObject
+AssetBundle有版本可以查詢,可以強迫使用者下載新的AssetBundle:
LoadFromCache(url, version, crc)
同時也可以檢查CRC
----Unity Shader
嗯...去看官方文件比較快
+用 #pragma debug可以打開Shader code中被Unity隱藏的程式碼。
+有提到一個#pragma multi_compile,不過不太確定其用途。
參考資料