2012-08-27

關閉 "F7" 按鈕開啟 iTunes

mac 的 F6, F7, F8 等 Media Key 可以控制 VLC, Cog,... 等程式播放音樂歌曲。但其中的 F7 按鈕除了 Play / Pause 之外就是會啟動  iTunes。

若要取消這個功能有以下作法 :
1) 關閉 Function Key, 改用 keymapper ( Function key 改由 Fn+F1, F2,... 啟動 )
   a. 到 System Preferences -> Keyboard, 勾選 
        Use all F1, F2, etc. keys as standard function keys
   b. 安裝 keymapper, 自己設定 F6, F7, F8 的功能

2) 更改 itunes 名稱讓 media key 無法啟動之 (參考這裡)
3) 直接 patch rcd daemon (參考這裡)

第3種方法作者用 python 寫了一個程式去改 rcp 執行檔,改完之後除了啟動 itunes 之外的其它功能都還在,若要復原則只要把原來備份的 rcp 執行檔覆蓋回去就行了,似乎是最好的方法。

2012-08-18

Unity 3D 從 AssetBundle 載入 Lightmap

當場景裡的光源與模型皆靜止時,可使用 Lightmapping 預先計算光照結果,下圖為使用 Lightmap 前 (Directional Light) 及使用 Lightmap 後的差異:

All Terrain Tactical Enforcer (Directional Light)

All Terrain Tactical Enforcer (Lightmapping)

1. 製作 AssetBundle
Lightmap Bake 完成之後將 Model 打包成 AssetBundle,使用指令:
BuildPipeline.BuildAssetBundle(
    Selection.activeObject, 
    Selection.objects, 
    path, 
    BuildAssetBundleOptions.CollectDependencies | 
    BuildAssetBundleOptions.CompleteAssets
);
選擇的檔案除了 Prefab/GameObject 之外,Lightmap 圖片也要選擇:

選擇 Prefab 及 Lightmap

2. 載入 AssetBundle
載入 AssetBundle 時先設定 Lightmap 再載入 GameObject,此場景的 Lightmapping 參數如下:
Lightmapping 參數

按照當初 Lightmapping 之參數做對應的設定:
List arrld = new List();
LightmapData ld = new LightmapData();
ld.lightmapFar = 
aa.assetBundle.Load("LightmapFar-0", typeof(Texture2D)) as Texture2D;
ld.lightmapNear = 
aa.assetBundle.Load("LightmapNear-0", typeof(Texture2D)) as Texture2D;
arrld.Add(ld);
 
LightmapSettings.lightmapsMode = LightmapsMode.Dual;
LightmapSettings.lightmaps = arrld.ToArray();

再載入 GameObject :
GameObject go = GameObject.Instantiate(aa.assetBundle.Load("StaticObj", typeof(GameObject))) as GameObject;
此外慶幸的是,GameObject 之 MeshRenderer 內有關 Lightmapping 之參數在存取 AssetBundle 時皆有自動設定,不需再額外寫程式存取設定之。

程式碼可以在:https://github.com/phardera/unity3d_assetbundle_lightmap.git 取得