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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[UE笔记]杂项3

發布時間:2023/12/29 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [UE笔记]杂项3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

按鍵、操作與映射

還是要強調BindACtion或者BindAxis那里第一個參數名字要和編輯器里設置的對應

總體邏輯:

第一步是先為相應的鍵位配置好映射

現在有了映射,引擎在按下相應的按鍵之后知道有一個操作被觸發了,但是不知道觸發時應當干啥。所以得把一個實現這個操作的函數給實現,然后告訴(綁定到)引擎,這樣引擎就知道在操作觸發時調用哪個函數進行處理。

所以第二步是對應函數的綁定。

綁定通過在SetupPlayerInputComponent函數中進行設置。其中綁定操作映射的函數是BindAction,綁定軸映射的函數是BindAxis。應當出現在角色的.h和.cpp文件中(因為是角色動彈),用例如下:

.h文件的public部分:

// Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

.cpp文件:

void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {Super::SetupPlayerInputComponent(PlayerInputComponent);PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);PlayerInputComponent->BindAction("Equip", IE_Pressed, this, &ABlasterCharacter::EquipButtonPressed);// bind movement functions to axis mappingPlayerInputComponent->BindAxis("MoveForward", this, &ABlasterCharacter::MoveForward);PlayerInputComponent->BindAxis("MoveRight", this, &ABlasterCharacter::MoveRight);PlayerInputComponent->BindAxis("Turn", this, &ABlasterCharacter::Turn);PlayerInputComponent->BindAxis("LookUp", this, &ABlasterCharacter::LookUp); }

然后第三步是對應函數的實現。實現的思路主要集中在修改角色這個巨大的狀態機。

Replicated Variable

標記變量為可復制的需要三步:

  • 在聲明處使用UPROPERTY(Replicated)修飾該變量
  • 注冊它
  • 重寫GetLifeTimeReplicatedProps
  • 具體的例子在我的另一篇筆記[UE筆記]Weapon Class (1)有提及

    戰斗組件

    保持項目有序,與戰斗相關的內容,都添加到單獨的戰斗組件中。

    組件的創建

    類似于創建C++類,在項目資源管理器中右鍵創建新的C++類。選擇相應帶有Component字樣的即可。

    根據項目的文件結構,組件也應當歸于組件的單獨的文件夾中。下圖是同層級的文件結構

    新建文件之后對于.cpp文件應當立即做的事情是:

  • 修改去掉#include語句中的內容改為#include "CombatComponent.h"。
  • PrimaryComponentTick.bCanEverTick設置為false
  • 原因是.cpp文件已經和.h文件位于同一個文件夾內,此時不需要再包含上級文件夾,否則找不到對應的頭文件。

    而Tick僅在應當進行是才設為true。組件中聲明的TickComponent即類似角色的Tick函數。

    組件與角色的關聯與初始化

    在定義角色的.h文件中的private部分中,添加指向組件的指針。

    UPROPERTY(VisibleAnywhere) class UCombatComponent* Combat;

    戰斗組件涉及的很多游戲玩法核心內容(如武器的裝備與開火)很重要,因此放在private中。由于是角色持有該組件,故而在角色的文件中添加變量

    其中,對于該組件的指針類型的確定,來到組件的.cpp文件中,查看任意函數定義,由其命名空間可推知。

    void UCombatComponent::BeginPlay() {Super::BeginPlay();// ...}

    并在角色的.cpp文件的構造函數中進行構造:

    Combat = CreateDefaultSubobject<UCombatComponent>(TEXT("CombatComponent")); Combat->SetIsReplicated(true);

    對于此,類似的代碼可以參見官方關于將組件添加到Actor的教程的教程:將組件添加到Actor

    不難發現組件的初始化方式即為上述代碼的第一行。

    另一方面,組件內部可能有很多元素要被復制,因此考慮將組件設置為可復制的。即第二行代碼。由于組件的特殊性,不需要注冊和使用GetLifetimeReplicatedProps,僅設為true即可。


    武器類型及其區別

    兩種武器類型:

  • 射彈(Projectile)武器
  • 命中掃描(HitScan)武器
  • EditAnywhere與VisibleAnywhere區別

    參考這篇文章UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的區別

    編碼規范

    官方文檔:代碼規范

    偶然翻到的官方提供的代碼規范,雖然里面包含了很多zzzq,但是除去這些仍有很多學習的

    總結

    以上是生活随笔為你收集整理的[UE笔记]杂项3的全部內容,希望文章能夠幫你解決所遇到的問題。

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