初学UE5 C++②

目录

导入csv表格数据

创建、实例化、结构体

GameInstance

Actor

camera

绑定滚轮控制摇臂移动

碰撞绑定

角色碰撞设定 

按钮

UI显示 

单播代理

多播和动态多播

写一个接口

其他

 NewObject 和 CreateDefaultSubobject区别


导入csv表格数据

创建一个object的C++类

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "CharacterMsgObject.generated.h"USTRUCT(BlueprintType)
struct class CharacterMSG:public FTableRowBase {GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="CharacterMsg")FString Name;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="CharacterMsg")float Health;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="CharacterMsg")int32 Level;
}
UCLASS()
class CPDD1_API UCharacterMsgObject : public UObject
{GENERATED_BODY()};

编译生成

做一个csv表格,对应结构体的元素

 拖拽csv到UE5中

导入时选中上述创建的结构体

创建、实例化、结构体

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Engine/Classes/Engine/DataTable.h"
#include "UObject/NoExportTypes.h"
#include "CharacterMsgObject.generated.h"USTRUCT(BlueprintType)
struct FCharacterMSG :public FTableRowBase 
{GENERATED_USTRUCT_BODY()FCharacterMSG();//略UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CharacterMsg")FString Name;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CharacterMsg")float Health;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CharacterMsg")int32 Level;};
UCLASS()
class CPDD1_API UCharacterMsgObject : public UObject
{GENERATED_BODY()
public:FCharacterMSG CMSG;//供实体类调用
};
	//创建实例UCharacterMsgObject* MyTestMSGObject;
	MyTestMSGObject = NewObject<UCharacterMsgObject>(GetWorld(), UCharacterMsgObject::StaticClass());if (MyTestMSGObject) {UE_LOG(LogTemp, Warning, TEXT("MyObject is %s"), *MyTestMSGObject->GetName());UE_LOG(LogTemp, Warning, TEXT("NAME is %s"), *MyTestMSGObject->CMSG.Name);UE_LOG(LogTemp, Warning, TEXT("HEALTH is %f"), MyTestMSGObject->CMSG.Health);UE_LOG(LogTemp, Warning, TEXT("LEVEL is %d"), MyTestMSGObject->CMSG.Level);}

GameInstance

UMyGameInstance* MyGameInstance;MyGameInstance = Cast<UMyGameInstance>(GetWorld()->GetFirstPlayerController()->GetGameInstance());

应用游戏实例类 

Actor

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Components/SceneComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Components/BoxComponent.h"
#include "Particles/ParticleSystemComponent.h"
#include "Components/AudioComponent.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"UCLASS()
class CPDD1_API AMyActor : public AActor
{GENERATED_BODY()public:	// Sets default values for this actor's propertiesAMyActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:	// Called every framevirtual void Tick(float DeltaTime) override;UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class USceneComponent* MyScene;UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class UStaticMeshComponent* MyMesh;UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class UParticleSystemComponent* MyParticle;UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class UBoxComponent* MyBox;UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class UAudioComponent* MyAudio;};
AMyActor::AMyActor()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;MyScene = CreateDefaultSubobject<USceneComponent>(TEXT("MyCustomScene"));MyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyCustomScene"));MyParticle = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("MyCustomParticleSystem"));MyBox = CreateDefaultSubobject<UBoxComponent>(TEXT("MyCustomBox"));MyAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("MyCustomAudio"));RootComponent = MyScene;MyMesh->SetupAttachment(MyScene);MyParticle->SetupAttachment(MyScene);MyBox->SetupAttachment(MyScene);MyAudio->SetupAttachment(MyBox);
}

静态加载类,要加   “_C”

camera

UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category="MySceneComponent")USceneComponent* MyRoot;
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category="MySceneComponent")USpringArmComponent* MySpringArm;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")UCameraComponent* MyCamera;
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;MyRoot = CreateDefaultSubobject<USceneComponent>(TEXT("MyRoot"));MySpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("MySpringArm"));MyCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("MyCamera"));RootComponent = MyRoot;MySpringArm->SetupAttachment(MyRoot);MyCamera->SetupAttachment(MySpringArm);MySpringArm->bDoCollisionTest = false;

绑定滚轮控制摇臂移动

#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "SPlayerController.generated.h"/*** */
UCLASS()
class CPDD1_API ASPlayerController : public APlayerController
{GENERATED_BODY()
public:virtual void SetupInputComponent();void WheelUpFunction();void WheelDownFunction();
};

 绑定键在UE5输入中设置

因为这里的Pawn和Controller都设置为当前gamemode的角色,所有getPawn会锁到当前操控者的Pawn。

#include "SPlayerController.h"
#include "MyPawn.h"void ASPlayerController::SetupInputComponent()
{Super::SetupInputComponent();InputComponent->BindAction("WheelUp", IE_Pressed, this, &ASPlayerController::WheelUpFunction);InputComponent->BindAction("WheelDown", IE_Pressed, this, &ASPlayerController::WheelDownFunction);
}void ASPlayerController::WheelUpFunction()
{if (GetPawn()) {AMyPawn* pawn1= Cast<AMyPawn>(GetPawn());pawn1->Zoom(1,1);}
}void ASPlayerController::WheelDownFunction()
{if (GetPawn()) {AMyPawn* pawn1 = Cast<AMyPawn>(GetPawn());pawn1->Zoom(-1, 1);}
}
void AMyPawn::Zoom(float Direction, float Speed)
{float temp = MySpringArm->TargetArmLength - Direction * Speed * 10;if (temp > 2000.f || temp < 500.f)MySpringArm->TargetArmLength = temp;
}

 

碰撞绑定

	UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="MySceneComponent")class UBoxComponent* MyBox;
	MyBox->OnComponentBeginOverlap.AddDynamic(this, &AMyActor::BeginOverlapFunction);MyBox->OnComponentEndOverlap.AddDynamic(this, &AMyActor::EndOverlapFunction);MyBox->OnComponentHit.AddDynamic(this, &AMyActor::OnComponentHitFunction);

绑定函数的参数从何而来?

 

-转到定义

再转到定义

找到同义的参数,看数字,如果是six,就把该函数后6位复制过来,绑定函数的参数括号内,去掉定义类型和变量名之间的逗号即可。

	UFUNCTION()void BeginOverlapFunction(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);UFUNCTION()void EndOverlapFunction(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);UFUNCTION()void OnComponentHitFunction(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);

角色碰撞设定 

	//碰撞设置MyBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);MyBox->SetCollisionEnabled(ECollisionEnabled::QueryOnly);MyBox->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);MyBox->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);MyBox->SetCollisionEnabled(ECollisionEnabled::ProbeOnly);MyBox->SetCollisionEnabled(ECollisionEnabled::QueryAndProbe);//碰撞对象类型MyBox->SetCollisionObjectType(ECC_WorldDynamic);MyBox->SetCollisionObjectType(ECC_WorldStatic);MyBox->SetCollisionObjectType(ECC_Pawn);MyBox->SetCollisionObjectType(ECC_PhysicsBody);MyBox->SetCollisionObjectType(ECC_Vehicle);MyBox->SetCollisionObjectType(ECC_Destructible);//碰撞响应MyBox->SetCollisionResponseToAllChannels(ECR_Block);MyBox->SetCollisionResponseToAllChannels(ECR_Overlap);MyBox->SetCollisionResponseToAllChannels(ECR_Ignore);MyBox->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);//pawn允许重叠MyBox->SetCollisionResponseToChannel(ECC_WorldStatic,ECR_Block);//世界静态阻挡MyBox->SetCollisionResponseToChannel(ECC_WorldDynamic,ECR_Ignore);//世界动态忽略MyBox->SetBoxExtent(FVector(64, 64, 64));

按钮

绑定事件绑定函数时不用加括号

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Components/Button.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"UCLASS()
class CPDD1_API UMyUserWidget : public UUserWidget
{GENERATED_BODY()
public:UPROPERTY(meta=(BindWidget))//UI控件创建的按钮名称和声明名称相同UButton *ButtonStart;UPROPERTY(meta=(BindWidget))UButton* ButtonQuit;UFUNCTION()void Start();UFUNCTION()void Quit();virtual bool Initialize()override;//重写组件初始化函数UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyHealth")float CurrentHealth=100.f;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyHealth")float MaxHealth = 100.f;UFUNCTION()void UpdateHealth();
};
#include "MyUserWidget.h"bool UMyUserWidget::Initialize()
{if(!Super::Initialize())return false;ButtonStart->OnClicked.AddDynamic(this, &UMyUserWidget::Start);ButtonQuit->OnClicked.AddDynamic(this,&UMyUserWidget::Quit);return true;
}void UMyUserWidget::UpdateHealth()
{if (CurrentHealth <= 0) {GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Death"));}else {CurrentHealth -= 30;}
}void UMyUserWidget::Start()
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Start"));UpdateHealth();
}void UMyUserWidget::Quit()
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Quit"));
}

UI显示 

在游戏模式的控制器脚本的开始运行函数中,

根据资源路径加载类,并创建该类的实例作为“提升为变量”的接盘。

void ASPlayerController::BeginPlay()
{Super::BeginPlay();UClass* widgetClass = LoadClass<UMyUserWidget>(NULL, TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/HbtScripts/MyUserWidget233.MyUserWidget233_C'"));UMyUserWidget* MyWidget = nullptr;MyWidget = CreateWidget<UMyUserWidget>(GetWorld(), widgetClass);MyWidget->AddToViewport();
}

单播代理

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyDelegateActor.generated.h"DECLARE_DELEGATE(NoParamDelegate);//1.声明代理类型
DECLARE_DELEGATE_OneParam(OneParamDelegate,FString);
DECLARE_DELEGATE_TwoParams(TwoParamDelegate, FString, int32);
DECLARE_DELEGATE_ThreeParams(ThreeParamDelegate, FString, int32, float);
DECLARE_DELEGATE_RetVal(FString, RetvalDelegate);UCLASS()
class CPDD1_API AMyDelegateActor : public AActor
{GENERATED_BODY()public:	// Sets default values for this actor's propertiesAMyDelegateActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:	// Called every framevirtual void Tick(float DeltaTime) override;//2.声明代理名称NoParamDelegate NoParamDelegate;OneParamDelegate OneParamDelegate;TwoParamDelegate TwoParamDelegate;ThreeParamDelegate ThreeParamDelegate;RetvalDelegate RetvalDelegate;//声明代理函数void NoParamFunction();void OneParamFunction(FString str);void TwoParamFunction(FString str,int32 value);void ThreeParamFunction(FString str,int32 value,float balue1);FString RetvalFunction();};

 

// Fill out your copyright notice in the Description page of Project Settings.#include "MyDelegateActor.h"// Sets default values
AMyDelegateActor::AMyDelegateActor()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;//3.绑定代理方法NoParamDelegate.BindUObject(this, &AMyDelegateActor::NoParamFunction);OneParamDelegate.BindUObject(this, &AMyDelegateActor::OneParamFunction);TwoParamDelegate.BindUObject(this, &AMyDelegateActor::TwoParamFunction);ThreeParamDelegate.BindUObject(this, &AMyDelegateActor::ThreeParamFunction);RetvalDelegate.BindUObject(this, &AMyDelegateActor::RetvalFunction);}// Called when the game starts or when spawned
void AMyDelegateActor::BeginPlay()
{Super::BeginPlay();//4.调用代理NoParamDelegate.ExecuteIfBound();OneParamDelegate.ExecuteIfBound("OneParamDelegate");TwoParamDelegate.ExecuteIfBound("TwoParamDelegate",648);ThreeParamDelegate.ExecuteIfBound("ThreeParamDelegate",648,3.6f);FString strvalue= RetvalDelegate.Execute();
}// Called every frame
void AMyDelegateActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}void AMyDelegateActor::NoParamFunction()
{GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Blue,TEXT("NoParamDelegate"));
}void AMyDelegateActor::OneParamFunction(FString str)
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("%s"),*str));
}void AMyDelegateActor::TwoParamFunction(FString str, int32 value)
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("%s,%d"), *str,value));
}void AMyDelegateActor::ThreeParamFunction(FString str, int32 value, float value1)
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("%s,%d,%f"), *str, value, value1));
}FString AMyDelegateActor::RetvalFunction()
{FString str = FString::Printf(TEXT("RetvalFunction"));return str;
}

多播和动态多播

声明类型


DECLARE_MULTICAST_DELEGATE_OneParam(OneParamMultiDelegate, FString);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDynamicMutilDelegate,FString,param);

声明名称

	//多播代理OneParamMultiDelegate OneParamMultiDelegate;//动态多播UPROPERTY(BlueprintAssignable)FDynamicMutilDelegate FDynamicMutilDelegate;

 绑定方法

	//多播代理绑定OneParamMultiDelegate.AddUObject(this, &AMyDelegateActor::MultiDelegateFunction1);

执行(参数根据自己定义的类型) 

	//执行多播代理OneParamMultiDelegate.Broadcast("OneParamMultiDelegate");//执行动态多播代理FDynamicMutilDelegate.Broadcast("FDynamicMutilDelegate");

多播代理能同时调用多个函数,区别是动态多播能暴露给蓝图。

多播在脚本中写好绑定的多播函数。

动态多播在此基础上,能在蓝图上额外绑定事件,不止函数。

写一个接口

用I开头那个

声明要重写函数时,有{}

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "TestInterface.generated.h"// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UTestInterface : public UInterface
{GENERATED_BODY()
};/*** */
class CPDD1_API ITestInterface
{GENERATED_BODY()// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:virtual void Attack() {};virtual void CaclulateHealth() {};
};

 调用,接屁股+头文件

重写

	virtual void Attack() override;virtual void CaclulateHealth() override;

 然后再cpp编写即可。

其他

在使用打印语句时报错什么断点问题点,尝试在打印语句上加UFUNCTION

GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Death"));

变量要编辑,组件要可视,然后均为蓝图读写

 NewObject 和 CreateDefaultSubobject区别

NewObject 和 CreateDefaultSubobject 是 Unreal Engine 中用于创建对象的两种不同方式,它们有以下区别:

  1. 对象类型:NewObject 可以用于创建任何类型的对象,包括 UObject、AActor、APawn 等。而 CreateDefaultSubobject 仅适用于在一个类的构造函数或初始化过程中创建默认的子对象。

  2. 对象生命周期:使用 NewObject 创建的对象是动态分配的,并由开发人员负责管理其生命周期。而使用 CreateDefaultSubobject 创建的对象是由 Unreal Engine 的对象系统自动管理的,它们的生命周期与宿主对象的生命周期相同。

  3. 对象属性:CreateDefaultSubobject 创建的对象会自动继承宿主对象的属性设置,例如编辑器中设置的默认值、蓝图可编辑性等。而使用 NewObject 创建的对象需要手动设置属性。

  4. 宿主对象关系:CreateDefaultSubobject 创建的子对象与宿主对象之间建立了父子关系,这意味着子对象的生命周期与宿主对象紧密相关,并且在宿主对象销毁时,子对象也会被销毁。而 NewObject 创建的对象没有默认的宿主对象关系。

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

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

相关文章

巾帼调查队开展实务调查技能,促全职妈妈联增收

2024年11月14日上午&#xff0c;由罗湖区妇联主办、罗湖区懿米阳光公益发展中心承办的“巾帼调查队—社区女性增值计划”项目第三期活动在罗湖区妇儿大厦六楼成功举办&#xff0c;30名阳光妈妈及全职妈妈参与了此次调查实务技巧培训。 在培训开始之前&#xff0c;巾帼调查队的创…

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

本文由华为云体验技术团队松塔同学分享 先说结论&#xff0c;当然不是&#xff01;Vue 组件测试&#xff0c;尤其是组件触发事件的测试&#xff0c;有成熟的示例。我们同样要关注测试的原则&#xff0c;例如将组件当成黑盒&#xff0c;不关心其内部实现&#xff0c;而只关心与其…

开源 | 携程 Redis On Rocks 实践,节省 2/3 Redis成本

作者简介 patpatbear&#xff0c;携程软件技术专家&#xff0c;负责携程缓存内核的维护&#xff0c;热爱开源&#xff0c;专注于高性能、分布式NoSQL系统的建设和应用。 一、背景 redis使用内存作为存储介质&#xff0c;具有良好的性能和低延迟&#xff0c;但其内存容量通常成为…

Notepad++ 和正则表达式 只保留自己想要的内容

一、需求 如下文本&#xff0c;三段相同结构的数据&#xff0c;想要获取每段结构中‘重复的Ids ’后面的数字 2023-10-26 18:49:49 重复的Ids 26443,26575 要删除的Ids 4174,4199,4200,55502023-10-26 18:49:49 重复的Ids 26436,26443,26575 要删除的Ids 4166,4199,4200,5550…

quartz笔记

Quartz-CSDN博客 上面是Quartz的一些基本知识,如果对quartz的基本API不是很了解的话,建议先看下上面的 和Linux Crontab对比 1.执行粒度: Linux Crontab是进程级 quart是线程级 2.跨平台性: Crontab只能在Linxu运行 quart是java实现,可以跨平台 3.调度集上 Crontab的…

Python调用企微机器人: 发送常用格式汇总

企微接口文档 发送应用消息 - 接口文档 - 企业微信开发者中心 发送格式 应用支持推送文本、图片、视频、文件、图文等类型。 ~~~以下列举常用格式 示例~~~ 1.发送文本 代码如下&#xff1a; def sendtxt_robotmsg(self):# 正式keywx_key "xx"wx_webhookurl htt…

新的 Reptar CPU 缺陷影响英特尔台式机和服务器系统

英特尔修复了其现代台式机、服务器、移动和嵌入式 CPU 中的一个高严重性 CPU 漏洞&#xff0c;包括最新的 Alder Lake、Raptor Lake 和 Sapphire Rapids 微架构。 攻击者可以利用该缺陷&#xff08;追踪为CVE-2023-23583并被描述为“冗余前缀问题”&#xff09;来升级权限、获…

【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)

目录 A、求全是字母的最小十六进制数 B、Excel表格组合 C、求满足条件的日期 D、 取数字 - 二分 &#xff08;1&#xff09;暴力 &#xff08;2&#xff09;二分 E、最大连通块 - bfs F、哪一天&#xff1f; G、信号覆盖 - bfs &#xff08;1&#xff09;bfs&#xf…

(C语言)输入一个序列,判断是否为奇偶交叉数

#include <stdio.h> #include <string.h> int main() {char str[50];gets(str);int len,tmp 1;len strlen(str); //获取字符串长度 for (int i 0;i < len-1 ;i ){if((str[i] % 2 0 ) && (str[i1] % 2 ! 0)) //判断先偶数后奇数序列 tmp ;else if((s…

【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account&#xff08;5&#xff09;- Data Lake layers 前言 上一文介绍了存储帐户的概述&#xff0c;还有container的一些配置&#xff0c;在…

(.htaccess文件特性)[MRCTF2020]你传你呢 1

题目环境&#xff1a; 不难看出是一道文件上传漏洞 上传一句话木马文件burpsuite进行抓包<?php eval($_POST[shell]);?> 命名为PHP文件格式 Repeater进行重放 尝试了其它后缀进行绕过都没有成功 通过 application/x-php内容类型&#xff0c;可以看出被识别出是PHP文件&…

聊一聊前端面临的安全威胁与解决对策

前端是用户在使用您的网站或Web应用程序时首先体验到的东西。如果您的Web应用程序的前端受到侵害&#xff0c;它可能会影响整个布局&#xff0c;并造成糟糕的用户体验&#xff0c;可能难以恢复。集成前端安全变得越来越重要&#xff0c;本文将指导您通过可以应用于保护您的Web应…

什么是圆锥的准线?

定曲线C叫做锥面的准线&#xff0c;构成曲面的每一条直线叫做母线。

android 数独小游戏 经典数独·休闲益智

一款经典数独训练app 标题资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 首页页面&#xff1a; 1.包含有简单、普通、困难、大师四种难度的数独挑战供选择&#xff1b; 记录页面&#xff1a; 1.记录用户训练过的数独信息&…

三江城115m²3室2厅2卫,现代简约不单是居所更是对生活的向往。福州中宅装饰,福州装修

【前言】 简洁有力&#xff0c;静默无声。 以简约精致的方式&#xff0c;展现现代都市生活&#xff1b; 经典不因潮流褪色&#xff0c;不为悦人只为悦己。 项目信息 项目名称 | 三江城 设计地址 | 福建福州 项目面积 | 115㎡ 项目户型 | 3室2厅 设计风格 | 现代简约 全…

基于单片机的电源切换控制器设计(论文+源码)

1.系统设计 在基于单片机的电源切换控制器设计中&#xff0c;系统功能设计如下&#xff1a; &#xff08;1&#xff09;实现电源的电压检测&#xff1b; &#xff08;2&#xff09;如果电压太高&#xff0c;通过蜂鸣器进行报警提示&#xff0c;继电器进行切换&#xff0c;使…

Git本地项目提交到Gitee的操作流程

一、Gitee创建一个仓库 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;复制该仓库地址&#xff08;https://gitee.com/yassels/test_1115.git&#xff09;&#xff0c;留待后续使用 二、操作本地文件上传到Gitee 第一步&#xff1a; 第二步…

怎么去掉邮件内容中的回车符

上图是Outlook 截图&#xff0c;可见1指向的总有回车符&#xff1b; 故障原因&#xff1a; 不小心误按了箭头4这个选项&#xff1b; 解决方法&#xff1a; 点击2箭头确保tab展开&#xff1b; 点击3以找到箭头4. 取消勾选或者多次点击&#xff0c;即可解决。

相机突然断电,保存的DAT视频文件如何修复

3-7 本文主要解决因相机突然断电导致拍摄的视频文件损坏的问题。 在平常使用相机拍摄视频&#xff0c;比如用单反相机、无人机拍摄视频的时候&#xff0c;如果电池突然断电&#xff0c;或者突然炸机了&#xff0c;就非常有可能会得到一个损坏的视频文件&#xff0c;比如会产生…

计算机毕业设计选题推荐-幼儿园管理微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…