- 博客(35)
- 收藏
- 关注
原创 MMO_随笔
处理流程:在BattleworldSys里使用一个字典,针对第二个情况,先创建一个地图,其他玩家的请求就先挂起,等待创建成功后进入,进行相应的回调。因为此时的进入请求发生在多线程中,需要等当前world的线程把这个请求处理完之后才算真的进入了。Mode(相关面板的显示,怪物的创建)=>Root添加到Dic中,驱动Update。二:多个玩家(不同地图,同一地图)都要进入,地图还没创建(已经创建)03 各模式的声明,在root里进入,离开时的逻辑。一:第一次进入,地图还没创建(已经创建)
2025-03-16 15:48:21
488
原创 网络通信库
SocketAsyncEventArgs是一个套接字操作的类,主要作用是。它的优势在于完成端口的实现来处理大数据的并发情况,另开一个工程类去继承IPPOMsg。3.方便后续添加消息string,把I。服务端对接多个客户端,用。中间人 Token类。
2025-02-27 23:15:25
317
原创 C#相关.
(1)三种方式可以获取type:变量的GetType()方法 、typeof(类名)、Type.GetType("类的命名空间+类名")一些API 获取可用工作线程 io线程数 最大 最小数 开启线程(方法中有两个参数,如果传了第二个参数,它就是第一个参数的值)3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。就是值类型改值不改本值的那一套变为了引用类型的那套 可以改值了 可以用于变量、返回值...之间。可以单个获取(传名字),也可以全部获取。
2024-08-08 10:17:26
893
原创 定点数的实现
3.定点数的转化为原始(float or int)数据、Tostring和equal方法的重写。/// 定点数 运算 (把浮点数转为定点数进行运算,保证所有平台结果的一致性)1.构造函数和显示转换(float转PEInt)、隐式转换(int转PEInt)/// 浮点数有很多问题 多个平台一些运算结果不一致。//因为要把float转化为整形来操作。2.运算符重载:特别注意乘除和取反,右移。定点数实现的是float转PEint。PEcal:一些计算和钳制函数。上述代码模拟了护盾的效果,,需要对负数进行处理(
2024-08-08 10:17:04
312
原创 UI监听&确定性的物理碰撞&插值平滑
整体思路:实现一个PEListen类:实现unity封装好的接口IPointerClickHandler,声明一个委托,参数为PointerEventData(后续优化加一个object)。总结:通过初始化碰撞环境:包括加载地图的box和圆柱体碰撞器到特定的根节点;对单个或者多个碰撞体的碰撞处理:包括对速度的方向校正和边界向量的校正=>进而影响LogicDir和LogicPos。PEListen类:实现unity封装好的接口IPointerClickHandler,参数是PointerEventData。
2024-08-08 10:16:46
261
原创 KCP的实现
kcp的客户端和服务端一定是要基于一个相同的端口来通信的,但两者没有连接之前,需要一个对话id,这个全局唯一id只能有服务端来下发,客户端来下发的话就会很混乱。增加消息和update处理消息。7.kcpnet服务端。1.简单的tcp程序。
2024-08-08 10:16:23
294
原创 游戏中常见的几种排序算法
用数组建立起一个堆的概念,建立一个大顶堆(找最大的非叶子节点,然后和它的子节点比较,最大的放顶,比较完之后索引值--)三个变量 分别是一个基准值 一个lefttmp 一个righttmp 三个while循环。类似归并排序 有递归 分数组。
2024-08-08 10:13:27
399
原创 实现各平台确定性的物理碰撞
2.再moba帧同步游戏中,15帧的固定调用差不多是网络那边的极限了,采用其他手段如平滑显示来提高画面的平滑度。找速度方向与边缘法线的夹角最大值,如角3和4,4更大,所以是看v方向和a法线的夹角,计算投影大小。1.物理运算,比如刚体运动系统的运算是通过固定的时间来驱动的。,如图中b法线,判断角2和角5的大小,如果5>2,说明满足回弹条件,需要回弹。回弹条件:速度方向在角aoc之外,需要反弹。1.什么时候要回弹?怎么判断回弹的角度?
2024-07-04 20:41:34
243
原创 算法总结-栈和队列
1.栈实现队列思路:两个栈实现,一个出一个进。pop() 把sin的元素出栈赋值给sout,赋值完后sout pop的第一个就是队头元素peek() 直接调用上述实现的pop函数思路:单个队列实现。pop:把队列的头元素依次插入到队尾,除了最后一个(这个元素是要pop出去的)。top:直接调用队列的back方法思路:用栈来实现,遍历s对于每一个左括号,栈里push进一个相应的右括号。两种失败情况,如果栈的top和s[i]相等就返回true。
2024-06-28 16:52:09
425
1
原创 Unity网络开发基础-随记
可以通过该类来下载和上传一些数据,主要配合http,ftp,本地加载这三种一起使用。实现一个计时,系统时间减去上一次收到心跳消息的时间大于多少就算客户端已经断开连接了。定义一个规则,前面四个字节表示ID,根据ID来区分不同的消息类型。8.导入定义(使用另一个文件或者同文件的Protobuf文件)通用的转换(就是翻转字节数组)用的比较多(支持的类型多)。....下面就是把服务器的资源写入到创建的空资源中去。PlayerMsg数据类 继承了BaseMgs类。将生成的cs文件导入unity中,在任意脚本引用。
2024-06-07 23:17:52
1200
原创 unity随记--Addressables
都是异步加载 第一个资源标识类需要自己传入要加载的泛型 函数返回值是一个委托类型。注意第三个参数 有合并和相交 看需求加载哪一种或几种资源。多个信息加载多个资源 即根据名字和标签来加载。1.加载资源 释放资源。匿名方法直接在参数里。
2024-06-07 20:13:35
187
原创 二进制持久化
1.字符串和其他类型转字节类型 BitConverter和Encoding。2. 补充 打开并读取Excel表的具体信息。3.序列化为二进制 和反序列化二进制。3.对一个类的序列化和反序列化。//根据文件流读取Excel表。1.Unity添加菜单按钮。流的索引 index。
2024-06-07 20:13:09
231
原创 算法总结--双指针法
然后对三个数分别去重,left和right去重时机:要在满足条件放入结果集里面之后。双指针法,只要得到剩余的不同val的数量,优化写就是当left对应的值等于val时候,把right-1的值丢给left,继续比较。多了一层循环,注意去重和剪枝(区别于三个数等于0,这里是四个数等于一个目标数)。oldsize和newsize指针,从后向前找(避免频繁移动元素)当前指针等于tmp(当前指针++)cur->next指向前置指针。两个指针 当前指针和前置指针。翻转方法和标准化空格方法。当前指针赋值给前置指针。
2024-06-05 15:57:26
285
原创 算法总结--字符串篇
思路:两个字符串大小: 一个原始大小 ,一个是计算后的大小, for从后往前循环遍历 ,遇到字符的 ,直接放到新串上 ,遇到数字。因为从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素整体向后移动。双指针,一个左一个右,左边开找,等于目标值,就把右边的元素赋值过来,右指针--。快慢指针 for循环里快指针++, 值不等于目标值时,赋值,慢指针++这里判断了左指针是否满足条件,在赋值给左指针的时候也判断了右指针。reverse函数:区别于原始的传两个迭代器,这里传三个参数。
2024-05-26 11:02:17
432
原创 随记 Unity-ScriptObject
将一些只用不变的数据用SO容器装载 作为一个数据文件 其他类对象要使用这个数据文件只需声明这个数据文件对象 然后再inspector面板中挂载。原始情况是n个对象都挂载了脚本 数据就会创建n多个 而这n多个有些是共享的且不变的。这样就实现了资源的复用。最后一种情况一般不用 都是要基于Json、二进制来的 画蛇添足了有点。创建一个基类继承SO 子类对象的操作就是多态数据的操作了。(泛型声明) 其中的instance是。3.使用SO和SO的生命周期函数。7.单例模式获取数据。直接加载SO数据对象。
2024-05-23 16:43:56
756
1
原创 算法总结-哈希表
需要返回下标 用map来实现 只要一个for循环 unordered_map.find如果找到,则返回一个指向该元素的迭代器 可以用箭头来访问key和value 符合条件直接返回一个{ }这里用到了set 两个set 一个存结果(这里也用set的原因是因为要用set来去重) 一个来判断。双指针法,三个"指针" for循环的i left=i+1 right=size()-1。然后三个数的和 与 0 的关系 改变left和right的值 趋向0。开始要对i进行剪枝 就是判断第一个元素和是否重复。
2024-05-20 15:13:01
342
1
原创 算法总结-链表篇
两个节点 一个前一个后 修改后的next指向前 注意顺序 先翻转再更新。虚拟头节点 方便删除 判断cur->next是否为空。fast先往前移动n单位 然后两个指针遍历到最后。开始要存储虚拟头节点下的第一个节点和第三个节点。就是交换相邻的两个节点 分三个步骤。两个指针中间就是要删除的节点。
2024-05-19 11:30:19
285
1
原创 Unity性能优化(UGUI篇)
Overdraw(超绘)是指在渲染过程中绘制了超过一次相同像素的现象。当多个UI元素重叠时,每个像素都需要被多次绘制。这种绘制超出了渲染所需的最小像素数,因此被称为Overdraw。比如我们只需要看到1就可以了,但是1是一个半透明物体,如果234都是半透明的,是能看到5的,1234都需要被绘制,不能进行遮挡剔除了。2. 打图集 把一个面板的UI资源放到一个图集里面。背景大图不要和小图放在一个图集(比如只要记载一张小图,会把大图也加载出来)Overdraw优化。优化Overdraw。
2024-05-11 23:38:33
281
1
原创 Unity的一些随记
设置Unity的默认图层排序 修改TileRenderer的渲染模式为Individual。打包图集用来优化性能,降低DrawCall(设置一个目标四元数,Slerp方法。
2024-04-01 22:36:54
364
原创 游戏的存档和读档和一些注意点
刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。其中,value表示要限制的值,min表示限制范围的最小值,max表示限制范围的最大值。是Unity中的一个属性,用于获取或设置物体的欧拉角(Euler Angles)。欧拉角是一种表示物体旋转的方式,通过三个角度(分别对应x、y、z轴)来描述物体的旋转状态。第二 则是一些简单的数据。
2024-01-28 16:37:18
872
原创 贪心算法的一些题目总结
遍历数组对5和10进行加减 在20的时候。贪心 先按身高从大到小排序 再按k值插入。贪心 10和5优先 全是5最后。406.根据身高重建队列。
2024-01-25 17:09:58
363
原创 Unity 塔防笔记
这里旋转要注意坦克的头部和坦克本身的中心点是否一致,不一致就导致不能实现预期效果,需要在坦克上建一个空物体 再把坦克头部放到空物体里面(这里还要注意保持这个空物体的Z轴即坦克头部子弹方向和坦克头部一致。引擎中的一个方法,用于获取游戏玩家在键盘或游戏手柄上输入的某个轴(Axis)的值。这里的 "" 是一个字符串参数,表示要获取的轴的名称。ps:如果要在一个类里面实例化另一个类的多个对象 需要在另一个类上面添加可序列化代码 [System.Serializable]yeild return 0 循环返回。
2023-12-28 23:31:50
1159
1
原创 常用的一些DoTween动画
加了From后表示从目标位置移动到当前位置。加了true之后表示的是相对位置 原来是0,0 则表示从6->0。DOFade用来设置文字的透明度 最后一行的那个 在3s内从0到1。SetEase函数用来设置动画的特效(进入或者退出)九、可视化的DoTweenAnimation组件。默认执行完后自动销毁该动画,所以需要中间件。五、动画属性的设置(动画曲线和事件函数)本质就是让摄像机的位置随机改变。来设置不自动销毁来保存该动画。二、动画的快捷播放方式。三、动画的前放和倒放。八 颜色和透明度动画。
2023-12-10 23:19:21
610
1
原创 c#......
Hashtable.Add() Hashtable.remove() Hashtable.contains() Hashtable[键值]=xx;(改的是value值)遍历 键值遍历和值遍历。
2023-09-14 21:37:16
85
1
原创 栈区,堆区/虚函数与动态绑定/函数模板/虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。
二、struct的默认继承权限和默认访问权限是public,而class的默认继承权限和默认访问权限是private。一、 虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。
2023-05-09 11:19:13
63
原创 C++第一个完整项目:职工管理系统
代码没错误运行结果却大相径庭,注意看看if,for循环的大括号位置,以及一些输出,赋值代码的位置,有好几个错误都是放在了if,for这些语句的大括号里面,位置放错了。一直刷新不出来目录界面,结果是因为自己忘了用一个循环while(true)并且里面调用show()来实现。实现完一个功能就直接退出程序了,原因居然是case后面没有加上break。还是没搞明白 最后是在newsize上加了4才解决的(百度)
2022-11-06 21:23:36
104
原创 树的存储结构
定义一个结构数组存放树的结点,每个结点包括两个域,一个数据域一个双亲域(指示本结点的双亲结点在数组中的位置)用二叉链表作为树的存储结构,每个结点的两个指针域指向其下一个孩子结点和兄弟结点。//数组个数和根节点所在位置。把每个结点的孩子结点排列起来,形成一个单链表。找双亲容易,找孩子难。
2022-11-04 11:22:45
101
原创 MySQL 存储引擎
MySQL的四个体系结构 连接层(客户端连接,授权,认真,校验权限等操作),内存存放,采用hash(哈希)索引,只有一个文件,xxx.sdi存储表结构信息。,不同的存储引擎它的索引是不同的), 存储层(数据存储在磁盘当中)(核心,sql的解析,优化,跨存储引擎的操作) , 引擎层(以读写和插入操作为主,如电商足迹,日历等 myisam。存储引擎决定数据库当中数据的存储,更新查询的方式。大部分都选innoDB,完整性要求。
2022-10-27 19:56:44
326
原创 Mysql 多表查询,子查询
隐式 select *from 表A,表B where 条件...select * from 表名 a,表名 b where 条件。左外,右外 select *from 表A。(...多行多列) --相当于一张表 a。显式 select *from 表A。表B where 条件...
2022-10-16 16:04:18
148
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人