1.創建關卡類
1.創建C++類繼承LevelScriptActor
2.打開關卡藍圖 Class Settings->Parent Class 選擇你之前創建好的C++類
遇到的問題:
1.Tick()不運行 解決方法:BeginPlay() 增加Super::BeginPlay();
2.在主關卡類里面創建UMG
1.創建C++類繼承UUserWidget,例如:UMyUserWidget;
2.獲取PlayerController,方法:GetWorld()->GetFirstPlayerController();
3.獲取UMG藍圖,方法:UClass* widget = LoadClass<UUserWidget>(nullptr,TEXT("/Game/文件名.文件名_C"));
4.在關卡里面創建UMG,方法:UMyUserWidget* mainUMG = CreateWidget<UMyUserWidget>(GetWorld()->GetFirstPlayerController(),widget); mainUMG->AddToViewport();
遇到問題:
1.路徑名一定要加_C;
2.AddToViewport(參數);參數可以調整UMG之間的層級
3.UMG里面控件的使用
1.獲取最外層界面控件,方法:UPanelWidget *RootWidget = Cast<UPanelWidget>(GetRootWidget());
2.獲取里面的控件,方法:Utype* t= (Utype*)GetWidgetFromName(TEXT("控件在UMG藍圖里面的名字"));例如:UButton *btn = (UButton*)GetWidgetFromName(TEXT("Button"));
3.點擊事件,方法:btn->OnClicked.AddDynamic(this, &UMyUserWidget::OnClickButton);
4.獲取UMG里面動畫,方法:(有點復雜,暫時沒有找到好的方法)
UProperty *porp = GetClass()->PropertyLink;
UObjectProperty *objectProp = Cast<UObjectProperty>(porp);
UObject *object = objectProp->GetObjectPropertyValue_InContainer(this);
UWidgetAnimation* anim = Cast<UWidgetAnimation>(object);
播放:PlayAnimation(anim);
遇到的問題:
1.OnClickButton方法在頭文件里面一定要加 UFUNCTION()
4.在主關卡里面增加輸入事件(Input)
1.激活輸入事件,InputComponent組件已繼承,方法:EnableInput(GetWorld()->GetFirstPlayerController());
2.綁定方法,方法:InputComponent->BindAxis("MoveForward", this, &ALevelScript::方法名);其方法參數為float;
3.點擊屏幕的回調,方法:InputComponent->BindTouch(EInputEvent::IE_Pressed, this, &ALevelScript::方法名);方法參數:const ETouchIndex::Type FingerIndex, const FVector Location
5.委托使用
1.聲明一個委托,方法:在頭文件里面增加DECLARE_DELEGATE_OneParam(FOnSend,const FString&);這個是代參數的,有多個選擇看看自己需求
2.在頭文件定義一個委托,方法:FOnSend onSend;
3.綁定方法,方法:BindUFuntion,BindUObject
4.Lambda方式處理,方法:class->onSend.BindLambda([&](const FString& str){需要執行的方法或處理});
5.發送方式,方法:OnSend.ExecuteIfBound(參數);
6.定時器
FTimerHandle timerHandler;
GetWorldTimerManager().SetTimer(timerHandler,this,&class::Funtion,0.0001F,true);
7.C++調用藍圖
1.創建C++類並增加一個函數,在函數上面增加UFUNCTION(BlueprintImplementableEvent, Category = "Test")
2.在藍圖類Functions里面找到函數名重載一下
8.藍圖調用C++類
1.創建C++類並增加一個函數,在函數上面增加UFUNCTION(BlueprintCallable, Category = "Test")
2.直接搜索函數名,在Test下面