zoukankan      html  css  js  c++  java
  • UE4 UMG

    转自:https://www.cnblogs.com/kadaj/p/6412937.html

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

  • 相关阅读:
    jquery获取input的checked属性
    归并排序法
    Pascal's Triangle II —LeetCode
    01背包之求第K优解——Bone Collector II
    Intellij IDEA 14隐藏被排除的文件夹
    LeetCode——Majority Element
    多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区
    LeetCode——Restore IP Addresses
    LeetCode——Pascal's Triangle
    LeetCode——Permutations
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/9298094.html
Copyright © 2011-2022 走看看