当前位置: 首页 > news >正文

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一)

  • Gameplay Ability System(GAS) 是一个模块化且强大的框架,用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability(定义和执行能力)、Gameplay Effect(应用和管理效果)、Attribute Set(管理角色属性)、Gameplay Tags(标记和管理对象状态)、Gameplay Tasks(处理异步任务)以及 Gameplay Modifiers(修改属性值)。这些组件相互协作,使得开发者能够创建复杂且高度定制化的游戏玩法,如技能系统、状态效果系统等。
  • Gameplay Ability System(GAS)组成部分及其功能
  • 学习位置UE5.3 GAS入门教程重置版 小明

创建工程

  • 创建工程然后开启GameplayAbilites插件
    在这里插入图片描述
  • 在工程.Build.cs里添加这三个模块:"GameplayAbilities","GameplayTags","GameplayTasks"
    在这里插入图片描述
  • 编译后会报307错误,把这几个文件删除重新构建编译一下即可
    在这里插入图片描述

在这里插入图片描述

  • 创建基础角色类并新建基础角色的蓝图,然后创建两个继承这个蓝图的子类作为角色与敌人
    在这里插入图片描述
    在这里插入图片描述

简易角色基本控制

  • 添加一个第三人称模版,然后删除掉就会有它给你做好的轴操作控制
    在这里插入图片描述
  • 留下需要的即可
    在这里插入图片描述
  • 然后将导入的资产中那个蓝图里面的操作复制到我们创建的角色蓝图中去更改这个轴操作
    在这里插入图片描述
  • 勾上
    在这里插入图片描述
    在这里插入图片描述
  • 勾掉这个,角色就能正常转体
    在这里插入图片描述

2种相机模式与夹角限制

  • 首先将输入操作从角色蓝图移动到控制器蓝图中
    在这里插入图片描述
  • 限制视角
    在这里插入图片描述
  • 在玩家蓝图中写一个函数用来锁定相机操作
    在这里插入图片描述

攻击动作的融合

  • 创建混合空间设置好动作行为
    在这里插入图片描述
  • 创建动画蓝图设置初始属性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 配置蒙太奇
    在这里插入图片描述
  • 攻击蒙太奇与移动进行融合,就可以边走边攻击了
    在这里插入图片描述
  • 这个攻击蒙太奇人物会转身,为了避免这种人物突然旋转的情况,要在蒙太奇中添加通知来是否需要融合
    在这里插入图片描述
    在这里插入图片描述
  • 最后进行攻击动作的融合输出到最终状态
    在这里插入图片描述

GAS结合GamePlay

  • 添加AbilitySystem组件
    在这里插入图片描述
  • 添加技能的基类蓝图
    在这里插入图片描述
    在这里插入图片描述
  • 获取技能
    在这里插入图片描述
  • 创建一个函数用来使用Melee
    在这里插入图片描述
    在这里插入图片描述
  • 创建一个函数用来激活技能
    在这里插入图片描述
  • 然后在技能蓝图里面添加Melee这个标签
    在这里插入图片描述
    在这里插入图片描述
  • 将技能标签添加到数组中
    在这里插入图片描述
  • 然后Melee事件调用激活技能这个函数
    在这里插入图片描述
  • 测试一下
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
  • 换为播放Montage
    在这里插入图片描述
  • 添加一个GameplayEffect技能CD,以免出现攻击反复无常的情况
    在这里插入图片描述
    在这里插入图片描述
  • 提交CD
    在这里插入图片描述
  • 给剑添加碰撞盒
    在这里插入图片描述
  • 碰撞除了自己与同类不进行碰撞处理,其他进行碰撞处理
    在这里插入图片描述

设置角色属性

  • 新建一个AttributeSet
    在这里插入图片描述
  • 虚幻引擎中提供了一种宏,帮助函数,可以很方便加载游戏的特殊的方法
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)

在这里插入图片描述

  • 定义好属性
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once#include "CoreMinimal.h"
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "BaseAttributeSet.generated.h"/*** */#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)UCLASS()
class GASDEMO_API UBaseAttributeSet : public UAttributeSet
{GENERATED_BODY()public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "BaseAttributeSet")FGameplayAttributeData HP;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, HP);UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")FGameplayAttributeData MaxHP;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxHP);UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")FGameplayAttributeData MP;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MP);UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")FGameplayAttributeData MaxMP;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxMP);UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")FGameplayAttributeData Strength;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, Strength);UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")FGameplayAttributeData MaxStrength;ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxStrength);
};
  • 解决小bug,武器碰撞盒子只有在挥刀的时候才开启碰撞
    在这里插入图片描述
    在这里插入图片描述
  • 将碰撞盒子的碰撞修改一下
    在这里插入图片描述

伤害敌人并做夹值处理

  • 新建一个数据表把角色属性加入到里面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 将这个表设置到角色属性的AbilitySystem里面去
    在这里插入图片描述
  • 再新建一个GameplayEffect作为伤害受理,每次扣血5点值
    在这里插入图片描述
    在这里插入图片描述
  • 在Melee攻击检测这里应用这个GE
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
  • 处理伤害溢出问题
    在这里插入图片描述
  • 写上夹值逻辑
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

行为树配置

  • 关于两个镜头的处理,取消碰撞测试就不会让镜头被挡,启动
    在这里插入图片描述
    在这里插入图片描述
  • 做不同等级的伤害表,新建一个.csv的表,第一行第一列是要空着的,然后写入伤害等级值
    在这里插入图片描述
  • 将表格拖入UE中,选择类型为曲线表格,插值类型为常量
    在这里插入图片描述
  • 将表格插入到伤害的GE
    在这里插入图片描述
  • 新建行为树与黑板进行配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 创建AIController,然后执行行为树,将这个AIController附加到Enemy蓝图上
    在这里插入图片描述
    在这里插入图片描述

生命值改变时广播

  • 将所有的碰撞类型改成这样
    在这里插入图片描述
  • 基础父类蓝图里面开始时将剑的碰撞盒子关掉
    在这里插入图片描述
  • 把之前的动画通知改变通道变成设置碰撞
    在这里插入图片描述
  • 在基础角色类中声明动态多播委托,因为多播委托可以在蓝图中调用
    在这里插入图片描述
  • 创建一个多播委托的处理函数
    在这里插入图片描述
  • 绑定多播委托
    在这里插入图片描述
    在这里插入图片描述
  • 订阅一下这个广播
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

死亡处理

  • 制作一下死亡的Montage动画
    在这里插入图片描述
  • 添加一个死亡处理事件
    在这里插入图片描述
    在这里插入图片描述

停止AIController控制

  • 在敌人蓝图里面添加一个停止控制的函数
    在这里插入图片描述
  • 在敌人蓝图里面重写一下父类中的检查血量的事件
    在这里插入图片描述
  • 玩家蓝图中也要重写这个事件
    在这里插入图片描述

添加敌人的血条

  • 创建一个UMG制作敌人血条
    在这里插入图片描述
    在这里插入图片描述
  • 在敌人蓝图中添加这个UMG组件,并写上更新UI逻辑
    在这里插入图片描述
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

玩家住UI制作与构建技能结构体系

搭建玩家UI界面

  • 创建玩家的属性UI
    在这里插入图片描述
  • 这个纹理有两个暴露出来设置的值,一个是设置百分比一个是设置颜色
    在这里插入图片描述
  • 添加一个事件来设置血球的百分比
    在这里插入图片描述
  • 添加一个事件来设置血球的颜色
    在这里插入图片描述
  • 创建角色的主UI,然后设置好这三个属性球的颜色
    在这里插入图片描述
    在这里插入图片描述

同步UI到玩家信息

  • 在玩家控制器里面添加这个主UI窗口
    在这里插入图片描述
  • 获取到角色的控制器,然后进行血量的数值变化逻辑
    在这里插入图片描述

给玩家一个自动回复血量Buffer

  • 创建一个继承自基础技能的回复Buffer技能
    在这里插入图片描述
  • 添加效果
    在这里插入图片描述
  • 设置好技能效果的回复属性
    在这里插入图片描述
  • 激活技能
    在这里插入图片描述
  • 提交技能
    在这里插入图片描述

构建技能信息结构体

  • 创建一个GameplayAbility基类
    在这里插入图片描述
  • 创建技能信息的数据
    在这里插入图片描述
    在这里插入图片描述

获取技能信息与创建技能图标

获取技能详细信息函数

  • 获取技能信息
// Fill out your copyright notice in the Description page of Project Settings.#include "BaseGameplayAbility.h"FGameplayAbilityInfo::FGameplayAbilityInfo():CD(0),CostValue(0),CostType(ECostType::MP),IconMaterial(nullptr),AbilityClass(nullptr)
{}FGameplayAbilityInfo::FGameplayAbilityInfo(float CD, ECostType CostType, float CostValue, UMaterialInstance* IconMaterial, TSubclassOf<UBaseGameplayAbility> AbilityClass):CD(CD),CostType(CostType),CostValue(CostValue),IconMaterial(IconMaterial),AbilityClass(AbilityClass)
{}FGameplayAbilityInfo UBaseGameplayAbility::GetAbilityInfo(int Level)
{//获取与技能冷却相关的游戏效果UGameplayEffect* CDEffect = GetCooldownGameplayEffect();//获取与技能使用成本相关的游戏效果UGameplayEffect* CostEffect = GetCostGameplayEffect();float CD = 0;float CostValue = 0;ECostType CostType = ECostType::MP;if (CDEffect && CostEffect){CDEffect->DurationMagnitude.GetStaticMagnitudeIfPossible(Level, CD);if (CostEffect->Modifiers.Num() > 0){//获取花费的是哪一个类型FGameplayModifierInfo CostEffectModifierInfo = CostEffect->Modifiers[0];CostEffectModifierInfo.ModifierMagnitude.GetStaticMagnitudeIfPossible(Level, CostValue);FString CostTypeName = CostEffectModifierInfo.Attribute.AttributeName;if (CostTypeName == "HP"){CostType = ECostType::HP;}if (CostTypeName == "MP"){CostType = ECostType::MP;}if (CostTypeName == "Strength"){CostType = ECostType::Strength;}//返回技能信息return FGameplayAbilityInfo(CD, CostType, CostValue, IconMaterial, GetClass());}}return FGameplayAbilityInfo();
}

学习技能时就获取技能信息

  • 在基础类里面创建一个学习获取技能信息的函数
    在这里插入图片描述
  • 学习此技能
    在这里插入图片描述

利用结构体信息创建单个技能UI

  • 创建技能的UI
    在这里插入图片描述
  • 设置技能Key与技能初始化
    在这里插入图片描述
  • 设计技能开始CD逻辑
    在这里插入图片描述
  • 更新技能图标的值,当前CD除以总CD因为材质里面的数值问题要取反,然后CD小于0的情况下就回复技能图标,并设置当前技能无CD
    在这里插入图片描述

相关文章:

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System&#xff08;GAS&#xff09; 是一个模块化且强大的框架&#xff0c;用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability&#xff08;定义和执行能力&#xff09;、Gameplay Effect&#xff08;应用和管理…...

Excel:vba实现合并工作表(表头相同)

这个代码应该也适用于一些表头相同的工作表的汇总&#xff0c;只需要修改想要遍历的表&#xff0c;适用于处理大量表头相同的表的合并 这里的汇总合并表 total 是我事先创建的&#xff0c;我觉得比用vba代码创建要容易一下&#xff0c;如果不事先创建汇总表就用下面的代码&…...

Redis:分布式 - 主从复制

Redis&#xff1a;分布式 - 主从复制 概念配置主从模式info replicationslave-read-onlytcp-nodelay 命令slaveof 主从结构一主一从一主多从 主从复制流程数据同步命令全量同步部分同步实时同步 节点晋升 概念 Redis的最佳应用&#xff0c;还是要在分布式系统中。对于非分布式…...

el-date-picker设置只有某些日期可选

示例图&#xff1a; <el-date-pickerv-model"topFormObj.upTime"type"date"value-format"timestamp"format"dd/MM/yyyy":picker-options"pickerOptions" /> 固定限制每周的周末周三不可选 data() {return {pickerOp…...

java数据库操作-cnblog

创建lib目录&#xff0c;填入jar包 选择 libraries添加lib目录 package nb;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCtest {private static final String url "jdbc:mysql://localhost:3306/test?c…...

HCIP-HarmonyOS Application Developer 习题(九)

(多选) 1、HarmonyOS多窗口交互能力提供了以下哪几种交互方式&#xff1f; A. 全局消息通知 B.平行视界 C.悬浮窗 D.分屏 答案&#xff1a;BCD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷的临时任务…...

redis集成到spring boot中使用

&#xff08;一&#xff09;添加依赖 redis服务器在官网中公开了自己使用的协议--RESP&#xff0c;所以我们可以使用这个协议来访问redis服务器&#xff0c;但是如果我们要自己实现库&#xff0c;那肯定是非常麻烦的&#xff0c;所以我们可以使用网上的库&#xff0c;我们直接调…...

Spring Boot、Spring MVC和Spring有什么区别

人要长大&#xff0c;就要学会不断接受事件的变化 —— 24.10.14 spring是一个IOC容器&#xff0c;用来管理Bean&#xff0c;使用依赖注入实现控制反转&#xff0c;可以很方便的整合各种框架&#xff0c;提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理…...

Flip动画

前言 最近在做复图标库功能时&#xff0c;感觉这个功能在使用上有些“生硬”。如随机删除一个图标&#xff0c;后面的元素在视觉上是“瞬间移动”过来补位的。想着做个小优化&#xff0c;简单加个动画效果吧。 看起来确实“花里胡哨”了&#xff0c;实现也很简单&#xff0c; …...

Java通过RAG构建专属知识问答机器人_超详细

RAG&#xff1a;融合检索与生成的文本精准生成技术 检索增强生成&#xff08;RAG&#xff09;是一种技术&#xff0c;它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说&#xff0c;RAG首先利用检索模型从私有或专有的数据源中搜索相关信息&#xff0c;然后将这些…...

2.1 使用点对点信道的数据链路层

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 通信信道类型2 数据链路3 帧4 透明传输5 差错检测 前言 在计算机网络通信中&#xff0c;数据链路层起着关键作用。它为直接相连的网络设备之间提供可靠的数据传输服务。…...

台式机来电自启动设置

在前司时&#xff0c;由于有些工作需要用到台式机&#xff0c;且一到节假日或者突然停电等情况&#xff0c;电脑每次都需要自己手动开机&#xff0c;后来研究了一下&#xff0c;发现可以在BIOS里面更改设置&#xff0c;从而变成关机的情况下&#xff0c;只要来电就能自动开机&a…...

【最新华为OD机试E卷-支持在线评测】考勤信息(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

netdata保姆级面板介绍

netdata保姆级面板介绍 基本介绍部署流程下载安装指令选择设置KSM为什么要启用 KSM&#xff1f;如何启用 KSM&#xff1f;验证 KSM 是否启用注意事项 检查端口启动状态 netdata和grafana的区别NetdataGrafananetdata各指标介绍总览system overview栏仪表盘1. CPU2. Load3. Disk…...

苹果最新论文:LLM只是复杂的模式匹配 而不是真正的逻辑推理

大语言模型真的可以推理吗&#xff1f;LLM 都是“参数匹配大师”&#xff1f;苹果研究员质疑 LLM 推理能力&#xff0c;称其“不堪一击”&#xff01;苹果的研究员 Mehrdad Farajtabar 等人最近发表了一篇论文&#xff0c;对大型语言模型 &#xff08;LLM&#xff09; 的推理能…...

Python知识点:基于Python工具,如何使用Scikit-Image进行图像处理与分析

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 基于Python的Scikit-Image图像处理与分析指南 在Python的科学计算生态系统中&am…...

MongoDB初学者入门教学:与MySQL的对比理解

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…...

Oracle AI Vector Search

Oracle AI Vector Search 是 Oracle Database 23ai 中引入的一项新技术&#xff0c;它允许用户在数据库中直接存储和高效查询向量数据。这项技术旨在简化应用程序的开发&#xff0c;并且支持不同维度和格式的向量。以下是 Oracle AI Vector Search 的一些关键特性和优势&#x…...

基于SpringBoot的健身会员管理系统实战分享

在这个充满活力的时代&#xff0c;我们自豪地呈现一款专为健身爱好者和专业人士设计的会员管理系统——一个集创新、效率与便捷于一体的解决方案。我们的系统基于强大的RuoYi-Vue框架构建&#xff0c;采用最新的Spring Boot和Vue3技术&#xff0c;确保了系统的高性能和用户友好…...

Elasticsearch高级搜索技术-结构化数据搜索

目录 结构化数据的存储 示例映射 使用range查询 查询示例 运算符 更多示例 日期查询 示例 结构化数据搜索是Elasticsearch另一个强大的功能&#xff0c;允许用户对具有明确类型的数据&#xff08;如数字、日期和布尔值&#xff09;进行精确的过滤和查询。这种类型的搜索通常涉及…...

STM32F103C8T6新手必看:SWD、JTAG、串口三种下载方式到底怎么选?

STM32F103C8T6开发入门&#xff1a;SWD、JTAG与串口下载方式深度解析 第一次接触STM32开发板时&#xff0c;面对板子上密密麻麻的接口和文档中提到的各种下载方式&#xff0c;很多新手都会感到迷茫。我清楚地记得自己刚开始学习时&#xff0c;拿着ST-Link调试器却不知道应该连接…...

BurpSuite实战:从代理配置到漏洞扫描的完整工作流解析

1. BurpSuite入门&#xff1a;代理配置与证书安装 第一次打开BurpSuite时&#xff0c;那个黑底红字的启动界面总让我想起黑客电影里的场景。不过别被吓到&#xff0c;这其实是个非常友好的Web安全测试工具。我刚开始用的时候&#xff0c;最头疼的就是代理配置问题。这里分享下…...

仅限本周开放|DeepSeek Chat V3.2功能测试黄金 checklist(含17个边界Case+响应时延基线数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Chat V3.2功能测试黄金 checklist 发布说明 DeepSeek Chat V3.2 已正式面向开发者开放灰度测试&#xff0c;本次版本聚焦多模态理解增强、长上下文稳定性优化及企业级安全策略集成。为保障测试…...

Ryujinx模拟器三部曲:从新手到专家的Switch游戏PC体验进阶指南

Ryujinx模拟器三部曲&#xff1a;从新手到专家的Switch游戏PC体验进阶指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾梦想在电脑上畅玩《塞尔达传说&#xff1a;旷野之息…...

Kubernetes二进制文件管理工具:自动化安装与多版本切换实践

1. 项目概述与核心价值在云原生和容器化技术成为主流的今天&#xff0c;Kubernetes 无疑是这个领域的基石。无论是开发、测试还是生产环境&#xff0c;我们都需要一套稳定、可靠的 Kubernetes 集群。然而&#xff0c;对于很多开发者、运维工程师&#xff0c;甚至是刚开始接触云…...

Circuit Playground开发板入门:从零到一玩转集成传感器与Arduino编程

1. 项目概述与核心价值如果你对电子制作和编程感兴趣&#xff0c;但一看到复杂的电路图和密密麻麻的代码就头疼&#xff0c;那么Circuit Playground可能就是为你量身打造的“入场券”。它不是一个需要你从零焊接电阻、电容的散件包&#xff0c;而是一块将所有常用传感器和交互元…...

040二叉树的直径

二叉树的直径 题目链接&#xff1a;https://leetcode.cn/problems/diameter-of-binary-tree/description/?envTypestudy-plan-v2&envIdtop-100-liked 我的解答&#xff1a; 无分析&#xff1a;自己没有什么思路。 看了官方题解后的解答&#xff1a; int ans; public int d…...

技术Leader的“预期管理”艺术:承诺80分,交付100分

在软件测试领域&#xff0c;我们擅长用技术手段管理缺陷、管理风险&#xff0c;却常常忽略一项更重要的软技能——管理上级的预期。许多测试Leader带着一身硬本领走上管理岗位&#xff0c;却在“预期差”上栽了跟头&#xff1a;明明团队加班加点测出了所有P0级缺陷&#xff0c;…...

眉山奶油风家具的实际使用效果如何?奶油风家具

测评主体公示本次测评将对以下品牌进行对比&#xff1a;唯品名居家居、顾家家居、芝华仕、左右沙发、全友家居。所有品牌的测评将遵循统一标准&#xff0c;包括测评维度、动作、环境和数据采集方法。测评维度与标准1. 材质质量动作&#xff1a;检查家具表面材质、内部结构 过程…...

Cursor插件开发实战:基于LSP与静态分析的代码导航增强

1. 项目概述&#xff1a;一个为开发者“减负”的Cursor插件如果你和我一样&#xff0c;日常开发重度依赖Cursor这款AI驱动的代码编辑器&#xff0c;那你肯定也经历过这样的时刻&#xff1a;面对一个陌生的代码库&#xff0c;想快速了解某个函数、类或者变量的定义位置&#xff…...