[5] UE C++

Day1

Day2

GetWorld() //GetWorld() 是一个常用的函数,用于获取当前对象所属的世界(World)。在 Unreal Engine 中,世界是游戏中所有物体存在和交互的环境,包括地图、角色、物体等都存在于世界中。


UE_LOG(LogTemp, Warning, TEXT("空指针")) //ue控制台打印
UKismetSystemLibrary::PrintString //ue窗口打印    
    
GetWorld()->SpawnActor<AMyFirstActor>(AMyFirstActor::StaticClass(),FVector::ZeroVector,FRotator::ZeroRotator) //在当前世界创建一个actor
    
//匿名泛型构造函数
ConstructorHelpers::FObjectFinder<UTexture> const FindPath(TEXT("文件路径引用地址"));

//加载字体 绘制文字
TestFontPointer = LoadObject<UFont>(nullptr,TEXT("/Script/Engine.Font'/Game/Fonts/ARIALUNI_Font.ARIALUNI_Font'"));
DrawText(TEXT("Hello World"), FLinearColor::Red, Canvas->SizeX / 2.f - 50, Canvas->SizeY / 2.f - 30,TestFontPointer);

//获取PlayerController 设置鼠标显示并有点击事件
class APlayerController* PC = UGameplayStatics::GetPlayerController(GetWorld(), 0);
PC->SetShowMouseCursor(true); 
PC->bEnableClickEvents = true;

//创建定时器
FTimerHandle Handle;
GetWorld()->GetTimerManager().SetTimer(Handle,this,&AMyHUD::TimerCallBack,3.f);

//元素点击事件
void AMyHUD::DrawRectFunction()
{
	DrawRect(FLinearColor::Red, 70.f, 50.f, 30.f, 100.f);//绘制图形
	AddHitBox(FVector2D(50.f, 50.f), FVector2D(35.f, 120.f),TEXT("Pause"), true);//绘制触发点击事件的位置
}
virtual void NotifyHitBoxClick(FName BoxName) override;
void AMyHUD::NotifyHitBoxClick(FName BoxName)
{
	Super::NotifyHitBoxClick(BoxName);
	if (BoxName == TEXT("Pause"))
	{
		UE_LOG(LogTemp, Log, TEXT("被点击"));
	}
}
//--总结 :
这些知识点涉及到 Unreal Engine(虚幻引擎)游戏开发相关的内容,主要包括以下几个方面:

1. Unreal Engine 中的基本概念和函数:
   - GetWorld():用于获取当前对象所属的世界。
   - UE_LOG():用于在 Unreal Engine 控制台打印日志信息。
   - UKismetSystemLibrary::PrintString:用于在 Unreal Engine 窗口中打印信息。
   - SpawnActor:在当前世界中创建一个指定类型的 Actor。
   - ConstructorHelpers::FObjectFinder:用于加载资源文件。
   - LoadObject:加载指定类型的对象。
   
2. 绘制文字、图形和处理点击事件:
   - 绘制文字:使用 DrawText() 函数绘制文字。
   - 绘制图形:使用 DrawRect() 函数绘制矩形。
   - 处理点击事件:通过 AddHitBox() 添加可点击区域,并在 NotifyHitBoxClick() 中处理点击事件。

3. PlayerController 和鼠标事件处理:
   - 获取 PlayerController:使用 UGameplayStatics::GetPlayerController(GetWorld(), 0) 获取 PlayerController 对象。
   - 设置鼠标显示和点击事件:通过 PlayerController 设置鼠标显示和启用点击事件。

4. 定时器的创建和回调处理:
   - 创建定时器:使用 GetWorld()->GetTimerManager().SetTimer() 创建定时器。
   - 定时器回调函数:定义定时器的回调函数 TimerCallBack()。

这些知识点涉及到 Unreal Engine 中的常用功能和开发技巧,有助于在游戏开发过程中实现各种交互和效果。希望这些分类能帮助你更好地理解和应用 Unreal Engine 中的相关功能。

Day3

定时器

//定时器
//创建定时器的2种方式
GetWorld()->GetTimerManager().SetTimer(FHandle,this,&AMyHUD::TimerCallBack,3.f);
GetWorldTimerManager().SetTimer(SHandle,this,&AMyHUD::TimerCallBack,
                                    
//清除定时器
//清除某个定时器
GetWorldTimerManager().ClearTimer(SHandle);
//清楚当前类实例化出对象下的所有的定时器
GetWorldTimerManager().ClearAllTimersForObject(this);
                                
//清除Gamemodebase里面的定时器
AGameModeBase* Gm = UGameplayStatics::GetGameMode(GetWorld());
const AMyGameModeBase* FirstGm = Cast<AMyGameModeBase>(Gm);  //Cast<To>(From)
GetWorld()->GetTimerManager().ClearAllTimersForObject(FirstGm);
                                
//暂停定时器
AGameModeBase* Gm = UGameplayStatics::GetGameMode(GetWorld());
const AMyGameModeBase* FirstGm = Cast<AMyGameModeBase>(Gm);
GetWorldTimerManager().PauseTimer(FirstGm->GameModeTimer);
                                
//恢复定时器
if (GetWorldTimerManager().IsTimerPaused(GameModeTimer))
{
    GetWorldTimerManager().UnPauseTimer(GameModeTimer);
}
                                
//判断定时器状态
GetWorldTimerManager().IsTimerActive(GameModeTimer);

组件

RootComponent = CreateDefaultSubobject<UBillboardComponent>(TEXT("Root")); //创建根
ArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("ArmComponent")); //弹簧臂
MainCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("MainCamera"));//相机
RedBird = CreateDefaultSubobject<UPaperFlipbookComponent>(TEXT("RedBird"));//小鸟

ArmComponent->SetupAttachment(RootComponent);//借助弹簧臂组件的地址,将弹簧臂附着在根组件上
MainCamera->SetupAttachment(ArmComponent);//相机附着到弹簧臂
RedBird->SetupAttachment(RootComponent);//小鸟附着到根

//小鸟组件设置
ArmComponent->SetRelativeRotation(FRotator(0,-90,0));
MainCamera->SetProjectionMode(ECameraProjectionMode::Orthographic);//2D游戏不存在透视关系,所以修改相机类型为正交模式
MainCamera->OrthoWidth=1000.f;//正交宽度,值越大,拍摄的越远
//设置组件路径
RedBirdFlipbook=LoadObject<UPaperFlipbook>(nullptr,TEXT("/Script/Paper2D.PaperFlipbook'/Game/Animation/PFB_RedBird.PFB_RedBird'"));
if(RedBirdFlipbook)RedBird->SetFlipbook(RedBirdFlipbook);

知识点总结

1. **Paper2D 相关头文件引入**:
    - 使用 `#include "PaperFlipbookComponent.h"` 和 `#include "PaperFlipbook.h"` 来引入 Paper2D 相关头文件,以便在代码中使用 Paper2D 功能。

2. **创建组件对象**:
    - 使用 `CreateDefaultSubobject<UPaperFlipbookComponent>(TEXT("RedBird"));` 来创建一个名为 RedBird 的 UPaperFlipbookComponent 组件对象。

3. **组件附着**:
    - 使用 `SetupAttachment()` 方法将 ArmComponent 组件附着到 RootComponent,使其成为 RootComponent 的子组件。

4. **设置相对旋转**:
    - 代码片段中缺少具体的旋转角度参数,应该补充具体的旋转角度信息,例如:`ArmComponent->SetRelativeRotation(FRotator(X, Y, Z));`,其中 X、Y、Z 分别代表绕 X、Y、Z 轴的旋转角度。

5. **相机投影模式设置**:
    - 使用 `SetProjectionMode(ECameraProjectionMode::Orthographic)` 方法来设置 MainCamera 的投影模式为正交投影模式。

 

posted @ 2024-03-26 19:54  啊賢  阅读(35)  评论(0编辑  收藏  举报