[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 的投影模式为正交投影模式。