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(表情系统) 之前,需要确保:

  1. Live2D 预制体(Prefab)已经包含---SDK has done commonly
    • CubismUpdateController
    • CubismParameterStore
  2. 有表情文件(.exp3.json)
    • 需要从 Live2D Editor 导出,并转换成 Unity 可用的 .exp3.asset 文件。
  3. 表情列表(.expressionList.asset
    • 管理多个表情,类似于“表情索引”。

3. 完整流程

1. 创建 .exp3.asset(表情数据)---SDK has done commonly

.exp3.asset.exp3.jsonScriptableObject 版本,用于存储解析后的表情信息。

  • 解析 .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 

-----

最后,就是接入语音模型了,也是不怎么了解的领域,先了解一下吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术

文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战&#xff1a;运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…

Lab17_ Blind SQL injection with out-of-band data exfiltration

文章目录 前言&#xff1a;进入实验室构造 payload 前言&#xff1a; 实验室标题为&#xff1a; 带外数据泄露的 SQL 盲注 简介&#xff1a; 本实验包含一个SQL盲目注入漏洞。应用程序使用跟踪Cookie进行分析&#xff0c;并执行包含提交的Cookie值的SQL查询。 SQL查询是异…

Vue 框架深度解析:源码分析与实现原理详解

文章目录 一、Vue 核心架构设计1.1 整体架构流程图1.2 模块职责划分 二、响应式系统源码解析2.1 核心类关系图2.2 核心源码分析2.2.1 数据劫持实现2.2.2 依赖收集过程 三、虚拟DOM与Diff算法实现3.1 Diff算法流程图3.2 核心Diff源码 四、模板编译全流程剖析4.1 编译流程图4.2 编…

Linux基本指令

一&#xff1a;Xshell相关快捷键 1.AltEnter进入Xshell全屏模式&#xff0c;再按一次AltEnter退出Xshell全屏模式 2.Ctrl Insert复制 3.Shift Insert粘粘 二&#xff1a;Linux基本指令 1.clear&#xff1a; 清屏&#xff1a;即将屏幕框上的所有内容删除 2.pwd&#xf…

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

计算机视觉|3D卷积网络VoxelNet:点云检测的革新力量

一、引言 在科技快速发展的背景下&#xff0c;3D 目标检测技术在自动驾驶和机器人领域中具有重要作用。 在自动驾驶领域&#xff0c;车辆需实时、准确感知周围环境中的目标物体&#xff0c;如行人、车辆、交通标志和障碍物等。只有精确检测这些目标的位置、姿态和类别&#x…

【AD】5-13 特殊粘贴使用

同等间距复制很多过孔 复制之后进行特殊性粘贴&#xff0c;选择阵列粘贴 将元件带位号、带网络从PCB复制粘贴到另一个PCB 全选PCB并复制&#xff0c;来到另一个PCB&#xff0c;点击特殊性粘贴

Unity自定义区域UI滑动事件

自定义区域UI滑动事件 介绍制作1.创建一个Image2.创建脚本 总结 介绍 一提到滑动事件联想到有太多的插件了比如EastTouchBundle&#xff0c;今天想单纯通过UI去做一个滑动事件而不是基于Box2d或者Box去做滑动事件。 制作 1.创建一个Image 2.创建脚本 using UnityEngine; us…

报表DSL优化,享元模式优化过程,优化效果怎么样?

报表DSL优化与享元模式应用详解 一、报表DSL优化 1. 问题背景 报表系统通常使用领域特定语言&#xff08;DSL&#xff09;定义模板结构、数据绑定规则及样式配置。随着复杂度提升&#xff0c;DSL可能面临以下问题&#xff1a; 冗余配置&#xff1a;重复定义样式、布局或数据源…

Python —— pow()函数

一、示例1 # 计算 2 的 3 次幂 result1 pow(2, 3) print(result1) # 输出: 8# 计算 2.5 的 2 次幂 result2 pow(2.5, 2) print(result2) # 输出: 6.25 二、示例2 # 计算 (2 ** 3) % 5 result3 pow(2, 3, 5) print(result3) # 输出: 3 三、示例3 ntxt input("请输…

STM32——GPIO介绍

GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…

3月8号(信息差)

🌍“星际之门”首个数据中心重磅启航!料部署6.4万块英伟达GB200 🎄全球AI大混战升温!超越Sora的阿里万相大模型开源 家用显卡都能跑 ✨重磅!阿里深夜推出全新推理模型,仅1/20参数媲美DeepSeek R1 1.7B级形式化推理与验证小模型,媲美满血版DeepSeek-R1,全面开源! 研…

使用 NodeMCU 将温度和湿度传感器数据发送到 Firebase 实时数据库ESP8266

作者 使用 NodeMCU8266 将温度和湿度传感器数据发送到 Firebase 实时数据库 微控制器的内部存储器很小,不足以长时间保存传感器生成的数据,要么您必须使用一些外部存储设备,要么可以使用互联网将数据保存在一些云上。此外,当传感器部署在人类无法到达或难以经常访问的极端…

匿名GitHub链接使用教程(Anonymous GitHub)2025

Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心&#xff0c;然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…

【结构设计】立创EDA专业版——3D外壳设计

【结构设计】立创EDA专业版——3D外壳设计 文章目录 前言立创EDA官网教程一、3D结构设计1. 外壳2. 铜柱3. 顶层4. 侧边 二、3D视图三、导出二、参考文章总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 立创EDA官网教程 立创EDA使用教程 立创…

Spring Boot 3 整合 MinIO 实现分布式文件存储

引言 文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心&#xff0c;而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。 分布式存…

[数据结构]栈和队列

目录 1. 栈(Stack) 1.1、概念 1.2、 Stack的常用方法 1.3、有关栈的术语区分 2、实现自己的栈 2.1、入栈 2.2、出栈 2.3、查看栈顶元素 2.4、链式栈 3、队列(Queue) 3.1、概念 3.2、Queue的常用方法 3.3、循环队列 4、实现自己的链式队列 4.1、入队 4.2、出队 …

求最大公约数【C/C++】

大家好啊&#xff0c;欢迎来到本博客( •̀ ω •́ )✧&#xff0c;我将带领大家详细的了解最大公约数的思想与解法。 一、什么是公约数 公约数&#xff0c;也称为公因数&#xff0c;是指两个或多个整数共有的因数。具体来说&#xff0c;如果一个整数能被两个或多个整数整除&…

OSPF网络类型:NBMA与P2MP

一、NBMA网络 NBMA网络的特点 连接方式&#xff1a; 支持多台设备连接到同一个网络段&#xff0c;但网络本身不支持广播或组播。典型例子&#xff1a;帧中继、ATM。 DR/BDR选举&#xff1a; 由于网络不支持广播&#xff0c;OSPF需要手动配置邻居。 仍然会选举DR&#xff08…

c#财务软件专业版企业会计做账软件财务管理系统软件

本软件为绍兴客户开发的仿某碟财务软件专业版 功能&#xff1a;可以按会计科目做账录入会计凭证、结转损益、期末结账、拉资产负债表 github下载&#xff1a;https://github.com/oyangxizhe/financial.git