
Unity 学习
文章平均质量分 84
记录学习的点点滴滴~
具体内容参考唐老狮课程:Unity就业实战路线
蔗理苦
Hello, man
展开
-
2025-05-14 Unity 网络基础13——Protobuf
Protobuf(Protocol Buffers)是谷歌开发的开源协议生成工具,支持生成多种编程语言的代码文件,广泛应用于商业游戏开发中。本文介绍了如何在Unity中导入Protobuf及其编译器,并详细说明了Protobuf配置文件的编写规则。首先,通过官网下载Protobuf并解压,使用Visual Studio或Rider构建项目,将生成的DLL文件导入Unity。接着,下载并配置Protobuf编译器(protoc.exe)。在Unity中创建.proto文件,配置内容包括版本号、命名空间、消息类原创 2025-05-14 03:05:02 · 1115 阅读 · 0 评论 -
2025-05-13 Unity 网络基础12——大小端模式
大小端模式是计算机硬件存储数据的两种方式:大端模式将数据的高字节保存在内存的低地址中,而小端模式则相反。以0x11223344为例,大端模式存储为0x11 0x22 0x33 0x44,小端模式为0x44 0x33 0x22 0x11。小端模式更符合计算机处理逻辑,而大端模式更符合人类阅读习惯。实际应用中,操作系统通常采用小端模式,网络协议则使用大端模式。不同平台通信时可能出现字节序不匹配,需进行转换。C#等语言提供了判断和转换字节序的API,如BitConverter.IsLittleEndian和IPA原创 2025-05-13 11:48:49 · 316 阅读 · 0 评论 -
2025-05-11 Unity 网络基础11——UnityWebRequest
UnityWebRequest 是 Unity 提供的模块化系统类,用于处理 HTTP 请求和响应,替代了旧版的 WWW 类。它支持多种协议(如 HTTP、FTP、file),并允许上传文件到服务器。UnityWebRequest 将数据处理单独提取,用户可以根据需求选择合适的数据处理对象。常用操作包括获取文本、纹理、AB 包数据,以及发送 POST 和 PUT 请求。使用 UnityWebRequest 时,需配合协同程序,且默认不允许不安全的 HTTP 连接,但可通过项目设置启用。示例代码展示了如何下载原创 2025-05-11 12:25:25 · 1231 阅读 · 0 评论 -
2025-05-11 Unity 网络基础10——HTTP通信
HTTP(超文本传输协议)是互联网上应用最广泛的网络传输协议,最初用于传输HTML页面,现已支持多种文件类型。HTTP基于TCP通信,确保数据传输的可靠性。其工作原理包括以TCP方式工作、无状态和使用元信息作为标头。HTTP/1.1支持持久连接,允许在单个连接中发送多个请求。常见的HTTP请求方法有GET、POST、PUT、DELETE等,响应状态码则用于表示请求的处理结果,如200表示成功,404表示资源未找到。搭建HTTP服务器可使用HFS工具,通过配置端口和权限,实现文件的上传和下载。原创 2025-05-11 02:47:47 · 986 阅读 · 0 评论 -
2025-05-08 Unity 网络基础9——FTP通信
FTP(文件传输协议)是用于在互联网上传输文件的协议,支持文件拷贝、登录、目录查询等功能。其工作原理基于TCP通信,需建立控制连接和数据连接。FTP支持主动和被动两种传输模式,以及ASCII和二进制两种数据传输方式。在Windows 11环境下,可以通过控制面板启用FTP服务,并使用IIS管理器配置FTP站点,包括设置IP地址、身份验证方式和授权规则。此外,还需在防火墙中允许FTP应用通过。用户可以通过指定IP地址访问FTP服务器,并可选择匿名登录或使用用户名和密码验证。常用的FTP API包括Networ原创 2025-05-08 23:13:55 · 1117 阅读 · 0 评论 -
2025-05-07 Unity 网络基础8——UDP同步&异步通信
创建套接字 Socket。用Bind()方法将套接字与本地地址进行绑定。用和SendTo()方法在套接字上收发消息。用Shutdown()方法释放连接。关闭套接字。原创 2025-05-07 21:52:50 · 1740 阅读 · 0 评论 -
2025-05-07 Unity 网络基础7——TCP异步通信
往往异步方法当中都会使用多线程执行某部分逻辑,因为不需要等待方法中逻辑执行完毕就可以继续执行下面的逻辑。 Async 方法相比于 Begin / End 方法,参数相对少一些。 Unity 中协同程序中的某些异步方法,有的使用的是多线程,有的使用的是迭代器分步执行。 在回调函数中调用,用于完成异步连接操作并返回新的客户端 Socket。接口由包含可异步作的方法的类实现,是启动异步作的方法的返回类型。方法中逻辑可能还没有执行完毕,就继续执行后面的内容。方法中逻辑执行完毕后,再继续执行后面的方法。原创 2025-05-07 11:15:01 · 937 阅读 · 0 评论 -
2025-05-04 Unity 网络基础6——TCP心跳消息
在客户端主动退出时,我们会调用 socket 的ShutDown()和Close()方法,但调用这两个方法后,服务器端无法得知客户端已经主动断开。 本文主要介绍在网络通信中,如何服务端如何判断客户端断开连接。原创 2025-05-04 10:00:43 · 624 阅读 · 0 评论 -
2025-04-04 Unity 网络基础5——TCP分包与黏包
在ToBytes()方法中,先写入消息 Id,然后写入该消息的长度,最后写入消息内容。sizeof(int) + // 消息长度// 写入消息长度// 减去消息长度和消息 Id 的长度// 反序列化不需要解析 Id,在此之前应解析 Id 从而使用该方法PlayerId。原创 2025-04-04 19:30:51 · 1143 阅读 · 1 评论 -
2025-03-25 Unity 网络基础4——TCP同步通信
例如,选用 int 类型作为消息 ID 类型,前 4 个字节为消息 ID,后面的字节为数据类的内容。 一个 Sccket 对象表示一个本地或者远程套接字信息,可被视为一个数据通道,连接与客户端和服务端,数据的发送和接受均通过这个通道进行。主要用于实现 UDP 通信,提供无连接的通信服务,数据包长度不能大于 32KB,不提供正确性检查,不保证顺序,可能出现重发、丢失等情况。中,使用线程池处理接收到的消息,而不是立即处理,防止用户等待时间过长。 进入 Unity,点击运行,可看到通信结果。原创 2025-03-25 04:17:04 · 1225 阅读 · 0 评论 -
2025-03-21 Unity 网络基础3——TCP网络通信准备知识
在网络通信中,需要将传递的类对象信息序列化为 2 进制数据(商业游戏中,一般为 byte 字节数组),再将该 2 进制数据通过网络传输给远端设备,远端设备获取到该 2 进制数据后再将其反序列化为对应的类对象。 域名系统(Domain Name System,DNS)是互联网的一项服务,是将域名和 IP 地址相互映射的分布式数据库,能够更方便地访问互联网。 IPEndPoint 类将网络端点表示为 IP 地址和端口号,是 IP 地址和端口号的组合。序列化:将类对象信息转换为可保存或传输的格式的过程。原创 2025-03-21 15:11:34 · 1295 阅读 · 0 评论 -
2025-03-19 Unity 网络基础2——网络通信基础
TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇,只因为 TCP 协议和 IP 协议最具代表性,所以被称为 TCP/IP 协议。 B/S 是一种特殊的 C/S 模型,特殊之处是 B/S 的客户端不需要开发,一般是某种浏览器,比如IE、Chrome、QQ 浏览器、360 浏览器等。 超文本传输协议,是简单的请求—响应协议,通常运行在 TCP 协议之上,指定了客户端可能发送给服务端什么样的信息以及得到什么样的响应。原创 2025-03-19 10:52:11 · 916 阅读 · 0 评论 -
2025-03-17 Unity 网络基础1——网络基本概念
互联网又音译为因特网(Internet),也称国际网络,指网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议(规则)相连,形成逻辑上的单一巨大国际网络。 因特网是国际上最大的互联网。 万维网(World Wide Web,简称 WWW,也称 Web、3W 等)是存储在因特网的计算机中,数量巨大的文档(页面)的集合。 IP 地址(Internet Protocol Address)指互联网协议地址,又译为网际协议地址,是 IP 协议提供的一种统一的地址格式,即设备在网络中的具体地址。原创 2025-03-17 02:05:09 · 550 阅读 · 0 评论 -
2024-12-06 Unity Addressables3——资源加载
引用加载必须在脚本中声明各种引用类来指定加载的资源,不够灵活,只适合做一些小项目。 实际商业项目开发中,很多时候根据配置文件决定加载的资源,即动态加载。 通过给定名称和标签,来加载指定资源。游戏装备中有一顶帽子:Hat,拥有不同的品质,比如:红、绿、白、蓝。通过标签 Label 来区分,Label 分别是:Red、Green、White、Blue。游戏中根据设备好坏选择不同质量的图片或者模型,比如:高清、标清、超清。原创 2024-12-06 21:14:48 · 1562 阅读 · 0 评论 -
2024-11-13 Unity Addressables2——寻址资源设置
从 AB 包加载资源,使用现有 AB 包(需要构建 AB 包),一般在最终发布测试阶段使用。模拟组(后期),一般在测试阶段使用,分析布局和依赖项的内容,而不创建 AB 包。显示可寻址对象的精灵和子对象,一般想要看到图集资源内内容时可以勾选该选项。直接使用文件夹中的资源(最快的),不必打包可寻址内容,一般在开发阶段使用。在使用此选项之前,必须使用生成脚本(如默认生成脚本)打包资源。简化可寻址资源名,会删除名称中的路径和拓展,简化缩短名称。简化可寻址名称,会删除名称中的路径和拓展,简化缩短名称。原创 2024-11-13 11:09:18 · 742 阅读 · 0 评论 -
2024-11-13 Unity Addressables1——概述与导入
Addressables 是可寻址资源管理系统。 Unity 从 2018.2 版本开始,建议用于替代 AssetBundle 的高阶资源管理系统。在 Unity 之后的新版本中,AssetBundle 将渐渐被淘汰。 但目前市面上还有很多的项目依旧在使用较老版本的 Unity 进行开发或者迭代,所以 AssetBundle 还是一种主流传统的资源管理方式。原创 2024-11-13 10:23:57 · 439 阅读 · 0 评论 -
2024-06-11 Unity Shader 开发入门5 —— CG 语法
Unity Shader 中的 CG 语言提供了各种用于图形编程的函数,这些函数是 CG 为封装好的逻辑,可以使用它们来编写 Unity Shader。UNITY_MATRIX_MV 的逆转置矩阵,用于将法线从模型空间变换到观察空间,也可用于得到 UNITY_MATRIX_MV 的逆矩阵。 应用阶段传递模型数据给顶点着色器时 Unity 支持的语义,一般在顶点着色器回调函数的传入参数中应用。 从顶点着色器传递数据给片元着色器时 Unity 支持的语义, 一般在顶点着色器回调函数的返回值中应用。原创 2024-06-11 21:47:51 · 1510 阅读 · 0 评论 -
2024-06-10 Unity 编辑器开发之编辑器拓展10 —— 其他常见工具类
例如,编辑器事件监听(播放、暂停等)、生命周期判断(是否运行中、暂停中、编译中)、编辑器进入播放模式、退出播放模式等等。 AssetDatabase 是 Unity 引擎中的一个编辑器类,用于在编辑器环境中管理和操作项目中的资源(Assets)。 在编辑器相关处都可以使用 AssetDatabase,但它属于编辑器功能,无法被打包出去,只能在 Unity 编辑器中使用。 AssetImporter(资源导入器)是特定资源类型的资源导入程序的基类,用于配置和管理资源的导入设置。原创 2024-06-10 13:12:16 · 1222 阅读 · 0 评论 -
2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
创建脚本 “Lesson38Window.cs” 脚本,并将其放在 Editor 文件夹下。 通常用于在编辑器中选择文件夹作为保存路径,用于保存文件或执行其他与文件夹相关的操作。 通常用于在编辑器中选择文件夹进行打开或执行其他与文件夹相关的操作。 通常用于在编辑器中选择文件进行打开或执行其他与文件相关的操作。 将纹理显式压缩为指定的格式,之后会配合资源导入相关内容使用。 通常用于在编辑器中保存新创建的文件或选择文件的保存路径。 进度条窗口不会卡逻辑,但是需要配合关闭进度条使用。原创 2024-06-08 19:38:08 · 1328 阅读 · 0 评论 -
2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展
通过添加监听事件,使自定义窗口能够监听 Scene 窗口的变化。[MenuItem"Unity 编辑器拓展/Lesson26/打开 Scene 拓展窗口"[ MenuItem("Unity 编辑器拓展/Lesson26/打开 Scene 拓展窗口") ] public static void OpenLesson26() {} }();win.Show();原创 2024-06-07 19:00:34 · 1247 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展7 —— Inspector 窗口拓展
单独为某一个脚本实现一个自定义脚本,并且脚本需要继承 Editor。一般该脚本命名为:自定义脚本名 + Editor。在该脚本前加上特性。命名空间:UnityEditor特性名:CustomEditor(想要自定义脚本类名的 Type)// 通过该特性,可以为 Lesson22 脚本自定义 Inspector 窗口中的显示typeofLesson22...声明对应 SerializedProperty 序列化属性对象,主要通过它和自定义脚本中的成员进行关联。原创 2024-02-25 18:02:30 · 2152 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展6 —— Event
Event 提供许多属性和方法,允许检查和处理用户输入,主要用于 Unity 编辑器拓展开发。 Input 相关内容需要在运行时才能监听输入,而 Event 专门提供给编辑模式下使用,可以帮助检测鼠标键盘输入等事件相关操作,在 OnGUI 和 OnSceneView 中都能使用。原创 2024-02-25 14:29:07 · 1064 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展5 —— Selection
Selection 主要用来获取当前 Unity 编辑器中选择的对象,只能用于编辑器开发中。原创 2024-02-25 14:13:19 · 550 阅读 · 0 评论 -
2024-02-13 Unity 编辑器开发之编辑器拓展4 —— EditorGUIUtility
Utility 意思为“实用”,EditorGUIUtility 是 EditorGUI 中的一个实用工具类,提供 EditorGUI 相关的其他辅助 API,下面仅介绍其中相对常用的内容。 官方文档:https://docs.unity3d.com/ScriptReference/EditorGUIUtility.html。原创 2024-02-13 13:16:24 · 2279 阅读 · 0 评论 -
2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI
EditorGUI 类似 GUI,是用于绘制编辑器拓展 UI 的工具类,提供 GUI 中没有的 API(主要是编辑器功能中会用到的一些特殊控件)。 EditorGUILayout 类似于 GUILayout,是带有自动布局功能的 EditorGUI 绘制工具类。通常,会将 EditorGUI 和 GUI 混合使用来制作编辑器拓展功能。但由于用到自动布局功能,因此接下来着重介绍 EditorGUILayout 中的功能。EditorGUI 和它的区别仅仅是需要自己设置位置而已。原创 2024-02-12 14:58:57 · 3271 阅读 · 0 评论 -
2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口
当想为 Unity 拓展一个自定义窗口时,只需实现继承 EditorWindow 的类即可,并在该类的 OnGUI 函数中编写面板控件相关的逻辑。当窗口被销毁时调用,通常在关闭编辑器或切换场景时触发。在该方法中可以执行与所选对象相关的操作,以确保编辑器窗口的内容与当前选择保持同步。可以在这个方法中执行需要在检视器面板刷新时进行的逻辑,比如更新显示的信息。通常在这里执行需要在每帧进行的逻辑。通常在该方法中执行在窗口失去焦点时需要进行的清理工作。在该方法中可以执行在窗口获得焦点时需要进行的操作。原创 2024-02-11 14:58:24 · 2166 阅读 · 0 评论 -
2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏
命名空间:UnityEditor特性:MenuItem用法:在静态函数前加上[MenuItem("页签/一级选项/二级选项/....")]作用:当在菜单栏点击该页签时,将执行静态函数中逻辑。注意:不用在意继承对象。斜杠必须是。[MenuItem"Unity编辑器拓展/Lesson1/TestFun"命名空间:UnityEditor特性:MenuItem用法:在静态函数前加上,并且页签命名放入 GameObject 路径。原创 2024-02-08 23:10:34 · 2255 阅读 · 0 评论 -
2024-02-01 Unity Shader 开发入门4 —— ShaderLab 语法
ShaderLab 是 Unity 自定义的语法规则,是专门用于在 Untiy 中编写和管理着色器的语言。 它提供一种结构化的方式来描述 Unity 着色器的各个部分,从而更轻松地创建和管理着色器。 Unity 通过 ShaderLab 语言对 Shader 进行包装和组织。原创 2024-02-01 03:19:01 · 2654 阅读 · 0 评论 -
2024-01-12 Unity Shader 开发入门3 —— 坐标空间变换
在渲染管线中,需要将坐标数据在这些空间中进行变换计算。 在设计模型时,使用模型空间。模型导入 Unity 后,最终显示在屏幕上,依次经历了如下空间的坐标变换: 模型空间->世界空间->观察空间->裁剪空间->屏幕空间。原创 2024-01-12 20:37:55 · 1759 阅读 · 0 评论 -
2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍
但是必须知道的是,游戏引擎的一部分本质就是对图形程序接口的封装,游戏引擎通过图形程序接口帮助完成了图像渲染相关的工作,我们只需要把工作重心放在游戏逻辑开发上。它有一套最新的图形加速 API 接口,目标是提供更灵活和丰富的底层操作接口,以替代 OpenGL 和 OpenGL ES 接口,可以把 Vulkan 看做是 OpenGL 的升级版。 Shader 的中文意思是着色器,是一种用于描述如何渲染图形和计算图形外观的程序,主要用于控制图形的颜色、光照、纹理和其他视觉效果。原创 2023-08-22 13:49:00 · 794 阅读 · 0 评论 -
2023-08-21 Unity Shader 开发入门1 —— 渲染管线
Unity 中的渲染管线和图形学中的渲染管线基本上指的是相同的概念,但是具体实现和细节方面可能存在一些差异。 Unity 的渲染管线建立在图形学的基础上,但具有自己的实现和拓展。其提供了一个高度可配置和可拓展的框架,允许开发者根据需求自定义渲染流程。渲染管线是计算机图形学中用于将三维场景转换为最终屏幕所见图像的过程;由一系列的阶段和操作组成,每个阶段都负责执行特定的任务;逐步处理输入的集合数据和纹理信息,最终生成可视化图像的过程。渲染管线(流水线)就是将数据分阶段的变为屏幕图像的过程!原创 2023-08-21 19:54:51 · 648 阅读 · 0 评论 -
2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间
也就是说因为早期用 32 位来表示时间,最大的时间间隔是 68 年,而最早出现的 UNIX 操作系统考虑到计算机产生的年代和应用的时限,综合取了 1970 年 1 月 1 日作为 UNIX TIME 的纪元时间(开始时间)。 计算机时间和众多的编程语言的时间都是从 1970 年 1 月 1 日开始算起,是因为很多编程语言起源于 UNIX 系统,而 UNIX 系统认为 1970 年 1 月 1 日 0 点是时间纪元。从 1970 年 1 月 1 日(UNIX 时间戳的起点时间)到现在的时间。原创 2023-08-17 23:17:21 · 542 阅读 · 0 评论 -
2023-08-17 Untiy进阶 C#知识补充7——C#8主要功能与语法
作用:让本地函数不能够使用访问封闭范围内(也就是上层方法中)的任何变量,让本地函数只能处理逻辑,避免让它通过直接改变上层变量来处理逻辑造成逻辑混乱。 Using 声明是对 using 语法的简写,当函数执行完毕时会调用对象的 Dispose 方法来释放对象。 注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 我们可以在自定义类当中声明解构函数,这样我们可以将该自定义类对象利用元组的写法对其进行变量的获取。原创 2023-08-17 01:16:11 · 907 阅读 · 0 评论 -
2023-08-15 Untiy进阶 C#知识补充6——C#7主要功能与语法
注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 使用 ref 修饰临时变量和函数返回值,可以让赋值变为引用传递,即 C++ 中的 & 引用类型。 用于将输入值放入与输入值相同类型的新变量中,相当于是将变量装入一个和自己类型一样的变量中。 主要作用:提升开发效率,更方便的处理多返回值等需要用到多个值时的需求。 判断某一个变量是否是某一个类型,如果满足会将该变量存入你申明的变量中。 在 C# 7 中,可以在更多的表达式中进行错误抛出。原创 2023-08-16 00:14:14 · 477 阅读 · 0 评论 -
2023-08-15 Untiy进阶 C#知识补充5——C#6主要功能与语法
>运算符(C# 进阶内容)Null 传播器(C# 进阶内容)字符串内插(C# 进阶内容)静态导入异常筛选器nameof 运算符。原创 2023-08-15 23:12:28 · 458 阅读 · 0 评论 -
2023-08-04 Untiy进阶 C#知识补充4——C#5主要功能与语法
C# 5调用方信息特性(C# 进阶内容)异步方法 async 和 await。原创 2023-08-04 18:01:12 · 784 阅读 · 0 评论 -
2023-06-19 Untiy进阶 C#知识补充3——C#1-4主要功能与语法
C# 1(C# 进阶内容)委托事件C# 2(C# 进阶内容)泛型匿名方法迭代器可空类型C# 3隐式类型(C# 进阶内容)对象集合初始化(C# 进阶内容)Lambda 表达式(C# 进阶内容)匿名类型(C# 进阶内容)自动实现属性(C# 核心内容)拓展方法(C# 核心内容)分部类(C# 核心内容)C# 4泛型的协变和逆变(C# 进阶内容)命名和可选参数动态类型 dynamic。原创 2023-06-19 16:09:36 · 1668 阅读 · 0 评论 -
2023-06-19 Untiy进阶 C#知识补充2——C#版本与Unity的关系
新版本的脚本运行时将为 Unity 带来了大量的新版 C# 功能和 .NET 的功能,也就意味着它可以支持更高版本的 C#。 之所以不同 Unity 版本支持的 C# 版本不同,主要是不同 Unity 版本使用的 C# 编译器和脚本运行时版本不同。 比如:Unity 2020.3 使用的脚本运行时版本等效于 .Net 4.6,编译器为 Roslyn(罗斯林编译器)。 我们可以根据不同 Unity 支持的对应 C# 版本,来判断我们是否可以使用 C# 各版本中的一些新功能用来编程。原创 2023-06-19 13:55:41 · 3883 阅读 · 0 评论 -
2023-06-10 Untiy进阶 C#知识补充1——.Net介绍
微软的 .Net 既不是编程语言也不是框架,是类似于互联网时代、次时代、21世纪、信息时代之类的宣传口号 它是一整套技术体系的统称,或者说它是微软提供的技术平台的代号。包含的内容有:.Net CoreMono 等等C#(C# 是 .Net 平台主推的开发语言)VBF# 等等Visual Studio Code 等等 可以简单理解 .Net 本质上就是微软为自己的一系列产品取的一个代号跨语言。原创 2023-06-10 18:26:16 · 1294 阅读 · 0 评论 -
2023-06-08 Unity AssetBundle2——AB包资源管理器AssetBundleMgr
【代码】2023-06-08 Unity AssetBundle2——AB包资源管理器AssetBundleMgr。原创 2023-06-08 20:14:46 · 351 阅读 · 0 评论