OverDraw
UGUI优化 OverDrawUnity基础:性能杀手Overdraw详解 - 知乎 (zhihu.com)
Overdraw介绍 Overdraw是指屏幕上的某个像素在同一帧的时间内被绘制了多次。
3.2 Overdraw影响什么
过多Overdraw可能会引起GPU过载,影响动画的播放和界面响应速度。
3.3 降低Overdraw
1.将Mask(自带两层Overdraw)替换为RectMask2D(自带一层Overdraw)
2.全屏遮挡的情况,则为被遮挡的canvas添加CanvasGroup 组件,然后在被挡住时将其alpha值设为0,不参与绘制,没有 DrawCall也没有Overdraw,同时顶点也不会参与重绘。
3.unity的文字显示中自带阴影组件shadow/Outline减少使用,自带overcall。
4.UI摆放,减少UI的叠加效果。
5.将不想显示的物体直接禁用,而不是将其透明度改为0,仍会产生overcall。
如何降低OverDraw减少不透明OverDraw与流行的游戏开发理念 ...
unity 优化资源加载相关
场景优化Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)_u3d5.6的遮挡剔除-CSDN博客
遮挡剔除(Occlusion Culling)Unity 中的遮挡剔除 Occlusion Culling 是一种性能优化技术,它可以帮助开发者减少需要渲染的场景物体数量,从而提高游戏的帧率和流畅度。遮挡剔除的基本思路是在运行时计算场景中哪些物体被遮挡而不需要被渲染,哪些物体是可见的需要被渲染。这样可以减少渲染所需的时间和开销,提高游戏性能。
Unity 中的遮挡剔除主要有两种方式:静态遮挡剔除和动态遮挡剔除。
静态遮挡剔除(Static Occlusion Culling)
是在场景构建时进行的,主要是通过 Unity 自带的预处理工具将场景物体分成一些区域,然后计算这些区域之间的遮挡关系。这种方式适用于静态场景和场景中的大部分物体都是静态的情况。静态遮挡剔除的优点是计算量小,不会对游戏运行时的性能造成太大影响。
动态遮挡剔除(Dynamic Occlusion Culling)
则是在游戏运行时进行的,主要是通过摄像机视野和场景中物体之 ...
unity Bulid-in 渲染管线
图形渲染管线图形渲染管线(Graphics Rendering Pipeline) - 知乎 (zhihu.com)
图形渲染管线是图形学知识考察最重要的一个问题,绝对是最高频的,必须掌握。问法有很多种,比如屏幕中一个像素是怎么绘制出来的,绘制出一幅图像的具体过程等。此外还有GPU渲染管线的问法,其实就是省去CPU阶段,直接从GPU阶段开始回答就行了,是一个意思。
什么是渲染管线图形渲染管线实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程,在概念上可以将图形渲染管线分为四个阶段:
应用程序阶段、几何阶段、光栅化阶段和像素处理阶段。
调用Render()摄像机对象调用一个Render()
如同摄像机一样 调用渲染api 通知cpu开始渲染流程
CPU渲染管线-应用程序阶段剔除
剔除:视椎剔除、遮挡剔除、层级等规则
视椎体剔除
层级剔除 遮挡剔除
渲染顺序-排序渲染顺序:按距离、渲染队列等规则
渲染管线 Render Queue
不透明队列 (Render Queue<2500) ...
关于游戏物理实现
基础公式计算https://blog.51cto.com/u_15273495/5040568
在游戏开发中,有时你可能希望不使用物理引擎来实现一些物理效果。可以通过手动编写代码来模拟这些效果,以下是一些常见方法和示例代码:
1. 运动学公式使用基本的运动学公式来模拟物体的运动。假设你有一个物体,它的初始位置、速度和加速度是已知的,你可以使用以下公式来计算它的新位置和速度:
位置更新公式:position = position + velocity * deltaTime + 0.5 * acceleration * deltaTime^2
速度更新公式:velocity = velocity + acceleration * deltaTime\
2.手动检测碰撞https://blog.csdn.net/yhn19951008/article/details/119899092
通过编写代码来检测物体之间的碰撞。以下是一个简单的 AABB (Axis-Aligned Bounding Box) 碰撞检测示例:
1234bool IsColliding(Rect a, Rect ...
Windows 命令
应用程序
指令
描述
Calc
小算盘
Explorer
文件资源管理器
Notepad
记事本
osk
屏幕键盘
管理工具
指令
描述
CleanMgr
磁盘清理
cmd
命令提示符
FsMgmt.msc
共享文件夹
GpEdit.msc
本地组策略
mrt
恶意软件删除工具
MsTsc
远程桌面
PowerShell
命令提示符
RegEdit
注册表编辑器
ResMon
资源监视器
sdclt
备份与还原 (Windows 7)
TaskMgr
任务管理器
TaskSchd.msc
任务计划程序
WinVer
关于 Windows
控制面板
指令
描述
AppWiz.cpl
卸载或更改程序
CompMgmt.msc
计算机管理
control
控制面板
DevMgmt.msc
设备管理器
DiskMgmt.msc
磁盘管理
DxDiag
DirectX 诊断工具
HdwWiz.cpl
设备管理器
MsInfo32
系统信息
NetplWiz
用户帐户
...
C++ 之STL
https://github.com/huihut/interview?tab=readme-ov-file#problems
STL
STL的六大部件和联系
STL容器知道哪些,都解释一下,原理是什么,实现一下链表(接下来就可能考察算法题了)
map,multmap,set,multset的原理(接下来会考察二叉树相关的题,我后面会介绍)
hashtable的作用与原理
操作符重载问题
前置++与后置++的区别,操作符重载的角度分析源码实现
函数模板(泛化和特化的问题),什么是全特化和偏特化
STL中常见的算法用过哪些,原理是什么(随机数,查找等)以上问题出现的频率最高,大厂基本必问,所以你需要必会。 答案均在侯捷老师的视频中。
STL的六大部件和联系STL(Standard Template Library,标准模板库)由六大组件组成:
容器(Containers)
算法(Algorithms)
迭代器(Iterators)
函数对象(Functors)
适配器(Adapters)
分配器(Allocators)
STL底层实现
vector底层是一块具有连续内存的数组,ve ...
unity热更新Lua
热更新的原理为什么使用Lua作为热更新语言,不用C# 热更新本身对于资源热更新是非常容易的,Unity自带的AB包就可以轻松解决,难的是代码热更新,因为Unity中的C#是编译型语言,Unity在打包后,会将C#编译成一种中间代码,再由Mono虚拟机编译成汇编代码供各个平台执行,它打包以后就变成了二进制了,会跟着程序同时启动,就无法进行任何修改了。
LUA是解释型语言,并不需要事先编译成块,而是运行时动态解释执行的。这样LUA就和普通的游戏资源如图片,文本没有区别,因此可以在运行时直接从WEB服务器上下载到持久化目录并被其它LUA文件调用。
不用C#热更的原因 准确的说,C#在安卓上可以实现热更新,但在苹果上却不能。
那C#为什么不做成解释型语言呢?因为C#的定位是一个追求效率且功能强大的编译型语言。在安卓上可以通过C#的语言特性-反射机制实现动态代码加载从而实现热更新。 具体做法是:将需要频繁更改的逻辑部分独立出来做成DLL,在主模块调用这些DLL,主模块代码是不修改的,只有作为业务(逻辑)模块的DLL部分需要修改。游戏运行时通过反射机制 ...
数据可持续化-ScriptableObject
ScriptableObject什么是 ScriptableObject
ScriptableObject 是 Unity 提供的一个数据配置存储基类,它是一个可以用来保存大量数据的数据容器,我们可以将它保存为自定义的数据资源文件。
ScriptableObject 是一个类似 MonoBehaviour 的基类,继承自 UnityEngine.Object 。要想使用它,需要我们写个脚本去继承 ScriptableObject 。需要注意的是,继承自 SctiptableObject 的脚本无法挂载到游戏物体上,毕竟它不是继承自 MonoBehaviour。
ScriptableObject 类的实例会被保存成资源文件(.asset文件),和预制体,材质球,音频文件等类似,都是一种资源文件,存放在 Assets 文件夹下,创建出来的实例也是唯一存在的。
ScriptableObject 的主要作用大体上可以分成三点:1) 编辑模式下的数据持久化2) 配置文件 (配置游戏中的数据)3) 数据复用 (多个对象共用一套数据)
编辑模式下的数据持久化当我们在编辑模式下修改了继承自 Scri ...
AndroidStudio-导入Gradle
关于AndroidStudio导入项目的正确方式,修改Gradle配置
前言在安卓的引擎AndroidStudio导入过程中,github存在许多老项目,他们的安卓版本号以及Gradle各不相同,固有此篇文章解决
安装AndroidStudio以及下载SDK相关链接:https://blog.csdn.net/qq_38436214/article/details/105073213
对比有关文件以下project为项目目录节点
build.gradle文件详解
根目录下的gradle文件
project/build.gradle:
这个是gradle 插件配置有关于插件版本下面讲解
1、repositories闭包,声明了jcenter()的配置2、dependencies闭包,声明了一个Gradle插件
1234567891011121314151617181920212223242526buildscript { repositories { //repositories闭包 google() jcenter() ...
SVN食用说明
前言在很多游戏公司,通过游戏体量和团队体量会有很多公司使用SVN(包括我公司),
主要原因在于SVN对于二进制文件比起Git来说适配,以及对于非技术人员(美术和策划)有着很低的学习成本
一、介绍SVN是什么?SVN 是一种代码版本管理工具,它具有以下功能:
记住每次的修改
查看所有的修改记录
恢复到任何历史版本
恢复已经删除的文件
SVN跟Git相比的优势
使用简单,上手快
目录级权限控制,企业安全必备
子目录 Checkout,减少不必要的文件检出
主要应用
开发人员用来做代码的版本管理
用来存储一些重要的文件,比如合同
公司内部文件共享,并且能按目录划分权限
SVN仓库推荐
svnbucket.com(SVN桶),目前最好用的 SVN 服务
安装SVN客户端
TortoiseSVN (windows)
Cornstone (mac)
二、SVN基本操作
检出 checkout
操作步骤
1
2
3
4
5
操作
TortoiseSVN
checkout
URL of repository
Checkout directory
user ...