Unity 学习
文章平均质量分 83
记录学习的点点滴滴~
具体内容参考唐老狮课程:Unity就业实战路线
蔗理苦
Hello, man
展开
-
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 · 1195 阅读 · 0 评论 -
2024-06-10 Unity 编辑器开发之编辑器拓展10 —— 其他常见工具类
例如,编辑器事件监听(播放、暂停等)、生命周期判断(是否运行中、暂停中、编译中)、编辑器进入播放模式、退出播放模式等等。 AssetDatabase 是 Unity 引擎中的一个编辑器类,用于在编辑器环境中管理和操作项目中的资源(Assets)。 在编辑器相关处都可以使用 AssetDatabase,但它属于编辑器功能,无法被打包出去,只能在 Unity 编辑器中使用。 AssetImporter(资源导入器)是特定资源类型的资源导入程序的基类,用于配置和管理资源的导入设置。原创 2024-06-10 13:12:16 · 1096 阅读 · 0 评论 -
2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
创建脚本 “Lesson38Window.cs” 脚本,并将其放在 Editor 文件夹下。 通常用于在编辑器中选择文件夹作为保存路径,用于保存文件或执行其他与文件夹相关的操作。 通常用于在编辑器中选择文件夹进行打开或执行其他与文件夹相关的操作。 通常用于在编辑器中选择文件进行打开或执行其他与文件相关的操作。 将纹理显式压缩为指定的格式,之后会配合资源导入相关内容使用。 通常用于在编辑器中保存新创建的文件或选择文件的保存路径。 进度条窗口不会卡逻辑,但是需要配合关闭进度条使用。原创 2024-06-08 19:38:08 · 1177 阅读 · 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 · 1094 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展7 —— Inspector 窗口拓展
单独为某一个脚本实现一个自定义脚本,并且脚本需要继承 Editor。一般该脚本命名为:自定义脚本名 + Editor。在该脚本前加上特性。命名空间:UnityEditor特性名:CustomEditor(想要自定义脚本类名的 Type)// 通过该特性,可以为 Lesson22 脚本自定义 Inspector 窗口中的显示typeofLesson22...声明对应 SerializedProperty 序列化属性对象,主要通过它和自定义脚本中的成员进行关联。原创 2024-02-25 18:02:30 · 1755 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展6 —— Event
Event 提供许多属性和方法,允许检查和处理用户输入,主要用于 Unity 编辑器拓展开发。 Input 相关内容需要在运行时才能监听输入,而 Event 专门提供给编辑模式下使用,可以帮助检测鼠标键盘输入等事件相关操作,在 OnGUI 和 OnSceneView 中都能使用。原创 2024-02-25 14:29:07 · 907 阅读 · 0 评论 -
2024-02-25 Unity 编辑器开发之编辑器拓展5 —— Selection
Selection 主要用来获取当前 Unity 编辑器中选择的对象,只能用于编辑器开发中。原创 2024-02-25 14:13:19 · 477 阅读 · 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 · 1979 阅读 · 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 · 2724 阅读 · 0 评论 -
2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口
当想为 Unity 拓展一个自定义窗口时,只需实现继承 EditorWindow 的类即可,并在该类的 OnGUI 函数中编写面板控件相关的逻辑。当窗口被销毁时调用,通常在关闭编辑器或切换场景时触发。在该方法中可以执行与所选对象相关的操作,以确保编辑器窗口的内容与当前选择保持同步。可以在这个方法中执行需要在检视器面板刷新时进行的逻辑,比如更新显示的信息。通常在这里执行需要在每帧进行的逻辑。通常在该方法中执行在窗口失去焦点时需要进行的清理工作。在该方法中可以执行在窗口获得焦点时需要进行的操作。原创 2024-02-11 14:58:24 · 2013 阅读 · 0 评论 -
2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏
命名空间:UnityEditor特性:MenuItem用法:在静态函数前加上[MenuItem("页签/一级选项/二级选项/....")]作用:当在菜单栏点击该页签时,将执行静态函数中逻辑。注意:不用在意继承对象。斜杠必须是。[MenuItem"Unity编辑器拓展/Lesson1/TestFun"命名空间:UnityEditor特性:MenuItem用法:在静态函数前加上,并且页签命名放入 GameObject 路径。原创 2024-02-08 23:10:34 · 2061 阅读 · 0 评论 -
2024-02-01 Unity Shader 开发入门4 —— ShaderLab 语法
ShaderLab 是 Unity 自定义的语法规则,是专门用于在 Untiy 中编写和管理着色器的语言。 它提供一种结构化的方式来描述 Unity 着色器的各个部分,从而更轻松地创建和管理着色器。 Unity 通过 ShaderLab 语言对 Shader 进行包装和组织。原创 2024-02-01 03:19:01 · 1749 阅读 · 0 评论 -
2024-01-12 Unity Shader 开发入门3 —— 坐标空间变换
在渲染管线中,需要将坐标数据在这些空间中进行变换计算。 在设计模型时,使用模型空间。模型导入 Unity 后,最终显示在屏幕上,依次经历了如下空间的坐标变换: 模型空间->世界空间->观察空间->裁剪空间->屏幕空间。原创 2024-01-12 20:37:55 · 1536 阅读 · 0 评论 -
2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍
但是必须知道的是,游戏引擎的一部分本质就是对图形程序接口的封装,游戏引擎通过图形程序接口帮助完成了图像渲染相关的工作,我们只需要把工作重心放在游戏逻辑开发上。它有一套最新的图形加速 API 接口,目标是提供更灵活和丰富的底层操作接口,以替代 OpenGL 和 OpenGL ES 接口,可以把 Vulkan 看做是 OpenGL 的升级版。 Shader 的中文意思是着色器,是一种用于描述如何渲染图形和计算图形外观的程序,主要用于控制图形的颜色、光照、纹理和其他视觉效果。原创 2023-08-22 13:49:00 · 678 阅读 · 0 评论 -
2023-08-21 Unity Shader 开发入门1 —— 渲染管线
Unity 中的渲染管线和图形学中的渲染管线基本上指的是相同的概念,但是具体实现和细节方面可能存在一些差异。 Unity 的渲染管线建立在图形学的基础上,但具有自己的实现和拓展。其提供了一个高度可配置和可拓展的框架,允许开发者根据需求自定义渲染流程。渲染管线是计算机图形学中用于将三维场景转换为最终屏幕所见图像的过程;由一系列的阶段和操作组成,每个阶段都负责执行特定的任务;逐步处理输入的集合数据和纹理信息,最终生成可视化图像的过程。渲染管线(流水线)就是将数据分阶段的变为屏幕图像的过程!原创 2023-08-21 19:54:51 · 509 阅读 · 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 · 492 阅读 · 0 评论 -
2023-08-17 Untiy进阶 C#知识补充7——C#8主要功能与语法
作用:让本地函数不能够使用访问封闭范围内(也就是上层方法中)的任何变量,让本地函数只能处理逻辑,避免让它通过直接改变上层变量来处理逻辑造成逻辑混乱。 Using 声明是对 using 语法的简写,当函数执行完毕时会调用对象的 Dispose 方法来释放对象。 注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 我们可以在自定义类当中声明解构函数,这样我们可以将该自定义类对象利用元组的写法对其进行变量的获取。原创 2023-08-17 01:16:11 · 860 阅读 · 0 评论 -
2023-08-15 Untiy进阶 C#知识补充6——C#7主要功能与语法
注意:在此仅提及 Unity 开发中会用到的一些功能和特性,对于不适合在 Unity 中使用的内容会忽略。 使用 ref 修饰临时变量和函数返回值,可以让赋值变为引用传递,即 C++ 中的 & 引用类型。 用于将输入值放入与输入值相同类型的新变量中,相当于是将变量装入一个和自己类型一样的变量中。 主要作用:提升开发效率,更方便的处理多返回值等需要用到多个值时的需求。 判断某一个变量是否是某一个类型,如果满足会将该变量存入你申明的变量中。 在 C# 7 中,可以在更多的表达式中进行错误抛出。原创 2023-08-16 00:14:14 · 427 阅读 · 0 评论 -
2023-08-15 Untiy进阶 C#知识补充5——C#6主要功能与语法
>运算符(C# 进阶内容)Null 传播器(C# 进阶内容)字符串内插(C# 进阶内容)静态导入异常筛选器nameof 运算符。原创 2023-08-15 23:12:28 · 416 阅读 · 0 评论 -
2023-08-04 Untiy进阶 C#知识补充4——C#5主要功能与语法
C# 5调用方信息特性(C# 进阶内容)异步方法 async 和 await。原创 2023-08-04 18:01:12 · 733 阅读 · 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 · 1622 阅读 · 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 · 3580 阅读 · 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 · 1241 阅读 · 0 评论 -
2023-06-08 Unity AssetBundle2——AB包资源管理器AssetBundleMgr
【代码】2023-06-08 Unity AssetBundle2——AB包资源管理器AssetBundleMgr。原创 2023-06-08 20:14:46 · 300 阅读 · 0 评论 -
2023-06-08 Unity AssetBundle1——AB包介绍与使用
AB 包是特定于平台的资源压缩包,类似于压缩文件。其中资源可包括:模型、贴图、预设体、音效、材质球等等。 相较于 Resources 文件夹下的资源文件,AB 包能够更好管理资源:Resources 文件夹:打包时资源固定,只读,无法修改。AB 包:存储位置可自定义,压缩方式可自定义,后期可动态更新。 用途:减小包体大小压缩资源减少初始包的大小热更新资源热更新脚本热更新fill:#333;color:#333;color:#333;fill:none;原创 2023-06-08 20:15:21 · 4884 阅读 · 0 评论 -
2023-06-04 Unity ScriptableObject2——ScriptableObject 的应用
这样之后创建了多个子弹,它们的数据都是一样,更改 info 数据文件,所有子弹的数据都将被修改。 某些行为的变化是因为数据的不同带来的,我们可以利用面向对象的特性和原则,以及设计模式相关知识点,结合 ScriptableObject 做出更加方便的功能。 由于相同子弹的 speed 和 atk 一样,因此创建多个子弹时,相同数据的 speed 和 atk 占据了多余的内存。 对于只用不变并且要复用的数据,比如配置文件中的数据,往往需要在很多地方获取它们。步骤二:创建物品预制体,关联数据文件。原创 2023-06-04 17:04:49 · 770 阅读 · 0 评论 -
2023-06-04 Unity ScriptableObject1——ScriptableObject数据文件
对于 ScriptableObject 的数据,由于它在游戏发布运行过程中无法被持久化,可以利用 PlayerPrefs、XML、Json、2进制等等方式,让其可以达到被真正持久化的目的。 ScriptableObject 是 Unity 提供的一个数据配置存储基类,可以用来保存大量数据的数据模板,类似于可以自定义的数据资源文件模板。 它的使用方式,和 Unity 中其它资源规则是一样的,比如:预设体、音频文件、视频文件、动画控制器文件、材质球等等。原创 2023-06-04 15:46:19 · 1237 阅读 · 0 评论 -
2023-05-29 Unity 2进制5——Excel配置表工具
规则二:菜单栏按钮必须有至少一个斜杠,不然会报错,不支持只有一个菜单栏入口。通过 Unity 提供的 MenuItem 特性在菜单栏添加选项按钮。用于将 Excel 配置表内容生成对应的。规则三:这个特性可以用在任意的类当中。存储对象数据为 2 进制文件并读取。刷新 Project 窗口内容。添加 Unity 菜单栏按钮。规则一:一定是静态方法。Editor 文件夹。原创 2023-05-29 17:39:58 · 1783 阅读 · 3 评论 -
2023-05-27 Unity 2进制4——类对象的序列化与反序列化
C# 提供的类对象 2 进制序列化主要类是 BinaryFormatter。 如果要使用 C# 自带的序列化 2 进制方法,申明类时需要添加。 通过其中的序列化方法即可进行序列化生成字节数组。主要方法:反序列化方法 Deserialize。 主要用于得到字节数组 可以用于网络传输。主要方法:序列化方法 Serialize。类名:BinaryFormatter。类名:MemoryStream。 主要用于存储到文件中。将指定的流反序列化为对象图。将对象序列化为给定流。原创 2023-05-27 00:16:19 · 881 阅读 · 0 评论 -
2022-10-26 Unity 2进制3——文件夹操作
DirectoryInfo 和 FileInfo 一般在多文件夹和多文件操作时会用到,了解即可,目前用的相对较少。他们的用法和 Directory 和 File 类的用法大同小异。 Directory 提供给我们了常用的文件夹相关操作的 API,只需要熟练使用它即可。 平时我们可以在操作系统的文件管理系统中,通过一些操作增删查改文件夹。 我们目前要学习的就是通过代码的形式,来对文件夹进行增删查改的操作。原创 2022-10-26 01:39:39 · 747 阅读 · 0 评论 -
2022-10-26 Unity 2进制2——文件流操作
比如我可以先存一个 int(4 个字节)再存一个 bool(1 个字节)再存一个 string(n 个字节),利用 FileStream 可以以流式逐个读写。 我们之前学过的 File 只能整体读写文件,而 FileStream 可以以读写字节的形式处理文件。 我们存储数据的先后顺序是我们制定的规则,只要按照规则读写就能保证数据的正确性。 通过 FileStream 读写时一定要注意:读的规则一定是要和写是一致的。 我们可以通过 FileStream 一部分一部分的读写数据流。原创 2022-10-26 01:38:42 · 2151 阅读 · 0 评论 -
2022-10-26 Unity 2进制1——文件操作
2 进制文件读写的本质就是通过将各类型变量转换为字节数组,将字节数组直接存储到文件中,一般人是看不懂存储的数据的。 不仅可以节约存储空间,提升效率,还可以提升安全性,而且在网络通信中我们直接传输的数据也是字节数据(2 进制数据) C# 提供了一个名为 File(文件)的公共类,让我们可以快捷的通过代码操作文件相关。 在电脑上我们可以在操作系统中创建删除修改文件,可以增删查改各种各样的文件类型。File 类提供了各种方法帮助我们进行文件的基础操作,需要记住这些关键 API。原创 2022-10-26 01:37:52 · 1206 阅读 · 0 评论 -
2022-09-09 Unity InputSystem5——PlayerInput
PlayerInput 是 InputSystem 提供的专门用于接受玩家输入来处理自定义逻辑的组件配置输入文件(InputActions 文件)通过 PlayerInput 关联配置文件,它会自动解析该配置文件关联对应的响应函数,处理对应逻辑不需要自己进行相关输入的逻辑书写通过配置文件即可配置想要监听的对应行为让我们专注于输入事件触发后的逻辑处理Actions:行为一套输入动作和玩家相关联,帮助我们监听一些按键的输入。原创 2022-09-09 02:34:35 · 4766 阅读 · 0 评论 -
2022-09-09 Unity InputSystem4——输入配置文件
这里面记录了想要处理的行为和动作(也就是 InputAction 的相关信息),我们可以在其中自己定义 InputAction(比如:开火、移动、旋转等),然后为这个 InputAction 关联对应的输入动作,之后将该配置文件和 PlayerInput 进行关联。 输入系统中提供了一种输入配置文件,你可以理解它是 InputAction 的集合,可以在一个文件中编辑多个 InputAction 的信息。 当切换了控制方案后,该控制方案可能是由多个设备配合控制,可以在这里进一步筛选对应设备。原创 2022-09-09 02:33:44 · 823 阅读 · 0 评论 -
2022-09-09 Unity InputSystem3——InputAction
许多控件没有精确的静止点(也就是说,当控件位于中心时,它们并不总是精确地报告(0,0)。Stick Deadzone:摇杆死区处理器缩放 Vector2 控件(如摇杆)的值,以便任何幅值小于最小值的输入向量都将得到(0,0),而任何幅值大于最大值的输入向量都将规格化为长度 1。类似 Hold,但是它在按住时间大于等于 Max Tap Duriation 的时候,并不会立刻触发 Performed,而是会在松开的时候才触发 Performed。主要用于状态连续更改的输入,例如鼠标的移动,手柄的遥感。原创 2022-09-09 02:32:28 · 6735 阅读 · 2 评论 -
2022-09-09 Unity InputSystem2——代码检测输入
或者直接进到类的内部查看具体成员,通过查看变量名和方法名即可了解使用方式。 或者直接进到类的内部查看具体成员,通过查看变量名和方法名即可了解使用方式。 新输入系统提供了对应的输入设备类,帮助我们对某一种设备输入进行检测。 如果想要学习他们的使用,最直接的方式就是看官方的文档。 如果想要学习他们的使用,最直接的方式就是看官方的文档。 新输入系统的设计初衷就是想提升开发者的开发效率, 对于没有细讲的设备,平时在开发中不是特别常用。 对于没有细讲的设备,平时在开发中不是特别常用。原创 2022-09-09 02:31:30 · 3534 阅读 · 0 评论 -
2022-09-09 Unity InputSystem1——概述
将输入操作进行封装,让我们可以在 Unity 内进行输入配置文件编辑。 不仅可以像老输入系统一样使用,还增加了输入配置的概念,新输入系统。 InputSystem 是 Unity 提供的一种新的输入系统。 我们不需要写代码来判断设备输入,只需要把工作重心放在逻辑处理上。可以同时启用也可以只启用其中之一,每次启用后会重启 Unity。 我们需要自己写各种检测代码来判断设备输入,并处理对应逻辑。 它相对于老的输入系统更具拓展性和可自定义的替代方案。原创 2022-09-09 02:30:41 · 1035 阅读 · 0 评论 -
2022-08-26 Unity视频播放4——全景视频
但是对于一些老设备或者移动设备可能最多只能使用 2K 分辨率,具体根据实际情况而定。 注意:尽量使用较高分辨率率的全景视频(4K 或 8K),这样效果更好。等距圆柱投影布局,也称为球面投影、简化圆柱投影、矩形投影或普通圆柱投影。视频宽高比为 2:1 的 360 度内容或 1:1 的 180 度内容。 我们也可以使用全景视频再游戏中来制作一些动态天空盒效果。 我们可以通过视频分辨率的比值判断该全景视频为哪一种。视频宽高比为 1:6、3:4、4:3、6:1。 全景视频一般在 VR 项目中才会使用。.原创 2022-08-26 21:40:30 · 3330 阅读 · 1 评论 -
2022-08-26 Unity视频播放3——VideoPlayer
比如:Track 0[en, 2 ch] 表示有一个音频轨道,语言是 en, 并且音频轨道有 2 个声道(2 ch),表示它是双声道音频轨道。 Video Player 顾名思义是视频播放器的意思,它是 Unity 提供给我们用于播放视频的组件。选择视频的路径,可以是远程视频路径,也可以之后通过代码直接关联视频资源路径。Fit Outside:对原视频进行缩放,可能需要进行裁剪,但是不会留黑边。1 表示正常速度,如果数值为 2,则视频速度 ❌ 2,表示两倍速播放。...原创 2022-08-26 21:39:46 · 3606 阅读 · 1 评论 -
2022-08-26 Unity视频播放2——视频剪辑设置
注意:Android 平台的原生 VP8 支持中不包括透明度支持,这意味着必须启用转码,以便 Unity 使用其内部 Alpha 表示方法。VP8:VP8 视频编解码器,受到大多数平台上的软件支持,并受到 Android 和 WebGL 等几个平台上的硬件支持。VP8 得到广泛支持并具有全面的功能集,但与硬件加速的编解码器(例如 H.264)相比,需要消耗更多的资源。H265:MPEG-H Part 2 或高效视频编码(HEVC)视频编解码器,受某些平台上的硬件支持。...原创 2022-08-26 21:39:05 · 2636 阅读 · 0 评论