文章目录

  • 添加技能需要的东西
    • 添加本地播放GC
    • 添加冲刺tag
    • 添加一个新的TA用于检测敌方单位
  • 添加冲刺GA
    • 到角色中监听加速移动速度的回调
    • 创建蒙太奇
    • 添加GE
    • 添加到数据表中
    • 添加到角色中
  • 纠错


添加技能需要的东西

添加本地播放GC

UCAbilitySystemStatics中添加

	/*** 在本地触发指定的游戏提示效果(如技能特效、攻击反馈等)* * @param CueTargetActor 触发游戏提示的目标Actor(如角色、技能释放者)* @param HitResult 包含命中位置、法线等碰撞信息的结果对象* @param GameplayCueTag 标识游戏提示类型的GameplayTag(如"Ability.Attack.Basic")*/static void SendLocalGameplayCue(AActor* CueTargetActor, const FHitResult& HitResult, const FGameplayTag& GameplayCueTag);
void UCAbilitySystemStatics::SendLocalGameplayCue(AActor* CueTargetActor, const FHitResult& HitResult,const FGameplayTag& GameplayCueTag)
{FGameplayCueParameters CueParams;CueParams.Location = HitResult.ImpactPoint;CueParams.Normal = HitResult.ImpactNormal;UAbilitySystemGlobals::Get().GetGameplayCueManager()->HandleGameplayCue(CueTargetActor, GameplayCueTag, EGameplayCueEvent::Executed, CueParams);
}

添加冲刺tag

	// 冲刺CRUNCH_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Dash)CRUNCH_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Dash_Start)CRUNCH_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Dash_Cooldown)
	UE_DEFINE_GAMEPLAY_TAG_COMMENT(Ability_Dash, "Ability.Dash", "冲刺技能")UE_DEFINE_GAMEPLAY_TAG_COMMENT(Ability_Dash_Start, "Ability.Dash.Start", "冲刺技能开始")UE_DEFINE_GAMEPLAY_TAG_COMMENT(Ability_Dash_Cooldown, "Ability.Dash.Cooldown", "冲刺技能冷却")

添加一个新的TA用于检测敌方单位

TargetActor_Around
在这里插入图片描述

#pragma once#include "CoreMinimal.h"
#include "GenericTeamAgentInterface.h"
#include "Abilities/GameplayAbilityTargetActor.h"
#include "TargetActor_Around.generated.h"class USphereComponent;
/*** 圆形范围目标检测器,用于检测角色周围的敌对目标* 实现队伍关系接口(IGenericTeamAgentInterface)用于敌我识别*/
UCLASS()
class ATargetActor_Around : public AGameplayAbilityTargetActor, public IGenericTeamAgentInterface
{GENERATED_BODY()
public:ATargetActor_Around();// 配置检测参数:检测半径、队伍ID和本地视觉提示标签void ConfigureDetection(float DetectionRadius, const FGenericTeamId& InTeamId, const FGameplayTag& InLocalGameplayCueTag);/** 实现IGenericTeamAgentInterface接口 - 设置队伍ID */virtual void SetGenericTeamId(const FGenericTeamId& NewTeamID) override;/** 实现IGenericTeamAgentInterface接口 - 获取队伍ID */FORCEINLINE virtual FGenericTeamId GetGenericTeamId() const override { return TeamId; }/** 网络属性复制 */virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;private:UPROPERTY(Replicated)FGenericTeamId TeamId; // 当前检测器的队伍ID(用于敌我识别)// 根组件(用于位置定位)UPROPERTY(VisibleDefaultsOnly, Category = "Comp")TObjectPtr<USceneComponent> RootComp;// 球形碰撞体(用于范围检测)UPROPERTY(VisibleDefaultsOnly, Category = "Targeting")TObjectPtr<USphereComponent> DetectionSphere;// 检测半径(网络同步)UPROPERTY(ReplicatedUsing = OnRep_TargetDetectionRadiusReplicated)float TargetDetectionRadius;// 检测半径复制回调(客户端同步时更新碰撞体大小)UFUNCTION()void OnRep_TargetDetectionRadiusReplicated();// 本地视觉提示标签(命中目标时播放的视觉效果)UPROPERTY(Replicated)FGameplayTag LocalGameplayCueTag;// 碰撞体进入检测范围时的回调UFUNCTION()void ActorInDetectionRange(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult);
};
#include "TargetActor_Around.h"#include "Abilities/GameplayAbility.h"
#include "Components/SphereComponent.h"
#include "GAS/Core/CAbilitySystemStatics.h"
#include "Net/UnrealNetwork.h"// Sets default values
ATargetActor_Around::ATargetActor_Around()
{PrimaryActorTick.bCanEverTick = true;// 网络设置:在服务器和客户端同步bReplicates = true;// 重要:确保服务器能产生目标数据ShouldProduceTargetDataOnServer = true;// 创建根组件RootComp = CreateDefaultSubobject<USceneComponent>("Root Comp");SetRootComponent(RootComp);// 创建球形碰撞体用于范围检测DetectionSphere = CreateDefaultSubobject<USphereComponent>("Detection Sphere");DetectionSphere->SetupAttachment(GetRootComponent());// 配置碰撞设置:只检测Pawn类型的重叠DetectionSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);DetectionSphere->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);// 绑定重叠开始事件回调DetectionSphere->OnComponentBeginOverlap.AddDynamic(this, &ATargetActor_Around::ActorInDetectionRange);}void ATargetActor_Around::ConfigureDetection(float DetectionRadius, const FGenericTeamId& InTeamId,const FGameplayTag& InLocalGameplayCueTag)
{// 设置队伍关系SetGenericTeamId(InTeamId);// 更新碰撞体大小DetectionSphere->SetSphereRadius(DetectionRadius);// 同步到网络变量TargetDetectionRadius = DetectionRadius;// 设置视觉提示标签LocalGameplayCueTag = InLocalGameplayCueTag;
}void ATargetActor_Around::SetGenericTeamId(const FGenericTeamId& NewTeamID)
{TeamId = NewTeamID;
}void ATargetActor_Around::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{Super::GetLifetimeReplicatedProps(OutLifetimeProps);// 注册需要网络同步的属性DOREPLIFETIME(ATargetActor_Around, TeamId);					// 队伍IDDOREPLIFETIME(ATargetActor_Around, LocalGameplayCueTag);	// 视觉标签DOREPLIFETIME(ATargetActor_Around, TargetDetectionRadius);	// 检测半径
}void ATargetActor_Around::OnRep_TargetDetectionRadiusReplicated()
{// 客户端收到半径更新时,同步更新碰撞体大小DetectionSphere->SetSphereRadius(TargetDetectionRadius);
}void ATargetActor_Around::ActorInDetectionRange(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{// 忽略无效Actorif (!OtherActor) return;// 获取能力拥有者(避免检测到自己)AActor* AvatarActor = nullptr;if (OwningAbility){AvatarActor = OwningAbility->GetAvatarActorFromActorInfo();}// 忽略自身和拥有者if (OtherActor == AvatarActor) return;if (OtherActor == this) return;// 队伍关系检查:只处理敌对目标if (GetTeamAttitudeTowards(*OtherActor) != ETeamAttitude::Hostile) return;// 服务器处理目标数据if (HasAuthority()){// 构建目标数据FGameplayAbilityTargetDataHandle TargetDataHandle;FGameplayAbilityTargetData_ActorArray* ActorArray = new FGameplayAbilityTargetData_ActorArray;ActorArray->SetActors(TArray<TWeakObjectPtr<AActor>>{OtherActor});TargetDataHandle.Add(ActorArray);// 通知能力系统目标已就绪TargetDataReadyDelegate.Broadcast(TargetDataHandle);}// 播放GC特效FHitResult HitResult;HitResult.ImpactPoint = OtherActor->GetActorLocation();  // 命中点为目标位置HitResult.ImpactNormal = (OtherActor->GetActorLocation() - GetActorLocation()).GetSafeNormal(); // 命中方向UCAbilitySystemStatics::SendLocalGameplayCue(OtherActor, HitResult, LocalGameplayCueTag);
}

添加冲刺GA

GA_Dash
在这里插入图片描述

#pragma once#include "CoreMinimal.h"
#include "GAS/Core/CGameplayAbility.h"
#include "GA_Dash.generated.h"class UCharacterMovementComponent;
/*** 冲刺能力类,使角色能够向目标方向冲刺并对路径上的敌人造成伤害*/
UCLASS()
class CRUNCH_API UGA_Dash : public UCGameplayAbility
{GENERATED_BODY()
public:// 激活能力时调用virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) override;// 结束能力时调用virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override;private:// 冲刺动作的动画蒙太奇UPROPERTY(EditDefaultsOnly, Category = "Anim")TObjectPtr<UAnimMontage> DashMontage;// 目标检测半径(单位:厘米)UPROPERTY(EditDefaultsOnly, Category = "Targeting")float TargetDetectionRadius = 300.f;// 本地游戏提示标签(用于视觉效果)UPROPERTY(EditDefaultsOnly, Category = "GameplayCue")FGameplayTag LocalGameplayCueTag;// 目标检测器附加的骨骼名称UPROPERTY(EditDefaultsOnly, Category = "Targeting")FName TargetActorAttachSocketName = "TargetDashCenter";// 目标检测器类(圆形范围检测)UPROPERTY(EditDefaultsOnly, Category = "Targeting")TSubclassOf<class ATargetActor_Around> TargetActorClass;// 命中目标后的击退速度UPROPERTY(EditDefaultsOnly, Category = "Effects")float TargetHitPushSpeed = 3000.f;// 命中目标时应用的伤害效果UPROPERTY(EditDefaultsOnly, Category = "Effects")FGenericDamageEffectDef DamageEffect;// 冲刺过程中应用的持续效果UPROPERTY(EditDefaultsOnly, Category = "Effects")TSubclassOf<UGameplayEffect> DashEffect;// 当前激活的冲刺效果句柄FActiveGameplayEffectHandle DashEffectHandle;// 推动角色前进的定时器句柄FTimerHandle PushForwardInputTimerHandle;// 推动角色沿当前方向前进void PushForward();// 缓存角色移动组件UPROPERTY()TObjectPtr<UCharacterMovementComponent> OwnerCharacterMovementComponent;// 动画事件触发时开始冲刺逻辑UFUNCTION()void StartDash(FGameplayEventData Payload);// 目标检测完成回调UFUNCTION()void TargetReceived(const FGameplayAbilityTargetDataHandle& TargetDataHandle);
};
#include "GA_Dash.h"#include "AbilitySystemComponent.h"
#include "Abilities/Tasks/AbilityTask_PlayMontageAndWait.h"
#include "Abilities/Tasks/AbilityTask_WaitGameplayEvent.h"
#include "Abilities/Tasks/AbilityTask_WaitTargetData.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "GAS/TA/TargetActor_Around.h"void UGA_Dash::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo,const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData)
{// 检查能力是否可提交(资源消耗等)和动画是否有效if (!K2_CommitAbility() || !DashMontage){// 条件不满足则立即结束能力K2_EndAbility();return;}// 确保在服务端或预测有效时执行if (HasAuthorityOrPredictionKey(ActorInfo, &ActivationInfo)){// 创建并播放冲刺动画蒙太奇UAbilityTask_PlayMontageAndWait* PlayDashMontage = UAbilityTask_PlayMontageAndWait::CreatePlayMontageAndWaitProxy(this, NAME_None, DashMontage);// 绑定动画结束/中断事件到能力结束PlayDashMontage->OnBlendOut.AddDynamic(this, &UGA_Dash::K2_EndAbility);PlayDashMontage->OnCancelled.AddDynamic(this, &UGA_Dash::K2_EndAbility);PlayDashMontage->OnInterrupted.AddDynamic(this, &UGA_Dash::K2_EndAbility);PlayDashMontage->OnCompleted.AddDynamic(this, &UGA_Dash::K2_EndAbility);PlayDashMontage->ReadyForActivation();// 等待动画中的冲刺开始事件UAbilityTask_WaitGameplayEvent* WaitDashStartEvent = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, TGameplayTags::Ability_Dash_Start);WaitDashStartEvent->EventReceived.AddDynamic(this, &UGA_Dash::StartDash);WaitDashStartEvent->ReadyForActivation();}
}void UGA_Dash::EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo,const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled)
{// 获取能力系统组件UAbilitySystemComponent* OwnerAbilitySystemComponent = GetAbilitySystemComponentFromActorInfo();// 移除冲刺效果if (OwnerAbilitySystemComponent && DashEffectHandle.IsValid()){OwnerAbilitySystemComponent->RemoveActiveGameplayEffect(DashEffectHandle);}// 清除推进定时器if (PushForwardInputTimerHandle.IsValid()){GetWorld()->GetTimerManager().ClearTimer(PushForwardInputTimerHandle);}Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
}void UGA_Dash::PushForward()
{// 如果存在移动组件,则沿角色前方持续推动if (OwnerCharacterMovementComponent){// 获取角色前方向量FVector ForwardActor = GetAvatarActorFromActorInfo()->GetActorForwardVector();// 添加移动输入OwnerCharacterMovementComponent->AddInputVector(ForwardActor);// 设置下一帧继续推动(循环递归调用)PushForwardInputTimerHandle = GetWorld()->GetTimerManager().SetTimerForNextTick(this, &UGA_Dash::PushForward);}
}void UGA_Dash::StartDash(FGameplayEventData Payload)
{// 在服务端应用冲刺效果if (K2_HasAuthority()){if (DashEffect){DashEffectHandle = BP_ApplyGameplayEffectToOwner(DashEffect, GetAbilityLevel(CurrentSpecHandle, CurrentActorInfo));}}// 本地控制角色:启动连续推进if (IsLocallyControlled()){// 缓存移动组件OwnerCharacterMovementComponent = GetAvatarActorFromActorInfo()->GetComponentByClass<UCharacterMovementComponent>();// 启动推进循环PushForwardInputTimerHandle = GetWorld()->GetTimerManager().SetTimerForNextTick(this, &UGA_Dash::PushForward);}// 创建目标检测任务UAbilityTask_WaitTargetData* WaitTargetData = UAbilityTask_WaitTargetData::WaitTargetData(this, NAME_None, EGameplayTargetingConfirmation::CustomMulti,  // 自定义确认方式TargetActorClass);// 绑定目标检测完成回调WaitTargetData->ValidData.AddDynamic(this, &UGA_Dash::TargetReceived);WaitTargetData->ReadyForActivation();// 生成目标检测器AGameplayAbilityTargetActor* TargetActor;WaitTargetData->BeginSpawningActor(this, TargetActorClass, TargetActor);// 配置目标检测器ATargetActor_Around* TargetActorAround = Cast<ATargetActor_Around>(TargetActor);if (TargetActorAround){// 设置检测半径、队伍过滤和视觉提示TargetActorAround->ConfigureDetection(TargetDetectionRadius, GetOwnerTeamId(), LocalGameplayCueTag);}// 完成生成WaitTargetData->FinishSpawningActor(this, TargetActor);// 将检测器附加到角色骨骼if (TargetActorAround){TargetActorAround->AttachToComponent(GetOwningComponentFromActorInfo(), FAttachmentTransformRules::SnapToTargetNotIncludingScale, TargetActorAttachSocketName);}
}void UGA_Dash::TargetReceived(const FGameplayAbilityTargetDataHandle& TargetDataHandle)
{// 服务端处理:对目标应用效果if (K2_HasAuthority()){// 应用伤害效果ApplyDamageToTargetDataHandle(TargetDataHandle, DamageEffect, GetAbilityLevel(CurrentSpecHandle, CurrentActorInfo));// 击退目标PushTargetsFromOwnerLocation(TargetDataHandle, TargetHitPushSpeed);}
}

到角色中监听加速移动速度的回调

	// 加速移动速度改变回调void MoveSpeedAccelerationUpdated(const FOnAttributeChangeData& Data);
void ACCharacter::BindGASChangeDelegates()
{if (CAbilitySystemComponent){CAbilitySystemComponent->RegisterGameplayTagEvent(TGameplayTags::Stats_Dead).AddUObject(this, &ACCharacter::DeathTagUpdated);CAbilitySystemComponent->RegisterGameplayTagEvent(TGameplayTags::Stats_Stun).AddUObject(this, &ACCharacter::StunTagUpdated);CAbilitySystemComponent->RegisterGameplayTagEvent(TGameplayTags::Stats_Aim).AddUObject(this, &ACCharacter::AimTagUpdated);CAbilitySystemComponent->RegisterGameplayTagEvent(TGameplayTags::Stats_Focus).AddUObject(this, &ACCharacter::FocusTagUpdated);CAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(CAttributeSet->GetMoveSpeedAttribute()).AddUObject(this, &ACCharacter::MoveSpeedUpdated);CAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCAttributeSet::GetMaxHealthAttribute()).AddUObject(this, &ACCharacter::MaxHealthUpdated);CAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCAttributeSet::GetMaxManaAttribute()).AddUObject(this, &ACCharacter::MaxManaUpdated);CAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCAttributeSet::GetMoveAccelerationAttribute()).AddUObject(this, &ACCharacter::MoveSpeedAccelerationUpdated);}
}void ACCharacter::MoveSpeedAccelerationUpdated(const FOnAttributeChangeData& Data)
{GetCharacterMovement()->MaxAcceleration = Data.NewValue;
}

创建蒙太奇

为其添加一个插槽,用来塞一个TA进去
在这里插入图片描述

添加GE

冲刺的GE
在这里插入图片描述
冷却GE
在这里插入图片描述
伤害GE
在这里插入图片描述
在这里插入图片描述

成本GE
在这里插入图片描述
再创建一个TA塞进去
在这里插入图片描述

添加到数据表中

在这里插入图片描述

添加到角色中

在这里插入图片描述

纠错

这个时候就会又bro发出疑问了,为什么放了冲刺技能后我不能动了呢
因为我们一开始的时候那个加速度没有给他初始化导致的
在这里插入图片描述
那只能创建一个GE来应用一个初始的Value,免得这个无限效果消失的时候变成了默认的0蛋
在这里插入图片描述
角色中的加速度是2048,那我直接应用一个2048吧
在这里插入图片描述
在这里插入图片描述
随后放进英雄资产里等他自己初始化吧
在这里插入图片描述
然后就可以开冲了
在这里插入图片描述

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

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

相关文章

分库分表和sql的进阶用法总结

说下你对分库分表的理解分库分表是⼀种常⽤的数据库⽔平扩展&#xff08;Scale Out&#xff09;技术&#xff0c;⽤于解决单⼀数据库性能瓶颈和存储容量限制的问题。在分库分表中&#xff0c;数据库会根据某种规则将数据分散存储在多个数据库实例和表中&#xff0c;从⽽提⾼数据…

紫金桥RealSCADA:国产工业大脑,智造安全基石

在工业4.0时代&#xff0c;数字化转型已成为企业提升竞争力的核心路径。作为工业信息化的基石&#xff0c;监控组态软件在智能制造、物联网、大数据等领域发挥着关键作用。紫金桥软件积极响应国家“两化融合”战略&#xff0c;依托多年技术积淀与行业经验&#xff0c;重磅推出跨…

朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力

近日&#xff0c;苏州朗空后量子科技有限公司&#xff08;以下简称“朗空量子”&#xff09;签署了 CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09;&#xff0c;加入龙蜥社区&#xff08;OpenAnolis&#xff09;。 朗空量子是一家后量子…

C#WPF实战出真汁08--【消费开单】--餐桌面板展示

1、功能介绍在这节里&#xff0c;需要实现餐桌类型展示&#xff0c;类型点击切换事件&#xff0c;餐桌面板展示功能&#xff0c;细节很多&#xff0c;流程是UI设计布局-》后台业务逻辑-》视图模型绑定-》运行测试2、UI设计布局TabControl&#xff0c;StackPanel&#xff0c;Gri…

2025年机械制造、机器人与计算机工程国际会议(MMRCE 2025)

&#x1f916;&#x1f3ed;&#x1f4bb; 探索未来&#xff1a;机械制造、机器人与计算机工程的交汇点——2025年机械制造、机器人与计算机工程国际会议&#x1f31f;MMRCE 2025将汇聚全球顶尖专家、学者及行业领袖&#xff0c;聚焦机械制造、机器人和计算机工程领域的前沿议题…

Vue Router 嵌套路由与布局系统详解:从新手到精通

在Vue单页应用开发中&#xff0c;理解Vue Router的嵌套路由机制是构建现代管理后台的关键。本文将通过实际案例&#xff0c;深入浅出地解释Vue Router如何实现布局与内容的分离&#xff0c;以及<router-view>的嵌套渲染原理。什么是嵌套路由&#xff1f;嵌套路由是Vue Ro…

Grafana 与 InfluxDB 可视化深度集成(二)

四、案例实操&#xff1a;以服务器性能监控为例 4.1 模拟数据生成 为了更直观地展示 Grafana 与 InfluxDB 的集成效果&#xff0c;我们通过 Python 脚本模拟生成服务器性能相关的时间序列数据。以下是一个简单的 Python 脚本示例&#xff0c;用于生成 CPU 使用率和内存使用量…

.net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统

# 印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统 # 开发背景 本软件原为给苏州某企业开发的pcb ERP管理软件&#xff0c;后来在2021年深圳某pcb 板材公司买了我们的软件然后在此基础上按他行业的需求多次修改后的软件&#xff0c;适合pcb板材行业使用。 # 功能…

基于飞算JavaAI的可视化数据分析集成系统项目实践:从需求到落地的全流程解析

引言&#xff1a;为什么需要“可视化AI”的数据分析系统&#xff1f; 在数字化转型浪潮中&#xff0c;企业/团队每天产生海量数据&#xff08;如用户行为日志、销售记录、设备传感器数据等&#xff09;&#xff0c;但传统数据分析存在三大痛点&#xff1a; 技术门槛高&#xff…

MqSQL中的《快照读》和《当前读》

目录 1、MySQL读取定义 1.1、锁的分类 1.2、快照读与当前读 1.3、使用场景 1.4、区别 2、实现机制 2.1、实现原理 2.2、隔离级别和快照联系 1、隔离级别 2、快照读 2.3、快照何时生成 3、SQL场景实现 3.1、快照读 3.2、当前读 4、锁的细节&#xff08;与当前读相…

【Docker项目实战】使用Docker部署Notepad轻量级记事本

【Docker项目实战】使用Docker部署Notepad轻量级记事本一、 Notepad介绍1.1 Notepad简介1.2 Notepad特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Note…

开疆智能ModbusTCP转Ethernet网关连接FBOX串口服务器配置案例

本案例是串口服务器通过串口采集第三方设备数据转成ModbusTCP的服务器后欧姆龙PLC通过Ethernet连接到网关&#xff0c;读取采集到的数据。具体配置过程如下。配置过程&#xff1a;Fbox做从站FBox采集PLC数据&#xff0c;通过Modbus TCP Server/Modbus RTU Server协议配置地址映…

Vue中的数据渲染【4】

目录1.页面样式绑定&#xff1a;1.概述&#xff1a; 2.绑定方式&#xff1a;1.通过类名绑定&#xff1a;1.通过动态类名绑定&#xff1a;&#xff08;&#xff1a;class&#xff09;2.通过类名数组绑定&#xff1a;3.通过类名对象进行绑定&#xff1a;2.内联样式绑定&#xff1…

LeeCode 39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果…

基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程

该教程详细阐述了在Windows Server 2022上基于Python3.10.6与jieba库实现并部署中文分词模型接口的完整流程&#xff0c;涵盖技术栈&#xff08;Python3.10.6、jieba、Flask、Waitress、Nginx、NSSM等&#xff09;与环境准备&#xff08;Python安装、虚拟环境配置、依赖包安装及…

java基础(九)sql基础及索引

一、NoSQL 和 SQL 数据库的区别1. 基本概念SQL 数据库&#xff08;关系型数据库&#xff09; 代表产品&#xff1a;SQL Server, Oracle, MySQL (开源), PostgreSQL (开源)。 存储方式&#xff1a;结构化数据&#xff0c;逻辑上以二维表&#xff08;行 & 列&#xff09;形式…

ffmpeg-调整视频分辨率

ffmpeg -i input.mp4 -vf scale1280:720 output_1280x720.mp4-i input.mp4: 指定输入视频文件。-vf scale1280:720: 使用 scale 视频滤镜&#xff0c;将视频宽度设置为 1280 像素&#xff0c;高度设置为 720 像素。output_1280x720.mp4: 指定输出视频文件。 16&#xff1a;9 常…

前端vue3+后端spring boot导出数据

有个项目需要提供数据导出功能。 该项目前端用vue3编写&#xff0c;后端是spring boot 2&#xff0c;数据库是mysql8。 工作流程是&#xff1a;1&#xff09;前端请求数据导出 2&#xff09;后端接到请求后&#xff0c;开启一个数据导出线程&#xff0c;然后立刻返回信息到前端…

基于RK3588的微电网协调控制器:实现分布式能源的智能调控与优化运行

微电网协调控制器方案通过集成先进算法和实时数据技术&#xff0c;实现分布式能源的光伏、储能、风电等设备的智能协调与优化运行‌12。关键功能包括&#xff1a;‌协同优化调度‌&#xff1a;采用模型预测控制&#xff08;MPC&#xff09;动态调整光伏出力、储能充放电策略和负…

机器学习——TF-IDF文本特征提取评估权重 + Jieba 库进行分词(以《红楼梦》为例)

使用 Jieba 库进行 TF-IDF 关键词提取&#xff08;以《红楼梦》为例&#xff09;在中文文本分析中&#xff0c;TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09; 是最常用的关键词提取方法之一。它通过评估词在单个文档中的出现频率和在所有文档中的…