日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

传送,条件加速 Learn Unreal Engine (with C++)

發布時間:2023/12/10 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传送,条件加速 Learn Unreal Engine (with C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文以吃豆人游戲為例UE4項目: 自制UE4 小游戲 (gitee.com)

傳送

  • pawn進入box觸發OnActorBeginOverlap
  • 獲取目標位置,下一幀將pawn坐標更改為目標位置
    • 首先需要重疊函數與開始重疊事件綁定

      OnActorBeginOverlap.AddDynamic(this, &ATeleporterActor::OnOverlapBegin);
    • 頭文件聲明

      UPROPERTY(EditAnywhere)ATeleporterActor* Target = nullptr; //目標位置,在藍圖中設置比較方便UPROPERTY(EditAnywhere)USoundCue* TeleportSound;//聲音UFUNCTION()void OnOverlapBegin(AActor* TeleporterActor, AActor* OtherActor);//觸發重疊后執行的操作
    • 實現

      void ATeleporterActor::TeleportToTarget(AActor * Actor) {//獲取傳送目標名為"Spawn"的場景組件USceneComponent* TargetSpawn = Cast<USceneComponent>(Target->GetDefaultSubobjectByName("Spawn"));UGameplayStatics::PlaySound2D(this, TeleportSound);Actor->SetActorLocation(TargetSpawn->GetComponentLocation());//更改坐標 }void ATeleporterActor::OnOverlapBegin(AActor * TeleporterActor, AActor * OtherActor) {if (OtherActor->ActorHasTag("Pacman")) {//下一幀,調用傳送函數GetWorldTimerManager().SetTimerForNextTick([OtherActor, this]() { TeleportToTarget(OtherActor); });} }

    Target->GetDefaultSubobjectByName獲取名為xxx的子對象,例如本游戲中就是獲取ATeleporterActor名為spawn的子對象

    條件加速

    當吃豆人吃到特殊的豆子的時候就會加速,這使用了動態多播1主要目的是降低對象之間的耦合,代碼更加清晰簡潔

    動態多播:觀察者模式, 動態即支持藍圖序列化,即可在藍圖中綁定事件,但藍圖獲取不到在C++中定義的動態多播的實例引用,即使用元數據 BlueprintReadWrite 標記也不行,但可以通過 【Assign 實例名稱】 的藍圖節點為在C++中定義的動態多播對象綁定新的委托函數

  • 加速豆被吃操作綁定到豆被吃事件上
  • 每次有豆被吃事件發生的時候,都會廣播當前豆子的類型
  • 普通豆被吃無反應
  • 加速豆被吃就會執行加速豆被吃事件
    • 注冊動態多播

      DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFoodieEatenEvent, EFoodieType, FoodieType);
    • 綁定事件

      忽略下面的error,不知道為什么,重新打開的時候就這樣了,但還能正常運行…

    • 廣播豆子類型,當豆子被吃掉的時候

      void AFoodie::Consume() {UGameplayStatics::PlaySound2D(this, ConsumptionSound);FoodieEatenEvent.Broadcast(FoodieType); // 廣播類型Destroy(); }


  • https://mp.weixin.qq.com/s/Vliuv3jfUWU_1VvWSBx70w ??

  • 總結

    以上是生活随笔為你收集整理的传送,条件加速 Learn Unreal Engine (with C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。