自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 《Unity3D网络游戏实战》第七章:通用服务端架构

服务端程序的两大核心是和。图7-2展示的是最基础的单进程服务端结构,客户端与服务端通过TCP连接,使两者可以传递数据;服务端还连接着MySQL数据库,可将玩家数据保存到数据库中。

2024-02-03 10:41:03 1408

原创 《Unity3D网络游戏实战》第六章:通用客户端网络模块

网络模块的核心是静态类NetManager,它对外提供了Connect、AddListener、Send等多个方法,它提供如下方法。

2024-01-22 15:46:50 1014

原创 《Unity3D网络游戏实战》 TCP数据流、BytArray类

当收到对端数据时,操作系统会将数据存入到Socket的接收缓冲区中。操作系统层面上的缓冲区完全由操作系统操作,程序并不能直接操作它们,只能通过socket.Receive、socket.Send等方法来间接操作。Socket的Receive方法只是把接收缓冲区的数据提取出来,比如调用Receive(readBuff,0,2),接收2个字节的数据到readbuff(byte数组)。当系统的接收缓冲区为空,Receive方法会被阻塞,直到里面有数据。

2024-01-21 14:36:59 1183

原创 《Unity3D网络游戏实战》第三章 大乱斗代码解析

!代码与书中相比有少许更改,解决了一些可能出现的问题。

2023-12-13 09:06:00 871 2

原创 Unity热更新之AssetBundle

在Window菜单栏下的PackageManager里面搜AssetBundle,如下图:有些版本在PackageManager里面找不到这个,可以找到项目的Package文件夹,打开manifest.json文件,添加一行信息即可,然后打开unity即可。

2023-11-12 17:21:35 507 1

原创 Lua面向对象的实现

【代码】Lua面向对象的实现。

2023-11-09 15:58:57 146 1

原创 C++多态性

多态是指同样的消息被不同类型的对象接收时导致不同的行为,所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。多态是指一段程序能够处理多种类型对象的能力。

2023-09-11 09:50:22 139

原创 C++类的继承

class 派生类名:继承方式 基类名1,继承方式 基类名2,...,派生类成员说明;//eg:public:......一个派生类,可以同时有多个基类,这种情况称为多继承。一个派生类只有一个直接基类的情况,称为单继承。直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层的基类称为间接基类。继承方式规定了如何访问从基类继承的成员。(不给出继承方式,默认是私有的)派生类成员是指除了从基类继承来的所有成员外,新增加的数据和函数成员。

2023-09-06 23:53:11 139 1

原创 C++数组、指针与字符串

当局部作用域中声明了于类成员同名的标识符时,对该标识符的直接引用代表的是局部作用域中所声明的标识符,这是为了访问该类成员,就可以通过this指针。如果函数体中不需要通过指针改变指针所指向对象的内容,应在参数表中将其声明为指向常量的指针,这样使得常对象被取地址后也可作为该函数的参数。this指针是一个隐含于每一个类的非静态成员函数中的特殊指针(包括构造函数和析构函数),它用于指向正在被成员函数操作的对象。一般来说指针的算术运算是和数组的使用相联系的,因为只有在使用数组时,才会得到连续分布的可操作内存空间。

2023-09-04 17:10:08 300 1

原创 Unity Shader入门精要 第十二章——屏幕后处理效果

卷积操作指定是使用一个卷积核(kernel)对一张图像中的每个像素进行一系列的操作。卷积核通常是一个四方形网格结构,该方格每个区域都有一个权重值。对图像中的某个像素进行卷积时,我们会把卷积核的中心位置放置于该像素上(如下图),翻转核之后依次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的就是该位置的新像素值。不同的卷积和就可以得到不同的效果计算核中每个元素和其覆盖的图像像素值的乘积并求和。

2023-09-03 10:57:41 715

原创 C++ 数据的共享与保护

如:#define PI 3.14 定义了一个符合常量PI的值为3.14。(注意不要加分号!)虽然可以这样定义符合常量,更好的方法还是使用const。#define 还可以定义带参数宏,已被内联函数取代。#undef的作用是删除由#define定义的宏,使之不再起作用。

2023-09-02 20:31:06 219

原创 C++ 类与对象

class 类名称public:公有成员(外部接口)private:私有成员protected:保护型成员。

2023-09-01 11:35:24 95 1

原创 C++ 函数

类型说明符 函数名(含类型说明的形式参数表){语句序列类型说明符规定了函数的返回给主调函数的返回值类型。如果不返回任何值给主调函数,这时可以使用void。return 表达式;//有返回值时一定含有return语句return;//没有返回值可以这样写,也可以不写函数下形参表可以为空,表示没有任何形参。如main()函数就可以没有形参。main也可以有形参,这时比较特殊,main函数的形参也叫命令行参数,由操作系统在启动程序时初始化。意指:当编译器发现某段代码在调用一个内联函数。

2023-08-30 10:57:35 288 1

原创 数组、结构体、基本数据类型所占的空间大小

sizeof()运算符用来求对象所占内存空间的大小。下面是一些常见数据类型所占的空间大小char。

2023-08-28 22:54:54 3290

原创 Unity Shader入门精要 第十一章——纹理动画、顶点动画

动画效果往往都是把时间添加到一些变量的计算中,随着时间变换画面也可以随之变换。

2023-08-15 14:00:48 864 1

原创 Unity Shader入门精要 第十章(下)——渲染纹理、程序纹理

摄像机的渲染结果会输出到颜色缓冲,并显示到我们的屏幕上。现代的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即这个技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理,而不用为每个渲染目标纹理单独渲染完整场景。【某度:允许程序同时渲染到多个颜色缓冲,向不同的颜色缓冲中送入渲染结果的不同方面(如不同RGBA 色彩通道的值、深度值等)。】延迟渲染就使用了多重渲染目标。Unity为了渲染目标纹理定义了一种专门的纹理类型——。下面会依次学习这两种方法。

2023-08-10 11:32:13 975 2

原创 Unity Shader入门精要 第十章(上)——立方体纹理

立方体纹理(Cubemap)是环境映射(Environment Mappi)的一种方式。环境映射可以模拟物体周围的环境,像是镀了层金属一样反射周围的环境。立方体纹理包含六张图像,对应正方体六个面。对立方体纹理的采样需要一个三维的纹理坐标,表示在世界空间下的一个3D方向矢量。如下图,这个方向矢量从立方体中心开始向外部延伸会与立方体的六个纹理之一发生相交,采样得到的结果就是由这个焦点计算出来的。立方体纹理的好处在于,实现简单快速,效果也比较好。

2023-08-08 11:40:24 350

原创 Unity Shader入门精要 第九章——Unity的光照衰减、Unity的阴影、标准UnityShader

实际上,光照衰减和阴影对物体最终渲染的结果本质是相同的——都是把光照衰减因子和阴影值和与光照结果相乘得到的最终的渲染结果,对应的代码中的这一行(如下图)。9.2中我们有使用下面的这样的两行代码来计算光照衰减。我们在上面的效果图中可以看到,右边平面的阴影并没有投射在正方体上,但是可以投射在下面的平面平面上,这是因为平面使用了内置的Standard Shader。传统的阴影映射纹理的实现:得到阴影映射纹理后,在其他的Pass中就可以使用这个阴影映射纹理,使用xy分量对阴影映射纹理采样,得到对应位置的深度信息。

2023-08-05 10:50:39 508 2

原创 Unity Shader入门精要 第九章——Unity的渲染路径、Unity的光源类型

如果一个物体在多个逐像素光源的影响区域,那么这个物体就要执行多个Pass,每个Pass计算一个逐像素光源的光照结果,最后在帧缓存中八这些结果混合得到最终的颜色。在前向渲染中,Unity会对光源根据光源的设置、对物体的影响程度等,对光源进行一个重要度的排序。其中一定数目的光源会按逐像素的方式处理,然后最多有四个光源按逐顶点的方式处理,剩下的光源按SH方式处理。而且延迟渲染路径的每个光源都可以按逐像素的方式处理。光源类型指的是该光源是平行光还是其他类型的光源,光源的渲染模式指的是该光源是否是。

2023-08-02 10:32:06 516 1

原创 Unity Shader入门精要 第八章——透明效果

透明度测试:只要有一个片元的透明度不满足条件(通常是小于某个阈值),那么其对应的片元将会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响,否则就会按照普通的不透明物体的处理方式来处理它。根据描述,我们发现透明度测试是不需要关闭深度写入,但产生的效果也很极端,要么完全透明,要么完全不透明。我们一般使用clip函数来进行透明度测试。clip是CG当中的一个函数:void clip(float4 x),里面的参数还可以是float3、float2、float2、float1、float。

2023-07-30 17:00:38 2910 1

原创 Unity Shader入门精要 第七章——基础纹理

纹理的最初目的,就是使用一张图片来控制模型的外观,相当于贴图,把一张图贴在一个模型上,可以逐(纹素类似于像素)地控制模型的颜色,这种技术叫在建模软件中会利用纹理展开技术把存储在每个顶点上。纹理映射坐标定义了该顶点在纹理图片中对应的2D坐标(也就是每个顶点对应图片中的位置)。这个坐标用一个二位变量(u,v)表示,u是横坐标,v是纵坐标,所有纹理映射坐标也成为UV坐标。纹理图片的大小可以是多种多样的,如256*256或者1024*1024,但转换为UV坐标时,通常都会被归一化到[0,1]范围内(如下图)。

2023-07-27 16:01:36 1695 1

原创 Unity Shader入门精要 第六章——Unity中的基础光照

逐像素光照,以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后进行光照模型计算,这种在面片之间对顶点法线进行插值的技术称为Phong着色,也被称为Phong插值或法线插值技术,这不同于Phong光照模型。上面两个模型(也叫兰伯特光照模型)有个问题就是,光照没有照射到的地方是全黑的,没有明暗变化,导致背面就像是有个平面一样。与原来的兰伯特光照模型相比,半兰伯特光照模型没有使用max操作来防止n*I的点积为负值,而是进行了一个α倍的缩放和β大小的偏移。

2023-07-21 15:18:06 2379 1

原创 Unity Shader入门精要 第五章——shader代码基本结构、一个简单的顶点/片元着色器

Pass语句也可以进行状态设置,在SubShader里面的状态设置会影响所有的Pass语句,在Pass语句里面的状态设置只会影响该Pass语句。比如我做了一个效果,但是不知道用什么颜色比较好,我就可以在里面声明一个Color类型的属性,这样我在Unity的材质面板就可以随时更改,而不用跑到shader里面来更改。不同的显卡配置、能力不一样,有些显卡可能不支持一些SubShader的内容,如果所有的SubShader都不支持的话,Unity就会使用Fallback语义指定的Unity Shader。

2023-07-16 12:43:51 443 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除