【UE4 C++】06-绑定运动输入(实现前后移动、鼠标转向)
发布人:shili8
发布时间:2024-11-08 14:24
阅读次数:0
**UE4 C++06 - 绑定运动输入**
在 UE4 中,运动输入是指玩家通过键盘或鼠标控制游戏中的角色或物体移动。实现前后移动、鼠标转向等功能需要绑定相应的输入事件。在本文中,我们将一步步地讲解如何实现这些功能。
###1. 创建一个新项目首先,创建一个新的 UE4项目。选择 "Third-Person" 模板,并命名为 "MyGame"。
###2. 添加 C++ 类在 UE4 中,我们需要添加一个 C++ 类来处理运动输入。在 "Content Browser" 中,右键点击 "Source" 文件夹,选择 "New Class..."。命名为 "MyCharacterInput"。
###3. 实现前后移动实现前后移动的关键是绑定 W 和 S 键(或相应的方向键)。我们需要在 `MyCharacterInput` 类中添加一个函数来处理这些事件。
cpp// MyCharacterInput.hclass AMyCharacter; UCLASS() class MYGAME_API AMoveCharacter : public AActor{ GENERATED_BODY() public: UFUNCTION() void MoveForward(float Value); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Move Character", meta = (AllowPrivateAccess = "true")) class AMyCharacter* MyCharacter; }; // MyCharacterInput.cppvoid AMoveCharacter::MoveForward(float Value) { // 获取玩家角色 AMyCharacter* Character = GetCharacter(); // 如果有角色,则移动角色 if (Character != nullptr) { Character->SetVelocity(Value); } }
在 `AMyCharacter` 类中,我们需要添加一个函数来设置角色速度。
cpp// MyCharacter.hclass AMoveCharacter; UCLASS() class MYGAME_API AMyCharacter : public AActor{ GENERATED_BODY() public: UFUNCTION() void SetVelocity(float Value); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Move Character", meta = (AllowPrivateAccess = "true")) class AMoveCharacter* MoveCharacter; }; // MyCharacter.cppvoid AMyCharacter::SetVelocity(float Value) { // 设置角色速度 Velocity = Value * GetWorld()->GetDeltaSeconds(); }
###4. 实现鼠标转向实现鼠标转向的关键是绑定鼠标滚轮事件。我们需要在 `MyCharacterInput` 类中添加一个函数来处理这些事件。
cpp// MyCharacterInput.hclass AMyCharacter; UCLASS() class MYGAME_API AMoveCharacter : public AActor{ GENERATED_BODY() public: UFUNCTION() void RotateCamera(float Value); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Move Character", meta = (AllowPrivateAccess = "true")) class AMyCharacter* MyCharacter; }; // MyCharacterInput.cppvoid AMoveCharacter::RotateCamera(float Value) { // 获取玩家角色 AMyCharacter* Character = GetCharacter(); // 如果有角色,则旋转摄像机 if (Character != nullptr) { Character->SetCameraRotation(Value); } }
在 `AMyCharacter` 类中,我们需要添加一个函数来设置摄像机旋转角度。
cpp// MyCharacter.hclass AMoveCharacter; UCLASS() class MYGAME_API AMyCharacter : public AActor{ GENERATED_BODY() public: UFUNCTION() void SetCameraRotation(float Value); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Move Character", meta = (AllowPrivateAccess = "true")) class AMoveCharacter* MoveCharacter; }; // MyCharacter.cppvoid AMyCharacter::SetCameraRotation(float Value) { // 设置摄像机旋转角度 CameraRotation += Value * GetWorld()->GetDeltaSeconds(); }
###5. 绑定输入事件最后,我们需要在 `MyCharacterInput` 类中绑定 W 和 S 键(或相应的方向键)以及鼠标滚轮事件。
cpp// MyCharacterInput.hclass AMyCharacter; UCLASS() class MYGAME_API AMoveCharacter : public AActor{ GENERATED_BODY() public: UFUNCTION() void MoveForward(float Value); UFUNCTION() void RotateCamera(float Value); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Move Character", meta = (AllowPrivateAccess = "true")) class AMyCharacter* MyCharacter; }; // MyCharacterInput.cppvoid AMoveCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 绑定 W 和 S 键 PlayerInputComponent->BindAxis("MoveForward", this, &AMoveCharacter::MoveForward); // 绑定鼠标滚轮事件 PlayerInputComponent->BindAxis("RotateCamera", this, &AMoveCharacter::RotateCamera); }
通过以上步骤,我们成功实现了前后移动和鼠标转向功能。