栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

unity学习日记(1)

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity学习日记(1)

1、Object.Destroy对象后,该对象以及所有孩子节点都会被销毁,节点上带的组件也会被销毁,场景中不显示;其存在延迟时间,预计下一帧回收销毁,本帧对象还存在,Object.DestroyImmediate是立刻回收


2、 gameObject.SetActive(true); 用来激活显示对象,此时对象在场景中


3、组件的enable 只是用来停用该组件逻辑,不会对(GameObject)的其他组件造成影响


4、组件的awake 只在创建时调用一次,不管脚本是否enabled;Start是在对象被第一次enable时调用;如果对象(GameObject)本身没激活,那么Awake,Start都不会调用。


5、gameObject.activeSelf判断自身是否激活,activeInHierarchy判断在场景中是否激活(父节点禁用也算不激活)


6、在组件内用 this == null 来判断是否对象已被销毁;


7、继承于MonoBehaviour的组件类在 Object.Destroy后不久就会销毁回收(OnDestroy);销毁后对象name被命名为"null"
    其他自定义类,则在失去引用后由C#的回收器固定时间销毁(析构函数),失去引用包括对象被销毁回收、赋值为null。


8、增加1W 次new GameObject 加1个组件的效率远高于一个GameObject 增加1W个组件,初始化时,前者约0.28s 后者约4.3s。 
    执行1W 次GameObject 自带updade约1.2ms,for循环执行1W次约0.45ms。所以大批量逻辑对象最好不要继承于MonoBehaviour,效率较低


9、gpuinstance 需要同个材质球,shader内可以自定义不同的参数,需使用UNITY_DEFINE_INSTANCED_PROP注册参数,不然不算;合批渲染也是有上限的。
    值得注意的时引擎自带的渲染排序,有时候会不是同个渲染顺序,造成不同材质球的渲染批次打断;
    3D的最好每个不同材质球设置一个不同的渲染序号RenderQueue,以保证不会因为同个批次排序问题造成不合批,但会失去深度排序渲染的效果;
    2d可以设置SortingLayer 与Order in Layer,一般设置Order in Layer来保证同个渲染批次只有一个材质球。
    如果调用了MeshRendered的material,会导致渲染批次打断,因为新生成的material与_sharedMaterial不一致。

10、使用AnimMapBaker烘焙骨骼动画时, 需制作成一个带Animator的模型预制体,也可使用旧版动画,2者只处理一个,最好拖动到场景中再拉到对象中进行烘焙,
    注意看下烘焙出来的图片是不是纯黑的,纯黑的说明烘焙失败了,这时候可以删掉已烘焙出来的图片再处理,已存在的纹理图片可能会写不入数据。
    会自动将Animator里所有状态的骨骼动画节点导出到一张图片中,可生成材质球,预制体,同个动画状态会只保留一份但状态参数还在。

11、MeshRendered的material的get方法里面,会判断_material跟_sharedMaterial是否相同,如果相同,返回_material,如果不同,会新建一个_sharedMaterial的拷贝,并赋值给_material和_sharedMaterial。可能会导致gpuinstance 合批失败,因为是不同的材质球


12、srp batcher 是使用了 常量缓冲区数据cbuffer定义结构体,用instanceID来区分;gpuinstance也是,只是会创建一个结构体数组,缓存不同的数据,通过instanceID计算当前数组偏移来获取值
    
13、动态设置MaterialPropertyBlock 不生效,可能因为Material频繁切换shader文件里存有残留数据,导致生成时数据混乱错误,也有可能设置的Material不对


14、修改的Lit.shader在手机上显示异常, 可能是因为 只修改了subshader里的 #pragma exclude_renderers gles gles3 glcore  #pragma target 4.5 类型下的pass处理,未修改target 2.0下的pass处理,一般手机平台使用的是target 2.0 也就是#pragma only_renderers gles gles3 glcore 模式下的pass,如果上面使用target 4.5的subshader里有一个全平台的pass会导致不执行target 2.0的


15、shader 深度,即距离摄像机的远近,越小越近;写入深度,即渲染时把该值记录在该坐标信息块上;然后进行深度测试,就是对比之前该点上记录的深度值,判断是否需要跳过颜色值渲染。


16、渲染队列值renderQueue越小越先渲染,同个渲染队列值,按透明层(2500是透明与不透明的分水岭),不透明的(2500以下)的,深度越小越先渲染,透明的深度越打越先,按照包围盒的中心点的深度进行排序

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号