关于游戏物理实现
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 b) ...
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热更新的原理为什么使用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 ...
unity 优化
介绍游戏性能优化的必要性
游戏启动优化Resource文件夹(是否可以存放很多东西)
游戏启动优化MonoBehaviour (Mono类应该使用多少,这些类逻辑应该是什么样的)
重复资源优化(会出现哪样问题)
纹理设置优化(减少内存提高效率)
纹理MipMap选择
纹理压缩优化 (对不同平台,每个平台格式不对会怎么样,比如重新解压)
非角色模型优化(脚本控制优化,减少渲染)
动画模型优化(提升了什么)
网格优化(对游戏点面处理的优化)
字符串优化1(拼接,比较,如果在update中不正确调用)
字符串优化2
集合List优化 (内存分部销毁)
闭包优化(什么时候调用合适,怎么规避怎么优化)
字典和枚举优化(内存分布,遍历效率)u
foreach优化(什么时候用forin 什么时候用for代替)
数组优化(少用多用List)
正则表达式优化
矢量运算顺序优化
颜色转换优化(颜色是自带的还是unity自带api)
object查找优化
摄像机访问优化(单例访问优化)
log输出优化(日志单打印,debug处理)
方法调用优 ...
c++ 和c11
内存管理C++
多态 虚函数
什么是多态?C++的多态是如何实现的?
所谓多态,就是同一个函数名具有多种状态,或者说一个接口具有不同的行为;C++的多态分为编译时多态和运行时多态,编译时多态也称为为静态联编,通过重载和模板来实现,运行时多态称为动态联编,通过继承和虚函数来实现。
虚函数多态时机:
通过基类指针/引用调用时触发动态绑定。
直接通过对象实例调用则为静态绑定。
对于非虚函数,三个类中虽然都有一个叫 func2 的函数,但他们彼此互不关联,因此都是各自独立的,不存在重载一说,在调用的时候也不需要进行查表的操作,直接调用即可。
由于子类B和子类C都是继承于基类A,因此他们都会存在一个虚指针用于指向虚函数表。注意,假如子类B和子类C中不存在虚函数,那么这时他们将共用基类A的一张虚函数表,在B和C中用虚指针指向该虚函数表即可。但是,上面的代码设计时子类B和子类C中都有一个虚函数 vfunc1,因此他们就需要各自产生一张虚函数表,并用各自的虚指针指向该表。由于子类B和子类C都对 vfunc1 作了重载,因此他们有三种不同的实现方式,函数地址也不尽相同,在使用的时候需 ...
git commit规范
前言
每次对于团队协作Git时,规范Git分支和Git Commit是很有必要的。
这是本人收集大厂实现的提交规范
Git
分支名
简介
Production 分支(main)
也就是我们经常使用的 Master (main)分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
Develop 分支(dev)
这个分支是我们是我们的主开发分支,包含所有要发布到下一个 Release 的代码,这个主要合并与其他分支,比如 Feature 分支。
Feature 分支
这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回 Develop 分支进入下一个Release。
Release 分支
当你需要一个发布一个新 Release 的时候,我们基于 Develop 分支创建一个 Release 分支,完成 Release 后,我们合并到 Master 和 Develop 分支
Hotfix分支
当我们在 Production 发现新的 Bug 时候,我们需要创建一个 Hotfix ...