Unity--Cubism Live2D模型使用
了解LIVE2D在unity的使用--前提记录
了解各个组件的作用
Live2D Manuals & Tutorials
这些文件都是重要的控制动画参数的
Cubism Editor是编辑Live2D的工具,而导出的数据的类型,需要满足以上的条件
SDK中包含的Cubism的Importer会自动生成一个Prefab。
这个生成的Prefab是转换为Unity可以处理Live2D模型的版本。
可以从Hierarchy视图中操作参数和部件的显示。
了解一下Live2D的制作流程
1立绘分层_哔哩哔哩_bilibili
可以设置阴影、透明度、将人物分为多个部分部分,每个部分都可以有自己的变化曲线
达成最终的呈现效果,所以在Unity调动2D模型的时候,这些很多的变化要如何规范,这是一个盲区
旋转变形器 曲面 父子集 流畅度(带动周围格子变形)
透明度设置为0,需要切换发型则将新发型设置为1,原来的设置为0
可以整体依然用同一套物理
制作过程中也会存在分文件夹制作
对单个头发的部件控制
这样看,SDK的作用确实很重要了,把这些本来规定在Editor里的规则,搬运到unity里得到控制
头部的移动,但头发作为子物体,通过调整,达到保持了重力的垂直效果
眼部的闭合也是通过一个0~1的参数就可以控制变化
睫毛作为部件被变化曲线连带
闭眼不失去高光点
微笑,左右眼开闭,以及闭眼变成微笑融合的情况
这么复杂的变化,unity不能在自己的引擎里控制每一个部分的参数变化
所以需要外部提供变化的规则文件,就像给出多个int ,每个int 只能控制一个范围的变化,但凑起来可以达到在Editor里展现的效果
加速度,scale变化,xy的位置绑定,转换到具体的每一个unity物体
连带的曲面等等,则通过额外的连动计算脚本控制
头部的转向控制,xy控制,z控制大小
图片只需要一张就可以,其余的都是Editor下的对图片的各种物理变化
轻微的拉伸是合理的,并不会造成视觉上的怪异
里面也会有喷枪等额外添加的图片层,可能是贴在原图上,可能是新建资源,
但在unity里,如果是前者无变化,是后者则变化较大,
会涉及到新图的放置问题(但Editor也可以转换成参数控制显隐,以及像转动头部一样的xy控制,最后的模型的处理规则传递到SDK里,应该不会有什么变化)
最后的呈现效果真的很惊人,,资源是仅仅一个图集,但最后呈现的效果非常广,好强,,
每个部件的变化都有自己的 参数可以提供输出,,
每个部件也可以接受别的部件的输出 影响自身部件的变化倍率,变化幅度等等
9导出和按键表情包_哔哩哔哩_bilibili
最后一课导出,
每一个表情,衣服的透明度都单独调整为1,之前的设置为0,然后导出一个文件
每次都导出,每一个透明度替换状态对应一个按钮,就可以在电脑键盘上对应切换状态
---------------
回到unity控制Live2D
在Unity项目模型上 播放从Cubism Editor 输出的嵌入动画文件
.motion3.json在载入时会自动转变为Unity的动画格式AnimationClip
从Cubism Editor输出的嵌入动态文件连同包含它的文件夹拖放到Project视图中
经过该操作,AnimationClip将从.motion3.json生成、、也可以为生成的AnimationClip设置Loop
AnimationClip以曲线的形式拥有设置为模型各参数的值,此曲线上设置的参数的属性位于模型Prefab以下层次结构中。
Cubism Part 控制 Opacity透明度
Cubism Parameters则是 控制变化的参数
指定这些属性,则可以使用在Unity上创建的AnimationClip或程序
操作模型的参数和部件的不透明度
Cubism的 动画格式在 载入项目时会转变为AnimationClip,所以可以使用Animator管理 过渡和混合多个动态
在运行时导入模型 | SDK 教程 | Live2D Manuals & Tutorials
在3.0或更高版本中,处理已经完全重新设计,使用CusbimModel3Json.LoadAtPath导入模型后,调用.ToModel()即可显示模型。
另外,创建并显示Prefab,无需从脚本中编写.update()或.draw()的更新绘制,绘制也会更新。
自己用c#脚本实现对导入模型的“转unity”
在运行时导入模型 | SDK 教程 | Live2D Manuals & Tutorials
这一块附近的内容都相对关键一些,先找找现在有没有更简单的工具可以帮我实现,但我还没找过,关于这些复杂的控制先暂时停下
---
回到制作层面,现在可以接入Deepseek的API来回答出问题了
(这里是future,,还是打算用GPT的API了,)
完成了对话的内容,接下来需要达到的效果是什么样的:
Live2D只是交互的方式,是说话或Idle 的时候可以表现出的动画控制
接下来可以填入什么进去?
1.语音模型,达到朗读发音
....
---
再次回到对Live2D的模型unity里进行控制
Live2D Cubism 模型有 多个参数 用来控制 表情、动作、变形。常见参数:
参数名 | 功能 |
---|---|
ParamAngleX | 头部左右旋转 |
ParamAngleY | 头部上下旋转 |
ParamAngleZ | 头部歪斜(倾斜) |
ParamEyeLOpen | 左眼开合(0=闭眼, 1=睁眼) |
ParamEyeROpen | 右眼开合 |
ParamEyeBallX | 眼球左右移动 |
ParamEyeBallY | 眼球上下移动 |
ParamMouthOpenY | 嘴巴开合(0=闭嘴, 1=张嘴) |
ParamMouthForm | 嘴型(-1=悲伤, 1=笑) |
ParamBodyAngleX | 身体左右旋转 |
ParamBodyAngleY | 身体上下移动 |
简单测试
public class Live2DControl : MonoBehaviour
{private CubismModel model; // Live2D 模型void Start(){model = GetComponent<CubismModel>(); // 获取模型组件}
}打印所有参数
void Start()
{model = GetComponent<CubismModel>();foreach (var param in model.Parameters){Debug.Log("参数名: " + param.Id + ",当前值: " + param.Value);}
}
52个参数,这个还算是简单的模型
.要做到可以控制各个参数,像虚拟主播一样:
EyeBlink | Cubism SDK 手册 | Live2D Manuals & Tutorials
---
CubismEyeBlinkController.Refresh()
CubismEyeBlinkController.EyeOpening
可以通过操作CubismEyeBlinkController.EyeOpening的值,将值应用于眨眼的参数
CubismEyeBlinkController在每帧的LateUpdate()时机
将CubismEyeBlinkController.EyeOpening的值应用于CubismEyeBlinkParameter标记的参数
Cubism SDK for Unity中,各组件的执行顺序由CubismUpdateController控制
---
刚才直接去看了Sample自带的场景,发现了一些可以直接引用的组件,达到实现追踪的效果
target就是挂载的游戏对象,会整体跟随移动
那大致要怎么控制的框架就有了
大致框架理解之后,Sample里的例子就很容易知道重点在哪一部分了
lookAt的动画变化,并不是由unity的animator控制的,此时挂在模型上的animator是空的
导入进来的Live2D模型实际上和 unity里的Motion调整动作没有关系,,或者说在导入之前,Editor里就已经把物理规则定的很标准,是不允许在unity里乱调不暴露出来的重要参数的
这些各种Controller就是整理好的,可以在unity中暴露被修改的部分
unity才是扒拉人家模型,强行想用到自己的引擎里,但Editor对这方面的规定比较完善和硬核,所以unity能改的地方并不多,
状态机可以做的,是安排各种条件,对应各种动作表情(这些也是Editor规定好的,不会为了unity bro去额外改什么规则),这样就可以把效果的控制全转移到C#的代码逻辑上了
这些动作也和状态机没有一点关系
但是参数的修改有时候在unity上没有很及时的同步,不知道是不是适配原因
这些动作的切换是Motion Controller控制的,但是layer count没有很及时的变换(unity也是够卑微 )
Fade Controller,应该就是动作之间切换的时候,透明度逐渐调为0的过程
所以需要list确保淡去哪个,显示哪个
这个动画就运用了状态机,让他自己切换播放
可以确定了,Live2D在unity里就是不能通过Animation播放这些动作的
但是Animation里的 Clip文件,对每个参数的变化的都是有记录的,这些内部参数又是不会暴露给unity的,所以无法通过Animation窗口查看,
但可以在Game窗口里,当状态切换的时候,会把对应的动作调用出来得到展示
每个状态上也挂了对应的观察脚本(应该是控制透明度切换,更换新的动作),并没有把控制权交给unity
进这个脚本里大致看看结构,也可以差不多的感觉到对切换的监控和准备切换为新状态
Cubism的射线检测
一个测试脚本,拖入模型之后,就可以检测到碰撞(也是Sample样本里的)
--------
animator又在一些时候有用,,
OW(Original Workflow,原始工作流)是 Live2D Cubism SDK for Unity 中的一部分,它提供了一系列 组件 和 脚本,用于管理 Live2D 模型的参数、动作、表情、姿势,让开发者可以通过 代码 轻松控制 Live2D 模型的各种表现。
你理解得 基本正确——OW 主要是 暴露出可以操作的参数,让开发者可以通过 C# 修改参数 以控制 Live2D 角色的各种行为,比如 表情、动作、姿势、过渡效果。
OW(Original Workflow)目录下的文件 主要包含以下功能:
文件 作用 CubismParameterStore
存储参数值,可用于保存和恢复 Live2D 模型状态 CubismUpdateController
管理参数更新,确保模型的参数随时间变化 Expression
管理表情(类似 happy.face3.json
这样的表情文件)Motion
管理动作(如 Idle.motion3.json
等)MotionFade
处理动画淡入淡出,让不同的动画过渡更自然 Pose
管理 Live2D 角色的姿势,用于防止角色姿势不自然
Expression | Cubism SDK 手册 | Live2D Manuals & Tutorials
Expression的文件创建,使用到Live2D上
下载了模型之后,检查有没有生成.asset文件(unity形式的expression和motion文件,下方的文本是json文件,是Cubism Editor 里做好的原始文件,unity并不能控制)
了解各个系统在unity中的使用之前,首先要清楚,unity在Live2D模型的控制力是很卑微的(在以后学习到别的资源引用的时候应该也会这样),
Editor做好的模型都在SDK里几乎自己解决了,给unity也不想unity乱用,所以暴露出来的可控区域很少,基本上OW文档里面说了什么,就只能用这些
Live2D 表情系统(Expression)
1. Expression
Live2D Expression 负责 控制表情,主要用于 眨眼、微笑、皱眉、惊讶 等 短时间的动态变化。
- 通过
.exp3.json
文件定义表情参数(类似于“开心”、“惊讶”)。 - 通过
CubismExpressionController
播放表情。 - 通过 加算(Additive)、覆盖(Override)、正片叠底(Multiply) 计算表情对参数的影响。
- Unity 的 Animator 没有“正片叠底”功能,所以需要 Expression 系统 处理表情混合。
2. 使用前提
在 Unity 里使用 Expression(表情系统) 之前,需要确保:
- Live2D 预制体(Prefab)已经包含:---SDK has done commonly
CubismUpdateController
CubismParameterStore
- 有表情文件(.exp3.json):
- 需要从 Live2D Editor 导出,并转换成 Unity 可用的
.exp3.asset
文件。
- 需要从 Live2D Editor 导出,并转换成 Unity 可用的
- 表情列表(.expressionList.asset):
- 管理多个表情,类似于“表情索引”。
3. 完整流程
1. 创建 .exp3.asset
(表情数据)---SDK has done commonly
.exp3.asset
是 .exp3.json
的 ScriptableObject 版本,用于存储解析后的表情信息。
- 解析
.exp3.json
,转换为CubismExpressionData
- 创建
.exp3.asset
- 不要手动修改
.exp3.asset
,否则可能导致异常。
代码示例
// 解析 .exp3.json 并创建 .exp3.asset
expressionData = CubismExpressionData.CreateInstance(ExpressionJson);
AssetDatabase.CreateAsset(expressionData, AssetPath.Replace(".exp3.json", ".exp3.asset"));// 更新 Unity 资源库
EditorUtility.SetDirty(expressionData);
2. 创建 .expressionList.asset
(表情列表)---SDK has done commonly
.expressionList.asset
是 管理表情 .exp3.asset
的列表。
- 这个文件 记录了当前模型支持的所有表情。
- 使用
CubismExpressionController
通过 索引(CurrentExpressionIndex) 选择要播放的表情。
代码示例
// 获取现有的表情列表
var expressionList = AssetDatabase.LoadAssetAtPath<CubismExpressionList>(expressionListPath);// 如果不存在,创建新资产
AssetDatabase.CreateAsset(expressionList, expressionListPath);// 更新 Unity 资源
EditorUtility.SetDirty(expressionList);
3. 追加 .exp3.asset
到 .expressionList.asset
---SDK has done commonly
每个模型的 .expressionList.asset
都需要绑定 .exp3.asset
(表情数据)。
代码示例
// 追加新的 .exp3.asset
expressionIndex = expressionList.CubismExpressionObjects.Length;
Array.Resize(ref expressionList.CubismExpressionObjects, expressionIndex + 1);
expressionList.CubismExpressionObjects[expressionIndex] = expressionData;// 更新 Unity 资源库
EditorUtility.SetDirty(expressionList);
4. 通过 CubismExpressionController
播放表情
在 Unity 运行时,可以通过 CubismExpressionController.CurrentExpressionIndex
切换表情。
代码示例
using Live2D.Cubism.Framework.Expression;
using UnityEngine;public class ExpressionController : MonoBehaviour
{private CubismExpressionController expressionController;void Start(){expressionController = GetComponent<CubismExpressionController>();}void Update(){if (Input.GetKeyDown(KeyCode.H)){expressionController.CurrentExpressionIndex = 0; // 播放第一个表情}if (Input.GetKeyDown(KeyCode.S)){expressionController.CurrentExpressionIndex = 1; // 播放第二个表情}}
}
🔹 说明
CurrentExpressionIndex = 0
→ 切换到happy.exp3.asset
CurrentExpressionIndex = 1
→ 切换到sad.exp3.asset
- 必须 绑定
CubismExpressionController
组件。
5. 让表情有“淡入淡出”效果
每个表情有:
FadeInTime
(淡入时间)FadeOutTime
(淡出时间)
在 切换表情时,应该 设置上一个表情的 ExpressionEndTime
,让它正确淡出。
代码示例
// 让上一个表情淡出
if (_playingExpressions.Count > 0)
{var playingExpression = _playingExpressions[_playingExpressions.Count - 1];playingExpression.ExpressionEndTime = playingExpression.ExpressionUserTime + playingExpression.FadeOutTime;_playingExpressions[_playingExpressions.Count - 1] = playingExpression;
}
🔹 这个代码会 自动计算表情的过渡时间,让表情更流畅。
6. 计算表情并应用
表情在每帧更新时,系统会计算新表情的值,并应用到 CubismParameter
里。
- 表情数据结构
字段 作用 Type
.exp3.json
类型FadeInTime
表情淡入时间 FadeOutTime
表情淡出时间 Weight
影响权重(0 ~ 1) ExpressionUserTime
播放时间 ExpressionEndTime
退出时间 Destinations
影响的 Live2D 参数 Value
表情应用到参数的值 Blend
计算方式(Override、Additive、Multiply)
Live2D SDK 通过 CubismExpressionController.OnLateUpdate()
计算表情参数的最终值。
必须在 ParameterStore.SaveParameters()
之后应用表情,否则会导致参数错误。
测试表情的代码
using Live2D.Cubism.Framework.Expression;
using UnityEngine;public class ExpressionController : MonoBehaviour
{private CubismExpressionController expressionController;void Start(){expressionController = GetComponent<CubismExpressionController>();}void Update(){if (Input.GetKeyDown(KeyCode.E)){expressionController.CurrentExpressionIndex++;if (expressionController.CurrentExpressionIndex >= expressionController.ExpressionsList.CubismExpressionObjects.Length){expressionController.CurrentExpressionIndex = -1;}Debug.Log(expressionController.CurrentExpressionIndex);}}
}
模型的Render错位
模型导入到LIVE2D场景之后,会出现这样的问题,因为Editor里的图层顺序安排,在unity里并不适用,要在RenderController里设置后-前 Order,这样部件的排序(大概率是SDK做的Order)就可以改掉unity的展示问题
功能实现记录
梳理一下自己的需求,视线追踪要实现,自由切换表情,,,(这个可能还要结合一下语音内容什么的,已经有动作了,表情要怎么处理,,,这个还得考虑)
--------------
AnimationClip以曲线的形式拥有设置为模型各参数的值,此曲线上设置的参数的属性位于模型Prefab以下层次结构中。(Value在Inspector中隐藏)
[模型根]/Parameters/[参数ID]/Cubism Parameters/Value
----
SDK会带来自己的状态机文件,和动画clip
这些clip都是json转出来的适用于unity的动作控制
clip动画和对模型的控制的其他组件功能是分开的,不会产生重叠的问题
通过使用Motion,您可以从脚本播放动画,而无需使用Unity的Mecanim构建状态机
要使用Motion,您需要CubismFadeController组件和Unity的Animator。
如果在Animator组件中设置AnimatorController,则不会播放Motion,而是播放AnimatorController的动画
但加上也是可以的,只不过和Clip的动画会有一些出入,比如覆盖clip里规定 的各个参数变化,眼睛一直保持某个状态不变等
加于不加并不冲突
太多类型如果都去记,就很消耗时间,var这个类型前缀,用的很多是有原因的
注意,Center是target 对象身上的中心,是可以不拖的,默认就把target物体的中心做中心来计算
(因为是鼠标,所以可能这个地方的lookAt功能并不是很能体现出Center的位置重要性)
参数中,将名为CubismLookParameter的组件附加到希望跟踪的gameobject
最后,准备要跟踪的对象。
在CubismLookController组件的[Target]中,设置实装[ICubismLookTarget]接口的组件。
加look parameter组件一定要加载对应的gameobject上
视线追踪和点击头、身体的随机动画是做好了
----
关于这个自动眨眼,一些模型会自带的做上去,附加上Controller
mao这个模型就附带了,也不用加auto blink input了
-----
口形同步设置
关于blend mode,大多默认是multiply,这样就是如果有别的部分在操作参数,自己则不使用参数
additive就是附加,“正片叠底”
override就是完全控制该blend下的全部参数
MouthMovement包含作为输入范例,根据AudioSource的音量和Sin波操作嘴巴开合值的组件。
此次附加一个名为 CubismAudioMouthInput 的组件,以便您可以从AudioSource设置值。
Sampling Quality:设置要采样的音量的精度。设置的阶数越低,精度越高,计算负载越大。
Gain:设置以多少倍的值处理采样音量。1为等倍
Smoothing:设置从音量计算的开/关值平滑化多少。值越高,则越平滑,但也会增加计算负载
最后,要获取音量,将AudioSource拖入 CubismAudioMouthInput的Audio Input
-----
最后,就是接入语音模型了,也是不怎么了解的领域,先了解一下吧
相关文章:

Unity--Cubism Live2D模型使用
了解LIVE2D在unity的使用--前提记录 了解各个组件的作用 Live2D Manuals & Tutorials 这些文件都是重要的控制动画参数的 Cubism Editor是编辑Live2D的工具,而导出的数据的类型,需要满足以上的条件 SDK中包含的Cubism的Importer会自动生成一个Pref…...

Vue.js 3 的设计思路:从声明式UI到高效渲染机制
目录 一、声明式UI与虚拟DOM的灵活性 二、渲染器:虚拟DOM到真实DOM的桥梁 三、组件的本质与实现 四、编译与运行时的协同优化 五、性能与可维护性的权衡 总结 Vue.js 3 作为新一代前端框架,其设计理念在声明式UI描述、虚拟DOM优化、组件化架构…...

部署前后端项目
部署项目 liunx 软件安装 软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 建议nginx、MySQL、Redis等等使用docker安装,会很便捷,这里只演示JDK、ngxin手动的安装 安装JDK 上述我…...

Vue Diff算法原理深度解析:如何高效更新虚拟DOM?
文章目录 1. 为什么需要Diff算法?2. Diff算法核心原则3. 核心流程图解4. 核心代码实现(简化版)5. Key的重要性示例6. 算法优化策略7. 时间复杂度优化8. 与其他框架的对比9. 总结 1. 为什么需要Diff算法? 在Vue的响应式系统中&…...

Dify平台部署记录
安装dify项目 官网地址:http://difyai.com/ github地址:https://github.com/langgenius/dify 下载项目: git clone https://github.com/langgenius/dify.git下载过慢,直接访问网页下载zip压缩包: 解压,…...

ArcGIS Pro中字段的新建方法与应用
一、引言 在地理信息系统(GIS)的数据管理和分析过程中,字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计,字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提…...

Git 的基本概念和使用方式。
Git 是一种分布式版本控制系统,用于跟踪文件和目录的变化。Git 的基本概念和使用方式如下: 仓库(Repository):Git 仓库是用来存储项目文件和历史记录的地方。一个 Git 仓库包含项目的文件、版本记录和配置信息。 提交…...

贪心算法--
1.柠檬水找零 link:860. 柠檬水找零 - 力扣(LeetCode) code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法, 优先花出大面额bill, 尽可能保护小面额billint five 0, ten 0;// 不…...

mysql下载与安装、关系数据库和表的创建
一、mysql下载: MySQL获取: 官网:www.mysql.com 也可以从Oracle官方进入:https://www.oracle.com/ 下载地址:https://downloads.mysql.com/archives/community/ 选择对应的版本和对应的操作系统&a…...

万字技术指南STM32F103C8T6 + ESP8266-01 连接 OneNet 平台 MQTT/HTTP
此博客为一份详细的指南,涵盖 STM32F103C8T6 通过 ESP8266-01 连接 OneNet 平台,并使用 MQTT/HTTP 进行数据通信的完整流程。这份文档包括: OneNet 平台的介绍与功能概览在 OneNet 上创建和配置设备的方法STM32CubeIDE 的开发环境搭建ESP826…...

MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU
2025年世界移动通信大会(MWC 2025)期间,紫光展锐联合移远通信,正式发布了全面支持5G R16特性的模组RG620UA-EU,以强大的灵活性和便捷性赋能产业。 展锐芯加持,关键性能优异 RG620UA-EU模组基于紫光展锐V62…...

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!
PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)! 当我们成功接入大模型时,可以选中任意代码区域进行解答,共分为三个区域,分别是选中区域、提问区域以及回答区域,我…...

小智智能体语言大模型硬件软件开发
硬件可以参考ESP32-AI语音助手 - 立创开源硬件平台 单片机使用esp32s3,可以直接替换,但是引脚IO有变化,而且esp32s3 io35 36 37不能用,所以得飞一条线,原先接在io35的飞到io4上。如果不飞线的话系统一直重启 软件使用…...

网络tcp协议设置,网络tcp协议设置不了
网络TCP协议的设置通常涉及到多个方面,包括IP地址、子网掩码、默认网关、DNS服务器等参数的配置,以及TCP/IP协议栈本身的配置。如果遇到网络TCP协议设置不了的问题,可能是由多种原因导致的。以下是一些可能的原因及解决方法: 一、…...

配置Hadoop集群
Hadoop的运行模式 本地运行:在一台单机上运行,没有分布式文件系统,直接读写本地操作系统的文件系统。特点:不对配置文件进行修改,Hadoop 不会启动 伪分布式:也是在一台单机上运行,但用不同的 …...

模型微调-基于LLaMA-Factory进行微调的一个简单案例
模型微调-基于LLaMA-Factory进行微调的一个简单案例 1. 租用云计算资源2. 拉取 LLaMa-Factory3. 安装依赖环境4. 启动 LLaMa-Factory 界面5. 从 Huggingface 下载模型6. 模型验证7. 模型微调 1. 租用云计算资源 以下示例基于 AutoDL 云计算资源。 在云计算平台选择可用的云计…...

设置重定向不缓存
response.setHeader(“Cache-Control”, “no-cache, no-store, must-revalidate”); response.setHeader(“Pragma”, “no-cache”);response.setHeader(“Expires”, “0”);response.sendRedirect(newURL); response.setContentType(“text/html;charsetUTF-8”); PrintWr…...

java-算法基础优化
一、ACM风格输入输出(高效,替换原有的输入输出流) 1.推荐原因:(内存托管) 对于原本的Scanner读取流,只能根据行来读取数据,而BufferredReader读取信息可以直接读取整个文件…...

⚡ 回声谷即时通讯系统
基于SpringBootVue3的实时通信解决方案 🌟 核心特性 #mermaid-svg-uxEwEcjlUVI6Tjjf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uxEwEcjlUVI6Tjjf .error-icon{fill:#552222;}#mermaid-svg-uxEwEcjl…...

《 PyQt5》—— 创建 Python GUI(图形用户界面)
文章目录 PyQt5安装基本概念进行配置配置QtDesigner配置PyUIC配置Pyrcc 使用PyQt5使用如何使用ui文件 PyQt5 PyQt5 是一个用于创建 Python GUI(图形用户界面)应用程序的强大工具包,它是 Qt 应用程序框架的 Python 绑定。Qt 是一个跨平台的 C…...

Python图形编程之EasyGUI: indexbox的用法
目录<<上一章:ynbox用法详解 下一章:boolbox用法详解 >> # 1 Python图形编程之EasyGUI: indexbox的用法 1.1 基本用法 indexbox提供用户一个选择不同选项的功能,不同的选项由按钮来表示,提供类似功能的还有choicebox…...

vue+dhtmlx-gantt 实现甘特图-快速入门【甘特图】
文章目录 一、前言二、使用说明2.1 引入依赖2.2 引入组件2.3 引入dhtmlx-gantt2.4 甘特图数据配置2.5 初始化配置 三、代码示例3.1 Vue2完整示例3.2 Vue3 完整示例 四、效果图 一、前言 dhtmlxGantt 是一款功能强大的甘特图组件,支持 Vue 3 集成。它提供了丰富的功…...

游戏引擎学习第147天
仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说,我们通过隐式计算来解决问题,而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分,并计划继续处理音量问题。不过,实际上我们现在不需要继续处理…...

Python自动点击器开发教程 - 支持键盘连按和鼠标连点
Python自动点击器开发教程 - 支持键盘连按和鼠标连点 这里写目录标题 Python自动点击器开发教程 - 支持键盘连按和鼠标连点项目介绍开发环境安装依赖核心代码解析1. 键盘模拟实现2. 鼠标点击实现 开发要点使用说明注意事项优化建议打包发布项目源码开发心得参考资料成品工具 项…...

C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解
目录 list的使用: 构造与赋值 元素访问 修改操作 容量查询 链表特有操作 拼接(Splice) C11 新增方法 注意: stl_list的模拟实现: 一、链表节点设计的艺术 1.1 结构体 vs 类的选择 二、迭代器实现的精髓 2…...

Manus联创澄清:我们并未使用MCP技术
摘要 近日,Manus联创针对外界关于其产品可能涉及“沙盒越狱”的疑问进行了正式回应。公司明确表示并未使用Anthropic的MCP(模型上下文协议)技术,并强调MCP是一个旨在标准化应用程序与大型语言模型(LLM)之间…...

ACE学习2——write transaction
用于处理缓存行的数据更新到主内存(main memory)的操作。 以下是用于更新主内存的几种事务类型: WriteBack: WriteBack事务用于将cache中的dirty态的cacheline写回主存,以释放cache中的cacheline,用于存…...

c++ 返回引用
在C中,返回引用是一种常见的做法,特别是在需要返回大型对象时,以避免不必要的复制,从而提高程序的效率。返回引用通常有两种情况:返回局部变量的引用和返回成员变量的引用。下面分别讨论这两种情况以及如何安全地实现它…...

Docker篇
1.docker环境搭建: 1.1软件仓库的配置rhel9: #cd/etc/yum.repos.d #vim docker.repo [docker] namedocker-ce baseurlhttps://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable gpgcheck0 1.2安装docker并且启动服务 yum install -y dock…...

TypeScript基础类型详解:与JavaScript的对比与核心价值
TypeScript作为JavaScript的超集,最大的特性是引入了静态类型系统。本文将基于TypeScript官网内容,解析其基础类型设计,并与ES/JavaScript进行对比,揭示类型系统的实际价值。 一、基础类型全景图 1. 原生类型的强化 JavaScript原…...