UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XXX")
开放给编辑器时删选类型
TSubClassOf
UFUNCTION(BlueprintCallable, Category = "XXX")
继承父类
Super::Xxx();
例:
void BeginDestroy() override;
void AmyActor::BeginDestroy()
{
Super::BeginDestroy();
UE_LOG(LogTemp, Warning, TEXT("Game exit!"));
}
蓝图重载C++函数(可以在C++中其他位置调用一个目前没有任何功能的函数(事件),而该函数的具体实现交给蓝图实现)
UFUNCTION(BlueprintImplementableEvent)
void OnTest();
在蓝图中Add Event,找到对应的函数名,创建后即可实现具体逻辑
然后也可以在自己的C++代码中调用该方法
void MyActor::OnPressed()
{
OnTest();
}
蓝图添加默认的C++实现(C++在调用了SomeFunction()的地方先调用SomeFunction_Implementation的实现,但如果在蓝图中定义了SomeFunction事件(即使后面不连接任何内容),则会忽略C++中SomeFunction_Implementation中的实现,只采用蓝图中的实现)
UFUNCTION(BlueprintNativeEvent, Category = "SomeCategory")
void SomeFunction();
void AMyActor::SomeFunction_Implementation()
{
UE_LOG(LogTemp, Warning, TEXT("Implenetaion in C++"));
}
判断Actor是蓝图还是C++
Actor->GetClass.IsNative();
判断当前游戏运行模式
GetWorld()->WorldType
加载地图
UGameplayStatics::OpenLevel(GetWorld(), *mapName);
获取屏幕尺寸
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
运行命令
GetWorld()->GetFirstPlayerController()->ConsoleCommand("quit");
打印
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("%s"),*FString));#include "Misc/OutputDevice.h"
GLog->Logf(TEXT("%s"), *Filepath);
设置位置
SetActorLocation(FVector(0.0f, 0.0f, 250.0f));
打开EXE
FPlatformProcess::ExecProcess(*QQ, nullptr, nullptr, nullptr, nullptr);
FPlatformProcess::CreateProc(*QQ, nullptr, true, false, false, nullptr, -1, nullptr, nullptr);
MD5加密
FMD5::HashAnsiString(TEXT("someStuff"));
hashi加密
FString HashStringWithSHA1(const FString &InString)
{
FSHAHash StringHash;
FSHA1::HashBuffer(TCHAR_TO_ANSI(*InString), InString.Len(), StringHash.Hash);
return StringHash.ToString();
}
传一个Object蓝图
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")TSubclassOfSkillBlueprintHelperObject;
路径
结构体
USTRUCT(Blueprintable)struct FAskWayDate
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")
int OpCode;
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")
TMap
};
FString Str2 = FString::Printf(TEXT("Texture2D'/Game/pan/Frame_%05d.Frame_%05d'"),textName)
查找场景中的Actor
AActor * AMyActor::FindActor(FString Actorname)
AActor* mActor = NULL;
if (GetWorld())
{
for (TActorIteratorIt(GetWorld()); It; ++It)
{
AActor* xActor = *It;
if (xActor->GetName() == Actorname)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Get it"));
mActor = xActor;
break;
}
}
if (!mActor)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("No Get it"));
}
return mActor;
}
else
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("NO getworld"));
return nullptr;
}
}
绑定按键(PS:需要在Pawn或Character里)
void AMyActor::SetupPlayerInputComponent(class UInputComponent* InputComponent)
InputComponent->BindKey(EKeys::Z, IE_Released, this, &AMyActor::OpenURL);
InputComponent->BindAction("Grow", IE_Released, this, &AMyActor::OpenURL);
InputComponent->BindAxis("back", this, &AMyActor::OpenURL);
}
返回多个值,引用
void AMyActor::MoreReturn(FString& A, bool& B)
}
蓝图显示中文枚举类(VS文件-高级保存选项UTF-8格式)
UENUM(BlueprintType)
enum class EenumChinese :uint8{
E_EN UMETA(DisplayName = "英文"),
E_CH UMETA(DisplayName = "中文"),
};
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "enumChinese")
EenumChinese enumChinese;
双选项枚举类
UENUM(BlueprintType)
enum class EMyEnum : uint8
{
BranchA,
BranchB,
};
UFUNCTION(BlueprintCallable, Category = "My|MyActor", Meta = (ExpandEnumAsExecs = "Branches"))
void BranchFun(int32 Input, EMyEnum& Branches);
void AMyActor::BranchFun(int32 Input, EMyEnum& Branches)
{
if (Input == 1)
{
Branches = EMyEnum::BranchA;
}
else
{
Branches = EMyEnum::BranchB;
}
}
创建UI "Media", "MediaAssets"
if (nullptr == MainMenuWidget)
UClass* aa = LoadClass( NULL, TEXT( "Blueprint'/Game/UMG/MainMenu.MainMenu_C'" ) );
MainMenuWidget = CreateWidget( GetWorld()->GetFirstPlayerController(), aa );
}
MainMenuWidget->AddToViewport();
//http://blog.csdn.net/zilisen/article/details/77645500
找蓝图Actor
static ConstructorHelpers::FObjectFinderassetObject(TEXT("/Game/Maps/test.test_C"));
{
TestBlueprint = (UClass*)assetObject.Object->GeneratedClass;
}
找材质
static ConstructorHelpers::FObjectFinderMaterialAsset(TEXT("/Game/Maps/MAT.MAT"));
{
Material = (UMaterial*)MaterialAsset.Object;
UE_LOG(LogTemp, Warning, TEXT("Cannot find xx"));
DEFINE_LOG_CATEGORY(LogMySlate);
UE_LOG(LogMySlate, Warning, TEXT("Found UObject named"));
生成类
TestObjectActor = GWorld->SpawnActor(TestBlueprint);
AActor* GridCube = World->SpawnActor(GridCubeClass2, FVector(0.0f, 90.0f, 50.0f), FRotator(0.0f, 0.0f, 0.0f));
创建Object
UMyObject*NewObj=NewObject();
读取Texture2D
UTexture2D* texture22 = Cast(StaticLoadObject(UTexture2D::StaticClass(), NULL, *(Path)));
获得名字
Actor->GetName() == TEXT("FloatActor_1")
强制转换
PTGameInstance = Cast(World->GetGameInstance());
添加组件
RootComponent = CreateDefaultSubobject(TEXT("Center"));
移动Windows游戏窗口
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
if (GEngine && GEngine->GameViewport)
{
FVector2D WindowPosition = position;
GEngine->GameViewport->GetWindow()->MoveWindowTo(WindowPosition);
}
重力
SetEnableGravity(false);
计时器
FTimerHandle CountdownTimerHandle;
GWorld->GetTimerManager().UnPauseTimer(mTimer); //唤醒
float elapsed = GWorld->GetTimerManager().GetTimerElapsed(mTimer); //已逝时间
float elapsed = GWorld->GetTimerManager().GetTimerRemaining(mTimer); //剩余时间
bool isActive = GWorld->GetTimerManager().IsTimerActive(mTimer); //激活
bool isPaused = GWorld->GetTimerManager().IsTimerPaused(mTimer); //暂停
bool isExist = GWorld->GetTimerManager().TimerExists(mTimer); //存在
GetWorldTimerManager().ClearTimer(CountdownTimerHandle);//停止计时器
退出游戏
UKismetSystemLibrary::QuitGame(this, nullptr, EQuitPreference::Quit);
GEngine->Exec(GWorld, *FString("Exit"));
获取时间
FDateTime::Now().ToString();
链接URL
FString TheURL = "xxxxxxxx";
获取IP地址
FString IpAddr("NONE");
bool canBind = false;
TSharedRefLocalIp = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, canBind);
if (LocalIp->IsValid())
{
IpAddr = LocalIp->ToString(false); //(如果想附加端口就写 ture)
}
return IpAddr;
添加标签
MyActor.Tags.AddUnique(TEXT("MyTag"));
销毁物体
MyActor->Destroy();
截图
FString UMyBlueprintFunctionLibrary::TakeScreenShoot(FString picName, bool bUnique /*= true*/)
FString inStr;
FString Filename;
FScreenshotRequest::RequestScreenshot(picName + ".png", false, bUnique);
FString ResultStr = FScreenshotRequest::GetFilename();
ResultStr = FPaths::GetBaseFilename(ResultStr, true);
return ResultStr + ".png";
}
void UMyBlueprintFunctionLibrary::Screenshot(const FString InFilename, bool bInShowUI)
{
FScreenshotRequest SR = FScreenshotRequest();
FString savelocation = FPaths::ConvertRelativePathToFull(FPaths::GameDir());
FString filename = savelocation + FString(TEXT("/Saved/Screenshotss/")) + InFilename + FString(TEXT(".png"));
SR.RequestScreenshot(filename, bInShowUI, false);
}
const FString WriteSection = "MyCustomSection";
//String
GConfig->SetString(
*WriteSection,
TEXT("key1"),
TEXT("Hello world"),
GGameIni
);
GConfig->Flush(false, GGameIni);
读取配置
GConfig->GetFloat(
TEXT("MyCustomSection"),
TEXT("key1"),
ValueReceived,
GGameIni
);
2. 判断某个actor或者UI是否显示,isVisibility,在此之前,需要得到需要判断的物体,然后,引出节点isVisibility;
3. 分支:sequence,一个节点可以引发出多个节点,并可以分别同时执行;
4. 创建画布:Creat widget ,单单创建画布是无法在游戏界面中看到的,需要再来一步,add to viewport;
5. 添加到显示屏幕:Add to viewPort,注意里面可以设置Zorder值,Zorder即是画布的层,就比如在Unity里面的UGUI一样,显示也是按照越是新添加的越是显示在最前面,ZOrder值越大,越是最先看到,最先检测、触发,所以再出现有UI重叠的时候可以通过更改Zorder值实现,也可以通过代码动态改变Zorder实现;
6. get all widgets of class 得到所有UI蓝图类,在下面也可以指定某个UI蓝图类的;
7. 在UI中设定某种UI 的显示和隐藏即是visible,Hideen,Collaps等,是通过 set visibility 来实现的;
8. Print String 即是打印字符串,其他的基本数据类型也可以直接将节点连接到该方法,中键自动将数据类型转化成string类型;
加载资源对象