[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
標記變量為可復制的需要三步:
具體的例子在我的另一篇筆記[UE筆記]Weapon Class (1)有提及
戰斗組件
保持項目有序,與戰斗相關的內容,都添加到單獨的戰斗組件中。
組件的創建
類似于創建C++類,在項目資源管理器中右鍵創建新的C++類。選擇相應帶有Component字樣的即可。
根據項目的文件結構,組件也應當歸于組件的單獨的文件夾中。下圖是同層級的文件結構
新建文件之后對于.cpp文件應當立即做的事情是:
原因是.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即可。
武器類型及其區別
兩種武器類型:
EditAnywhere與VisibleAnywhere區別
參考這篇文章UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的區別
編碼規范
官方文檔:代碼規范
偶然翻到的官方提供的代碼規范,雖然里面包含了很多zzzq,但是除去這些仍有很多學習的
總結
- 上一篇: 怎么翻译图片上的英文?翻译图片的方法分享
- 下一篇: windows通信端口初始化失败_三菱Q