总结
前言:这是一篇总结帖(会一直持续更新,每天),问题与答案来自于我大部分来自网络,小部分来自我自己以往的一些理解。肯定会有各种错误和不足。欢迎各位看官指正,以便我及时修改,但不喜勿喷(目前为临时版本)。C#
[*]C#中Struct与Class的区别
值类型与引用类型,存储位置,传参,初始化器,继承多态,是否需要new,如果写构造器的区别,析构器,使用场景
[*]c# 装箱/拆箱
C# 装箱和拆箱[整理] - 桦林 - 博客园
装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换,拆箱反之。
扩展 ——
堆与栈 :1.从内存存储来讲 —— 栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。栈中存储的数据的生命周期随着函数的执行完成而结束。堆由开发人员分配和释放, 若开发人员不释放,程序结束时由 OS 回收,分配方式类似于链表。
2.从数据结构层面来讲 —— 栈为受限的线性表,只能在表的一端进行操作(压栈/出栈),先进后出。顺序栈(使用数组形式存储,地址连续)/ 链式栈(使用链表形式来存储,地址不连续)。堆为特定的二叉树(根节点为最大或最小的满二叉树),详情见后边的排序算法部分。
大小端(栈大端,堆小端)—— 小端就是一个数据的低字节在低地址,高字节在高地址。 大端就是一个数据的低字节在高地址,高字节在低地址。
[*]宏与内联函数的优点与缺点
[*]Action与function
要注意防止重复注册(+=/-=)。
[*]C# 中闭包(Closure)详解
[*]C#中Dictionary的实现简述
c#中链表/stack/queue等都基于数组实现。
[*]C# List源码分析
[*]C#中正确使用enum做Key
[*]什么是 CLR ?
AOT / JIT
[*]C# 深入分析 GC 处理机制
标记法,分代法。1.不回收非托管堆。2.回收时间不确定。
GC.Collect使用的场景。
引申:引用计数法 / 循环引用
[*]C#杂项:
1 . ArrayList与List<int> 区别 : C#中数组、ArrayList和List三者的区别 - 君莫笑·秋 - 博客园 (cnblogs.com)
List<T> 类型安全 / T为值类型不装箱拆箱;ArrayList存值类型会装箱/拆箱。
2.(56条消息) 09 简述关键字Sealed用在类声明和函数声明时的作用_小听歌的博客-CSDN博客
3.protected internal 和internal 区别 - 好好學習 - 博客园 (cnblogs.com)
数据结构相关:
1.数据结构基础分类
数据结构:八大数据结构分类_公众号:鄙人薛某-CSDN博客_数据结构
复杂度衡量:(56条消息) 复杂度的详细解释_coding1994的博客-CSDN博客_复杂度
常用排序算法:1.0 十大经典排序算法 | 菜鸟教程 (runoob.com)
复杂度:(56条消息) 常见算法的时间复杂度_Mirror_w的博客-CSDN博客_常见算法的时间复杂度
算法大全讲解
Unity相关
资源
1.meta文件 guid / guid引用。
2.协程/进程,以及他们的区别。
Unity 协程的原理
协程工作在主线程,能让多任务同时进行。进程为自己独立的堆栈,不能访问UnityEngine命名空间下的类名和方法,组件(继承自UnityEngine.Object)。但可以访问UnityEngine定义的基本结构(int,float,Struct定义的数据类型),如Vector3。
2.IL2CPP
IL2CPP与Mono的区别
Lua相关:
lua元表 / 元方法
lua类,类的继承的实现:Lua实现面向对象两种方法 - 学习使我进步 - 博客园 (cnblogs.com)
lua table实现原理:Lua设计与实现笔记 - 学习使我进步 - 博客园 (cnblogs.com)。
ToLua简易
Unity3D热更新技术点——ToLua(上) - 知乎 (zhihu.com)
Unity3D热更新技术点——ToLua(下) - 知乎 (zhihu.com)
ToLua原理 : (56条消息) 【学习笔记】从零开始学ToLua(四)tolua原理解析_Narkissos_k的博客-CSDN博客_tolua原理
一些问题:
1.拼接字符串时不要用 .. ,浪费内存。因为lua中string是不可变的,每次操作都会产生一个新的字符串,开辟一块新内存(已经产生过的会被重用)。使用concat或string.format(这样只会在一块内存中进行所有操作)。
2.使用局部变量缓存。
3.使用对象池。
4.配置表优化。
2.table定义时初始化内容。
Unity优化
[*]性能优化
全能型: Unity移动端性能优化 - 知乎 (zhihu.com)
阴影优化:光圈/rtt+projector/平面阴影
减dc(动批/静批/Instance/纹理图集/lod/遮挡剔除)。
减带宽(mipmap, 纹理压缩)。
减计算:顶点数 / 减shader复杂度。
GC:用StringBuilder / CompareTag / Pool / 不用LINQ ,避免频繁用GetComponent / 用Vector3.zero而不用new Vector(0,0,0) / 用OnBecameVisible()和OnBecameVisible()优化update更新 / ref的使用。
[*]内存
1.【纹理优化(三)】善用Mipmap - 知乎 (zhihu.com)
2.纹理压缩 / POT / 纹理图集 / readwrite / 减少MaxSize
3.网格压缩 / 禁readwrite / 禁骨骼BlenderShape / 尽可能禁法线切线
[*]包体大小
1.纹理压缩 :(56条消息) Unity中图像设置与常用压缩算法_就是爱折腾的博客-CSDN博客_unity图片压缩方案
2.UI 图关mipmap.
3.防止资源被重复打包(如Shader放单独一个包,初始化时就加载)。
4.剔除一些资源导入时引入的无用资源(如模型导入时产生的StandardShader)。
5.看日志。
(56条消息) unity中的优化方法_宏哥的博客-CSDN博客
[*]UI:
Unity GUI(uGUI)使用心得与性能总结 - 简书 (jianshu.com)
Unity性能优化基础篇——UI优化小技巧 - 知乎 (zhihu.com)
1.避免网格重建,NGUI Panel级别 / UGUI Canvas级别:动静分离
2.循环 列表 / Grid。
3.减少DC(避免图集穿插,最好用frameDebugger检查。UITexture与UISprite穿插)。;图集减dc(要提高利用率,单张不过大(不超过2048))。不好处理的夹层尝试调整图集。
4.关readwrite,mipmap。
5.关raycastTarget / interactiveable。
6.尝试减少UI复杂度(加载时负载过大),考虑缓存经常使用的UI。
7.避免grid / layoutGroup仅用于初始化,而不需要更新(初始化后禁用组件)。
8.避免大量重叠元素。
NGUI:
Unity-NGUI-Depth分配 - 知乎 (zhihu.com)
[*]渲染相关:
Games101 Games101个人学习笔记 - 知乎 (zhihu.com)
1.rt原理(56条消息) Unity3D中的RenderTexture详解_御坂御坂001的博客-CSDN博客_rendertexture
2.PBR:
BRDF:【深入浅出】PBR 与 BRDF 的原理以及在Unity中的实现_哔哩哔哩_bilibili
(57条消息) BRDF_派大星PatrickStar的博客-CSDN博客_brdf
工作流简介 :10分钟了解PBR流程-PBR基本原理和概念 - 知乎 (zhihu.com)
由浅入深学习PBR的原理和实现 - 0向往0 - 博客园 (cnblogs.com)
常用反走样技术:Games101_06_Rasterization(Antialiasing and Z-Buffering) - 知乎 (zhihu.com)
3.常用效果
Unity中做一颗小星球 - 知乎 (zhihu.com)
一个要求实现特效的小题目,知识点很多~ - 知乎 (zhihu.com)
渲染优化杂项:
1.令人抓狂的Grab Pass,为什么移动设备不要用? - 知乎 (zhihu.com)
2.渲染优化:Unity移动端性能优化总结(持续补充) - 知乎 (zhihu.com)
工具:
查询工具:分享一个专业TA的《Shader参考大全》 - 知乎 (zhihu.com)
杂项:
1.UGUI / NGUI高效新手引导
UGUI
1.不用shader : 调整层级(不考虑) / Canvas+GraphyicRaycaster:
var canvas = targetUIElement.AddComponent<Canvas>().overrideSorting = true;
canvs.sortOrder = 1;
targetUIElement.AddComponent<GraphicRaycaster>();2.用shader(原生支持穿透检测,支持旋转过渡,支持边缘柔和,支持图片蒙版)。
(56条消息) 【Unity】基于矩阵的UGUI引导蒙版方案_MrASL的博客-CSDN博客_unity 蒙版
目标UI元素rect->转蒙版空间->rect区域转UV 0- 1
NGUI
从UGUI 2号方案改,注意事项:
1.size,pos支持进行转换。2.全局蒙版的话,可以单开一个panel放上层来专门处理蒙版,不会出现由于网格重建导致的蒙版效果消失。如果是嵌入在UI中间,在OnRender回调时要检测材质的变化(如果材质变了(所在的panel被重建了),需要更新一次蒙版逻辑)。
引申:NGUI解析
(56条消息) NGUI的原理机制_cexgiant的博客-CSDN博客
2.UI自适应
UGUI :CanvasScaler->ScaleWithScreenSize->MatchWidthOrHeight。
NGUI:UIROOT->ConstrainSize(填写分辨率,背景图搞大点)
3.Protobuf:(56条消息) protobuf 语法和注意事项_jiaoyongqing134的专栏-CSDN博客
1.protobuf服务端没提供的字段解析出来是空字符串(不是null)。
4.3D无缝地图
5.A*寻路 : 【手把手教你】Unity中实现A星寻路算法_哔哩哔哩_bilibili
(56条消息) A*算法中二叉堆的使用_Ymiku的博客-CSDN博客
(56条消息) A星进一步优化,让二叉堆更快,更猛。as3版_yaonai2003的专栏-CSDN博客
6.UI框架实现
【Unity3D技巧】一个简单的Unity-UI框架的实现 - 王选易 - 博客园 (cnblogs.com)
Unity UI框架(一 窗口层级管理) - 简书 (jianshu.com)
1.type与路径配置(json/table) / 栈机制 / 类结构设计(管理器,View,ViewContext)/ 动画 / 本地化(预设翻译与动态翻译)/ 无限滚动 / UI修饰(ModifyVertices / 无drawcall点击物体)
7.游戏客户端框架搭建 - 知乎 (zhihu.com)
Unity手游开发三两事 - 知乎 (zhihu.com)
8.23种设计模式介绍(一)---- 创建型模式 - 水谷 - 博客园 (cnblogs.com)
页:
[1]