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的右键菜单中,便于编辑模式下调试。
8.UnityEngine.EventSystems.ExecuteEvents.Execute(gameObject, pointer, ExecuteEvents.pointerClickHandler)模拟click点击等事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值