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的右键菜单中,便于编辑模式下调试。
8.UnityEngine.EventSystems.ExecuteEvents.Execute(gameObject, pointer, ExecuteEvents.pointerClickHandler)模拟click点击等事件
Uity开发随笔(一)
最新推荐文章于 2022-08-21 15:52:56 发布