【UE5.1 创建C++文件】

创建完一个C++文件会形成两个脚本.h 与 .cpp

核心一句话

  • .h(Header 头文件):声明 → 告诉编译器「这个类有什么、有哪些函数 / 变量」,对外暴露接口
  • .cpp(Source 源文件):定义 / 实现 → 写函数里面具体怎么跑(逻辑代码)

规则:声明放 h,实现放 cpp;h 只写签名,不写函数体(除了 inline)

有几处需要注意

1.TSubclassOf<AActor> actorTarget; 与 AActor* actorTarget;两个都是对象类型,TSubclassOf<AActor>范围更广可以从内容浏览器中添加, AActor*只能选场景中存在的对象

2.c++中string 字段为Fstring,且UE_LOG(LogTemp, Warning, TEXT("你好啊,%s,我知道你的速度是 %f"), * str, speed);打印的时候*str前要加*

3.基础对象AActor* actor; AActor*后面要加*

以下是C++场景组件

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Components/SceneComponent.h"
#include "MySceneComponent_fan.generated.h"


UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class TEST818_API UMySceneComponent_fan : public USceneComponent
{
	GENERATED_BODY()

public:	
	// Sets default values for this component's properties
	UMySceneComponent_fan();
	
protected:
	// Called when the game starts
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="MyTest")
	int abd=0;
	float speed ;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyTest")
	FString str ;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="MyTest")
    AActor* TargetActorFan;
	void ModifyActorByTransform(AActor* TargetActor);
	UFUNCTION(BlueprintCallable)
	void TestFan(int number);

};
cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "MySceneComponent_fan.h"

// Sets default values for this component's properties
UMySceneComponent_fan::UMySceneComponent_fan()
{
	PrimaryComponentTick.bCanEverTick = true;

	str = TEXT("hahahh哈");
	speed = 3.2f;
	abd = 9;
	// 加上这行测试:
	UE_LOG(LogTemp, Warning, TEXT("====== 构造函数执行了,代码已更新! ======"));
	
}


// Called when the game starts
void UMySceneComponent_fan::BeginPlay()
{
	Super::BeginPlay();
	UE_LOG(LogTemp, Warning, TEXT("999"));
	UE_LOG(LogTemp, Warning, TEXT("你好啊,%s,我知道你的速度是 %f"), * str, speed);
	// ...
	UE_LOG(LogTemp, Warning, TEXT("Hello from MySceneComponent_fan!"));
	if (GEngine)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello from MySceneComponent_fan!"));
	}
	if (TargetActorFan) 
	{
		ModifyActorByTransform(TargetActorFan);
	}
	//// 举例:获取当前组件所属的Actor(自己的父Actor)
	//AActor* MyOwner = GetOwner();

}


// Called every frame
void UMySceneComponent_fan::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

	if (GEngine) {
		abd++;
		if (abd > 15) {

		}
		else
		{
			// ...
			TestFan(abd);
		}
		
	}
	
}
void UMySceneComponent_fan::ModifyActorByTransform(AActor* TargetActor)
{
	if (!IsValid(TargetActor)) return;

	FTransform NewTrans;
	NewTrans.SetLocation(FVector(100, 0, 50));    // 位置
	NewTrans.SetRotation(FRotator(0, 90, 0).Quaternion()); // 旋转:Yaw90度
	NewTrans.SetScale3D(FVector(1.5, 1.5, 1.5));  // 缩放

	TargetActor->SetActorTransform(NewTrans);
}
void UMySceneComponent_fan::TestFan(int number) 
{
	//UE_LOG(LogTemp, Display, TEXT("abd=%d"),number);
	if (GEngine) {
		GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Blue, TEXT("fanhahahhah"));
	}
}
相关推荐
余额瞒着我当琳2 小时前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
Tsuki_tl2 小时前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零
程序猿编码3 小时前
不用 PyTorch!从零手写 C++ 深度学习框架,自动微分、CUDA、分布式一把搞定
c++·深度学习·大模型推理·自动微分
real_metrix3 小时前
【学习笔记】C/C++ 头文件自包含
c++·c·头文件·自包含
雪落漂泊3 小时前
C++算法 滑动窗口篇(上)
开发语言·c++·算法
像枫一样3 小时前
STM32串口轮询收发实战教程
arm开发·c++·stm32·单片机·嵌入式硬件·fpga开发·51单片机
Soneswy3 小时前
C++基础篇——类与对象(上)
开发语言·c++
张小姐的猫3 小时前
【MySQL】表的约束
android·linux·服务器·数据库·c++·mysql·adb
kiracrimson3 小时前
STL简单引入:把数据结构做成模板
开发语言·数据结构·c++