UEC++ 创建自定义类型案例

一,子弹类型

// .h文件
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/SphereComponent.h"
#include "GameFrameWork/ProjectileMovementComponent.h"
#include "MyActor.generated.h"

// ...
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UStaticMeshComponent> Sphere;

UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<USphereComponent> SphereCollision;

UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UProjectileMovementComponent> ProjectileMovement;
// .cpp文件
AMyActor::AMyActor() {
	PrimaryActorTick.bCanEverTick = true;

	Sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Sphere"));
	SphereCollision = CreateDefaultSubobject<USphereComponent>(TEXT("SphereCollision"));
	ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovement"));
	static ConstructorHelpers::FObjectFinder<UStaticMesh> StaticSphereMesh(TEXT("/Engine/BasicShapes/Sphere.Sphere"));

	RootComponent = Sphere;
	SphereCollision->SetupAttachment(RootComponent);
	ProjectileMovement->SetUpdatedComponent(RootComponent);
	Sphere->SetStaticMesh(StaticSphereMesh.Object);
	ProjectileMovement->InitialSpeed = 500.0;
	ProjectileMovement->MaxSpeed = 2000.0;		
}

二,带有增强输入的角色类型

// .h文件
#include "CoreMinimal.h"
#include "InputActionValue.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "GameFramework/Controller.h"	
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"	
#include "GameFramework/Character.h"	
#include "GameFramework/CharacterMovementComponent.h"
#include "MyCharacter.generated.h"

class UInputAction;
class UInputMappingContext;

// ...
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<USpringArmComponent> SpringArm;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UCameraComponent> Camera;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UInputMappingContext> DefaultMappingContext;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UInputAction> MoveAction;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UInputAction> LookAction;

public:
	void Move(const FInputActionValue& value);
	void Look(const FInputActionValue& value);
// ...
// .cpp文件
AMyCharacter::AMyCharacter()
{
	PrimaryActorTick.bCanEverTick = true;

	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));

	SpringArm->TargetArmLength = 400.0f;
	SpringArm->bUsePawnControlRotation = true;
	SpringArm->SetupAttachment(RootComponent);
	Camera->SetupAttachment(SpringArm);

	//控制器只影响相机不影响角色
	bUseControllerRotationPitch = false;
	bUseControllerRotationRoll = false;
	bUseControllerRotationYaw = false;

	GetCharacterMovement()->bOrientRotationToMovement = true;
}

void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();

	if (auto PlayerController = Cast<APlayerController>(Controller))
		if (auto Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
			Subsystem->AddMappingContext(DefaultMappingContext, 0);	
}

void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	if (auto EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
	{
		EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyCharacter::Move);
		EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AMyCharacter::Look);
	}
}

void AMyCharacter::Move(const FInputActionValue& value)
{
	FVector2D MovementVector = value.Get<FVector2D>();
	if (Controller)
	{
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);
		const FVector FowardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
		const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

		AddMovementInput(FowardDirection, MovementVector.Y);
		AddMovementInput(RightDirection, MovementVector.X);
	}
}

// 5.7使用IMC_Default 和 IMC_MouseLook 将按键和鼠标操作分开
// IMC_Default    →  按键操作(移动、跳跃、冲刺、交互等)
// IMC_MouseLook  →  鼠标操作(视角旋转)
void AMyCharacter::Look(const FInputActionValue& value) 
{
	FVector2D LookAxisVector = value.Get<FVector2D>();
	if (Controller)
	{
		AddControllerYawInput(LookAxisVector.X);
		AddControllerPitchInput(LookAxisVector.Y);
	}
}

内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡适应性及动态响应方面的不足,提出一种基于有源中点箝位(ANPC)三电平拓扑的高性能并网控制策略。该策略深度融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建了“精准同步—扰动补偿—优质调制”三位一体的一体化控制体系。依托ANPC拓扑在开关损耗均衡、中点电位稳定和低谐波输出方面的硬件优势,结合DPWMA调制提升等效开关频率、正负序分离实现不平衡电网下的精确锁相、前馈控制克服闭环滞后等先进控制手段,显著改善了系统的稳态电能质量、动态响应速度与复杂工况适应能力。通过多工况仿真验证,该复合策略在稳态运行时可大幅降低总谐波畸变率,在电网不平衡与动态扰动工况下仍能维持并网电流对称、功率平稳及快速恢复能力,展现出优异的综合性能与工程应用潜力。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制、微电网或相关领域研究的研发人员及研究生。; 使用场景及目标:① 提升高功率并网逆变器的电能质量与运行稳定性;② 解决电网电压不平衡、畸变等复杂工况下的并网难题;③ 优化动态响应性能,提升系统抗扰能力;④ 为ANPC拓扑与先进控制策略的工程化应用提供技术参考。; 阅读建议:建议结合仿真模型深入理解DPWMA调制、正负序分离锁相与前馈控制的实现细节,重点关注多工况下的性能对比分析,以掌握复合控制策略的设计逻辑与优化效果。
内容概要:本文针对海岛微电网中可再生能源出力波动与负荷需求不确定性的问题,提出了一种基于“空调-电动汽车”联合虚拟储能的优化调度方法。通过挖掘空调负荷的热舒适弹性与电动汽车充电的时空灵活性,构建联合虚拟储能模型,将其等效为可调度的储能资源参与系统能量平衡。研究建立了考虑多时间尺度协调、系统运行约束及经济性目标的优化调度模型,并采用Matlab进行仿真求解,实现了对海岛孤立微电网的日前-实时双层协同调度。该方法有效提升了系统对风光等分布式能源的消纳能力,降低了对传统物理储能的依赖,增强了微电网运行的经济性、稳定性与能源自给能力。; 适合人群:具备一定电力系统分析、优化算法理论及Matlab编程基础的科研人员或研究生,尤其适用于从事微电网能量管理、虚拟储能技术、需求侧响应、电动汽车与电网互动(V2G)等领域研究的专业技术人员。; 使用场景及目标:①应用于海岛、偏远地区等孤立电网环境,提升供电可靠性与能源利用效率;②为高比例可再生能源接入的微电网提供灵活调节资源,缓解功率波动;③探索空调与电动汽车等柔性负荷协同参与电网调度的潜力,推动需求侧资源由“被动消纳”向“主动支撑”转变;④实现微电网多时间尺度下的经济优化运行。; 阅读建议:建议结合文中所构建的数学模型与Matlab代码实现部分同步学习,重点理解虚拟储能的建模思路、目标函数的设计逻辑以及约束条件的处理方法,并可通过调整可再生能源出力、负荷水平及电动汽车渗透率等参数进行多场景仿真,深入掌握联合虚拟储能对系统调度性能的影响机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值