UE4 新手常用C++API

来源:互联网 发布:淘宝网游戏道具 编辑:程序博客网 时间:2024/05/17 09:35
蓝图调用变量
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XXX")


蓝图调用函数
UFUNCTION(BlueprintCallable, Category = "XXX")


运行命令
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));

继承父类
Super::Xxx();  
MD5加密
FMD5::HashAnsiString(TEXT("someStuff"));
传一个Object蓝图
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")
TSubclassOf<class SkillHelperObject>SkillBlueprintHelperObject;
路径
结构体
USTRUCT(Blueprintable)
struct FAskWayDate
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")
int OpCode;
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "XX")
TMap<int, FString> Parameters;
};
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 (TActorIterator<AActor> It(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格式)
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<UUserWidget>( NULL, TEXT( "Blueprint'/Game/UMG/MainMenu.MainMenu_C'" ) );        
MainMenuWidget = CreateWidget<UUserWidget>( GetWorld()->GetFirstPlayerController(), aa );    
}    
MainMenuWidget->AddToViewport(); 
//http://blog.csdn.net/zilisen/article/details/77645500
找蓝图Actor
static ConstructorHelpers::FObjectFinder<UBlueprint> assetObject(TEXT("/Game/Maps/test.test_C")); 
if (assetObject.Succeeded())
{
TestBlueprint = (UClass*)assetObject.Object->GeneratedClass;
}
找材质
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Maps/MAT.MAT"));
if (MaterialAsset.Succeeded())
{
Material = (UMaterial*)MaterialAsset.Object;
}
LOG
UE_LOG(LogTemp, Warning, TEXT("Cannot find xx"));
DEFINE_LOG_CATEGORY(LogMySlate);
UE_LOG(LogMySlate, Warning, TEXT("Found UObject named"));
生成类
TestObjectActor = GWorld->SpawnActor<AActor >(TestBlueprint);
UWorld* const World = GetWorld();
AActor* GridCube = World->SpawnActor<AActor>(GridCubeClass2, FVector(0.0f, 90.0f, 50.0f), FRotator(0.0f, 0.0f, 0.0f));
创建Object
UMyObject*NewObj=NewObject<UMyObject>();
读取Texture2D
UTexture2D* texture22 = Cast<UTexture2D>(StaticLoadObject(UTexture2D::StaticClass(), NULL, *(Path)));
获得名字
Actor->GetName() == TEXT("FloatActor_1")
强制转换
PTGameInstance = Cast<UPTGameInstance>(World->GetGameInstance());
添加组件
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Center"));
设置碰撞类型
SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
重力
SetEnableGravity(false);
计时器
FTimerHandle CountdownTimerHandle;
GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &AMytestActor::AdvanceTimer, 1.0f, true);
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);
获取时间
FDateTime::Now().ToString();
链接URL
FString TheURL = "xxxxxxxx";
FPlatformProcess::LaunchURL(*TheURL, nullptr, nullptr);
获取IP地址
需要在build.cs添加Sockets模块
#include "SocketSubsystem.h"
#include "IPAddress.h"
FString IpAddr("NONE");
  bool canBind = false;
  TSharedRef<FInternetAddr> LocalIp = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, canBind);
  if (LocalIp->IsValid())
  {
IpAddr = LocalIp->ToString(false); //(如果想附加端口就写 ture)
}
return IpAddr;
添加标签
MyActor.Tags.AddUnique(TEXT("MyTag"));  
销毁物体
MyActor->Destroy();
MyActor->SetLifeSpan(1);//延迟1S
截图
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";
}
写入配置文件,有GEditorIni,GEditorProjectIni,GCompatIni,GlightmassIni,GScalabilityIni,GHardwareIni,GInputIni,GGameIni,GGameUserSettingsIni等(查找CoreGlobals.h)
写的数据会写到 YourGame\Saved\Config\Windows\Game.ini 中
    const FString WriteSection = "MyCustomSection";
    //String
    GConfig->SetString(
        *WriteSection,
        TEXT("key1"),
        TEXT("Hello world"),
        GGameIni
    );
    GConfig->Flush(false, GGameIni);
读取配置
if (!GConfig) return 0;
float ValueReceived ;
ValueReceived = GConfig->GetFloat(
TEXT("MyCustomSection"),
TEXT("key1"),
ValueReceived,
GGameIni
);
return ValueReceived;





9 0