Uity开发随笔(一)

来源:互联网 发布:efe矩阵ife矩阵哪个先 编辑:程序博客网 时间:2024/05/19 01:29

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的右键菜单中,便于编辑模式下调试。

原创粉丝点击