UE5多人MOBA+GAS 45、制作沖刺技能

文章目錄

  • 添加技能需要的東西
    • 添加本地播放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; 是最常用的關鍵詞提取方法之一。它通過評估詞在單個文檔中的出現頻率和在所有文檔中的…