Uity開發隨筆(一)

1.Unity自制地形系統時,高度圖使用.raw文件。
 導出時,先新建Texture2D,設置TextureFormat爲RFloat,使用SetPixel(new Color(Height, 0, 0))爲Texture2D賦值,再使用File.WriteAllBytes(path, texture2D.GetRawTextureData())方法導出。
 導入時,先新建Texture2D,設置TextureFormat爲RFloat,使用File.ReadAllBytes(path)讀入byte[],使用texture2D.LoadRawTextureData(bytes)導入。
2.Unity編輯器代碼中調用AssetPreview.GetAssetPreview()獲取貼圖預覽圖時,有可能返回null,可以使用循環+Thread.Sleep循環調用解決。
3.Unity編輯器代碼中如果需要顯示進度條,不需要特別的對邏輯做異步處理,也不用startcoroutine,直接在邏輯中調用EditorUtility.DisplayProgressBar就可以取得挺好的效果。
4.續1,UE使用的地形工具,導出的高度圖有時會用16位raw圖,而Unity的R16格式Texture2D不支持像素操作,因此換一種實現方式。
 首先確定高度範圍,之後直接讀取圖片數據爲byte[]。在r16格式中,每兩位表示一個高度。使用BitConverter.ToUInt16可以將每兩位數據轉換爲無符號整形,之後除以UInt16.MaxValue,就是該點的高度在高度取值範圍內所處的位置了。經測試效果與Unity自帶地形工具導入高度圖的效果相同。
5.自定義腳本編輯器有時會出現某些字段(如數組)在修改後可能會無法保存在場景中(場景沒有標註*號,ctrl+s無法將剛修改的數據保存),如果對目標GameObject調用SetDirty也不好使,可以使用EditorSceneManager.MarkSceneDirty()簡單粗暴的將場景SetDirty;
6.自定義Shader的透明物體在渲染LightMap的時候有時會渲染不出來,可能是因爲Shader的主材質名稱不爲_MainTex;
7.使用[ContextMenu(“XXXX”)]特性可以將腳本的某個方法加入到腳本Inspector的右鍵菜單中,便於編輯模式下調試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章