2013年6月24日 星期一

20130511_Unity BootCamp筆記

以下是我參加會議的筆記,並參考他們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,不過不太確定其用途。




參考資料

2013年6月12日 星期三

XCode 5 beta 初體驗

+Build setting如果Deployment Device設成iPad,會無法在Build的時候選擇模擬器,要設為iPhone或是Universal才行。
  目前看來應該是因為Simulator還沒有iPad版的樣子,我切到Universal也是沒有iPad模擬器可選。

+XCode5雖說有開始支援CI的功能,但是需要有Mac server的支援......

+iOS 7 多了一個GCController class,用來處理搖桿輸入的。

---這篇會持續更新                (吧..... 2014.0310看來是不會更新了 = =)