<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[白小飞]]></title><description><![CDATA[如果你的才华配不上你的野心，那就静下心来看看博客]]></description><link>https://blog.csdn.net/J_avaSmallWhite</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; J_avaSmallWhite]]></copyright><item><title><![CDATA[《大话设计模式》笔记]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/129336225</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/129336225</guid><author>J_avaSmallWhite</author><pubDate>Sat, 04 Mar 2023 16:47:05 +0800</pubDate><description><![CDATA[《大话设计模式笔记》]]></description><category></category></item><item><title><![CDATA[GameFramework——引用池&对象池]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122659519</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122659519</guid><author>J_avaSmallWhite</author><pubDate>Mon, 24 Jan 2022 23:47:35 +0800</pubDate><description><![CDATA[前言
之前做游戏的时候用过对象池，适用于频繁使用回收的对象，可以防止对象反复生成和销毁，减少gc，之前用于人物移动的残影上。
GF中有两个池子，之前一直不知道有什么区别，直到看了传送门，没错又是群主大佬的文章，才知道引用池和对象池原理一样，但是适用的对象不一样，一般引用池用于存储C#类型的对象，对象池用于Unity相关的GameObj对象。
引用池

打开GF源码，可以看到关于ReferencePool有这四个文件。先分别介绍这四个类和他们的功能，最后拿StarForce中的一个例子来看看~
IRefere]]></description><category></category></item><item><title><![CDATA[GameFramework——UI]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122636791</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122636791</guid><author>J_avaSmallWhite</author><pubDate>Sun, 23 Jan 2022 00:37:51 +0800</pubDate><description><![CDATA[前言
刚开始做游戏时，大家就说入行了都是UI仔，证明了UI的重要性，导致我对UI框架一直有一种畏惧的心理。
这次就从GF的UI加载来简单看看GF的UI框架以及它的使用
在这里给大家推荐我们群主写的GF解析，写的非常好
传送门
打开UI界面
第一视角分析，找到ProcedureMenu.cs
首先订阅一个UI成功打开的事件，接下来就是一个OpenUIForm函数

我们继续往上，还需要往上。此处int?代表可空类型，如果没有赋值会返回null而不是0

此处我们通过读取配置表，并且加上前置路径，继续往上看

]]></description><category></category></item><item><title><![CDATA[GameFramework——事件系统]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122591528</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122591528</guid><author>J_avaSmallWhite</author><pubDate>Fri, 21 Jan 2022 16:54:57 +0800</pubDate><description><![CDATA[委托和事件
要搞懂GF的事件系统，我们要先搞清楚什么是委托和事件
传送门
委托delegate我认为就是一种函数类型，从而可以绑定多个同种返回值，参数的函数用于同时触发，而事件event就是委托的一种特殊形式，调用后可以用于来通知（调用）处理该事件的相应方法
而GF的事件系统则在触发事件的时候，传入了发送通知的本体(this)和EventArgs

若要创建自定义事件数据类，请创建一个派生自类的类， EventArgs 并提供用于存储所需数据的属性。 自定义事件数据类的名称应以结束 EventArgs 。
]]></description><category></category></item><item><title><![CDATA[GameFramework——资源加载]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122571495</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122571495</guid><author>J_avaSmallWhite</author><pubDate>Wed, 19 Jan 2022 21:08:48 +0800</pubDate><description><![CDATA[前言
此处的资源加载，只是简单涉及到了资源模块，并没有很详细的介绍（当然我自己也没有很详细的学习）
三种模式下的资源加载

可更新模式
就是我们前两篇文章资源热更新的流程

]]></description><category></category></item><item><title><![CDATA[GameFramework——资源热更新实操]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122562215</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122562215</guid><author>J_avaSmallWhite</author><pubDate>Tue, 18 Jan 2022 16:30:15 +0800</pubDate><description><![CDATA[Gameframework资源热更新实际操作]]></description><category></category></item><item><title><![CDATA[GameFramework——资源热更新]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/122504531</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/122504531</guid><author>J_avaSmallWhite</author><pubDate>Sat, 15 Jan 2022 15:49:54 +0800</pubDate><description><![CDATA[前言
时隔俩月，继续学习GF
资源更新流程
目前的我学习的版本好像和这个有点出入，比如checkversion后会更新是否需要更新进入updateVersion和checkResource两个流程

ProcedureCheckVersion
OnEnter

订阅webrequest成功或者失败的事件
向服务器请求版本信息
其中GameEntry.BuiltinData.BuildInfo.CheckVersionUrl在Config文件夹下的同名文件中可以进行配置
OnWebRequestSuccess]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——通用服务器框架]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121219337</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121219337</guid><author>J_avaSmallWhite</author><pubDate>Tue, 09 Nov 2021 11:59:33 +0800</pubDate><description><![CDATA[前言
网络游戏涉及客户端和服务端。服务端程序记录玩家数据，处理客户端发来的协议。本文就介绍一套通用客户端的实现。
该框架基于Select多路复用处理网络消息，具有粘包半包处理、心跳机制等功能，还是用MySQL数据库存储玩家数据，是一套功能较完备的C#服务端程序。一般单个服务端进程可以承载数百名玩家，如果更多就需要改为分布式架构。
7.1服务端架构
服务端两大核心是处理客户端的消息和存储玩家数据。
客户端与服务端通过TCP连接，使两者可以传递数据，服务端还连接着MySQL数据库，可将玩家数据保存到数据库中。
]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——通用客户端模块]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121180648</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121180648</guid><author>J_avaSmallWhite</author><pubDate>Sun, 07 Nov 2021 02:05:56 +0800</pubDate><description><![CDATA[前言
书中说的是搭建一套商业级的客户端网络模块，一次搭建长期使用。
本章主要是完善大乱斗游戏中的网络模块，解决粘包分包、完整发送数据、心跳机制、事件分发等功能
6.1网络模块设计
核心是静态类NetManager，它对外提供了一系列方法

NetManager.Connect(ip,port)连接服务端
NetManager.Close()
NetManager.Send(msgMove)发送消息，参数为协议对象，NetManager会自动把它转换成二进制数据
NetManager.Update()需外部调]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——深入了解TCP，解决暗藏问题]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121147062</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121147062</guid><author>J_avaSmallWhite</author><pubDate>Thu, 04 Nov 2021 22:49:58 +0800</pubDate><description><![CDATA[前言
这一章基本属于科普章节，相信看到这篇文章的人也学习过计算机网络，所以很多基础知识，比如三握四挥这些就不多说了。
5.3常用TCP参数
5.3.1ReceiveBufferSize
指定了操作系统读缓冲区的大小，默认值8192。缓冲区满了，发送端会暂停发送数据，较大的缓冲区可以减少发送短暂停的概率，提高效率。
5.3.2SendBufferSize
指定操作系统写缓冲区的大小，默认值也是8192，设定的大一点也比较好~
5.3.3NoDelay
默认情况TCP会使用Nagle算法发送数据，因为TCP/I]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——正确收发数据流]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121140918</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121140918</guid><author>J_avaSmallWhite</author><pubDate>Thu, 04 Nov 2021 15:28:26 +0800</pubDate><description><![CDATA[前言
本章主要介绍和实现怎样正确和高效地处理TCP数据（数据流）。也解决了上一章我们遇到的一些问题
4.1TCP数据流
4.1.1系统缓冲区
收到对端数据时，操作系统会将数据存入到Socket的接收缓冲区中，而且操作系统层面上的缓冲区完全由操作系统操作，程序并不能直接操作，只能通过socket.Receive、socket.Send方法来间接操作。
注意：之后出现的readBuff不是发送缓冲区也不是接收缓冲区，而是用户自定义的缓冲区，用于存放两个操作系统缓冲区读取出的字节数据。
4.1.2粘包半包现象
粘]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——实践出真知：大乱斗游戏]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121111430</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121111430</guid><author>J_avaSmallWhite</author><pubDate>Wed, 03 Nov 2021 00:37:17 +0800</pubDate><description><![CDATA[前言
这一章是教我们做一个大乱斗游戏。但是书中的代码有些前后不一致导致运行错误，如果你也碰到了这样的情况，可以参考我的代码
我们要完成的主要有以下这些事

左键操控角色行走
右键操控角色攻击
受到攻击掉血，队手hp为0时消失，自己hp为0时失败，掉线同理
角色类的编写
介绍协议、消息队列等
客户端以及服务端代码

角色类BaseHuman
unity相关操作基本都省略了

BaseHuman为角色基类
CtrlHuman代表操控角色，在BaseHuman基础上多了处理鼠标操控功能
SyncHuman代表同步]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——分身有术：异步和多路复用]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121064520</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121064520</guid><author>J_avaSmallWhite</author><pubDate>Sun, 31 Oct 2021 17:01:31 +0800</pubDate><description><![CDATA[前言
前面一篇文章全部用的是阻塞API，也就是同步Socket程序，客户端一卡一顿、服务端只能一次处理一个客户端的消息，不具有实用性。
所有有了异步和多路复用两种技术解决了阻塞问题。
2.1什么是异步代码
不需要进程一直等待下去，而是继续往下执行，直到满足条件才调用回调函数，这样可以提高执行的效率。
异步的实现依赖于多线程技术。在Unity中，执行Start、Update方法的线程是主线程，会另外开一条线程执行异步代码，然后满足条件后另一条线程调用回调函数，主线程继续往下执行代码，不受影响。
2.2异步客户]]></description><category></category></item><item><title><![CDATA[Unity3D网络游戏实战——网络游戏的开端：Echo]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121045351</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121045351</guid><author>J_avaSmallWhite</author><pubDate>Sat, 30 Oct 2021 00:51:31 +0800</pubDate><description><![CDATA[前言
虽然最爱单机游戏，但是和朋友一起玩联网游戏可以获得双倍快乐！所以开始学习网络游戏相关的知识啦
1.1藏在幕后的服务端
客户端和客户端之间通过服务端的消息转发进行通信。
为了支撑很多玩家，游戏服务端通常采取分布式架构，也就是分区服务端，每个服务端负责不同区的玩家。
服务端和服务端之间通常使用TCP通信。
1.2网络连接的端点：Socket
网络上的两个程序通过一个双向的通信连接实现数据交换，这个连接的一端称为一个Socked。
每个Socket包含五种必备信息：

连接使用的协议:TCP
本地IP:19]]></description><category></category></item><item><title><![CDATA[CSAPP——计算机系统漫游]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/121005427</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/121005427</guid><author>J_avaSmallWhite</author><pubDate>Thu, 28 Oct 2021 00:27:45 +0800</pubDate><description><![CDATA[1.计算机系统漫游
1.1信息就是位+上下文
大部分计算机系统使用ASCII标准表示文本字符，实际上就是用一个唯一的单字节大小的整数值表示每个字符。
只由ASCII字符构成的文件称为文本文件，其余都是二进制文件。
区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文，不同上下文中同样的字节序列可能表示int、float、string等
1.2程序被其他程序翻译成不同格式
.c可以被读懂，但是系统要运行必须被转换为低级机器语言指令，再打包为可执行目标程序格式。
编译系统：
1.预处理阶段：预处理器cpp]]></description><category></category></item><item><title><![CDATA[GameFramework——打包]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/120998274</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/120998274</guid><author>J_avaSmallWhite</author><pubDate>Wed, 27 Oct 2021 18:08:07 +0800</pubDate><description><![CDATA[AssetBundle
AB包的作用
AssetBundle的作用是，把资源打包，然后可以在需要的时候动态加载，从而可以实现资源的热更新。
之前学习了唐老狮的AB包打包课程，需要进行比较复杂的配置，但是GF已经帮我们安排好了最基础的部分，所以在一般项目中不用过分关心这些配置，只需要把相应的资源打包进相应的包里即可。
打包StarForce
AB包，从左往右分别是AB列表、AB包内的内容列表、Asset资源列表

添加AB包时左边填的是AB包名称，包含路径用/分割。后面是变体名称，比如muscic.bg，mu]]></description><category></category></item><item><title><![CDATA[GameFramework——Procedure]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/120996090</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/120996090</guid><author>J_avaSmallWhite</author><pubDate>Wed, 27 Oct 2021 17:21:47 +0800</pubDate><description><![CDATA[前言
结束了鹅厂三个多月的实习后，回到学校，当然不能忘记学习GF，今天就来盘一盘GF中的精华——流程
流程，是贯穿游戏运行时整个生命周期的有限状态机。通过流程，将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏，你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程，而对于单机游戏，你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程，只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

看到上面的类图我]]></description><category></category></item><item><title><![CDATA[GameFramework——FSM]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/117537961</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/117537961</guid><author>J_avaSmallWhite</author><pubDate>Wed, 09 Jun 2021 01:23:20 +0800</pubDate><description><![CDATA[前言
提到FSM有限状态机，做过游戏的人应该都知道简单的敌人AI很多情况下都是基于这个实现的。其实前不久吉比特面试官也问过我，有没有使用过状态机模式来运行整个游戏，我根本听不懂他在说什么。直到看了GF之后，才懂了些。
GameFramework整个游戏流程也是基于状态机来实现的，我们先在这篇笔记看看状态机，下一篇再研究流程~

总的来说，我觉得只要是能切换的都可以基于这个模块来实现？比如idle状态切换到move状态
标题

...]]></description><category></category></item><item><title><![CDATA[203. 移除链表元素]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/117607960</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/117607960</guid><author>J_avaSmallWhite</author><pubDate>Sat, 05 Jun 2021 23:56:30 +0800</pubDate><description><![CDATA[看似不难其实麻烦，设置一个虚拟头结点是关键。记得将虚拟节点和
然后就是双指针，一个前一个后，分情况讨论。
法一：设置虚拟节点后将其和head相连，因为我们不会每一次都将pre-&gt;next指向cur。如果是val，就让pre-&gt;next=cur-&gt;next，cur往后，pre别往后，因为不保证下一个cur就是正常的，可能下一个还是val，所以pre不能这么快更新。如果不是val，就把pre更新为cur，cur继续更新。
/**
 * Definition for singly-linked.]]></description><category></category></item><item><title><![CDATA[GAMES101图形学P13笔记（Ray Tracing1）]]></title><link>https://blog.csdn.net/J_avaSmallWhite/article/details/117576827</link><guid>https://blog.csdn.net/J_avaSmallWhite/article/details/117576827</guid><author>J_avaSmallWhite</author><pubDate>Sat, 05 Jun 2021 01:14:41 +0800</pubDate><description><![CDATA[为什么有光线追踪？
因为光栅化不能将全局效果处理的很好，比如

不过光栅化很快，但是质量很低
光线追踪效果好，但是很慢。光栅化一般用于实时应用，光追一般用于离线应用（电影之类的）
光线

光线沿直线传播
光线和光线之间不会发生碰撞，各传播各的
光线从光源中被发出来经过多次反射折射等，最后传入到eye中。也可以认为光路是可逆的，从eye发出感知光线可以原路返回到光源
光线追踪就是在模拟光线不断弹射的过程
将光线折射和反射出去所有地方用light进行计算一遍（算是否在shadow中），将所有点的着色的值加上

]]></description><category></category></item></channel></rss>