IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity学习日记(1) -> 正文阅读

[游戏开发]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以下)的,深度越小越先渲染,透明的深度越打越先,按照包围盒的中心点的深度进行排序

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:45:22  更:2022-01-04 13:45:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:51:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码