轉貼:UE4 代碼總結

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下面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章