【UE5 C++】访问修饰符public/protected/private继承

本文详细介绍了Java中访问控制的三种修饰符:public、private和protected,以及它们在类与子类之间的继承行为。通过实例展示了不同修饰符如何影响类成员的可见性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

限制类与类之间访问级别的方法

public

在类中创建一个public的部分,即" public: ",public之下的所有内容都是公共的,可以在类之间访问

private(最常见)

如若没有指明修饰符,则默认为private
不能在类的外部(包括子类)访问类中属性与方法

protected

类似于private,但是它可以在子类中被访问

限制子类中变量访问级别的方法

public继承(最常见)
class Mut : public Dog 

代表子类所有的属性和方法的访问修饰符不变

protected继承
class Mut : protected Dog 

父类中的public变为protected
protected和private不变

private继承
class Mut : private Dog 

都变成private


参考:
https://www.bilibili.com/video/BV1Dd4y1R7VS?p=54&vd_source=abf3407e623fe554d6fad989b8955a48

### UE5 C++ 控制角色运动实现方法 在 Unreal Engine 5 (UE5) 中使用 C++ 控制角色或物体的运动主要通过 `ACharacter` 类及其派生类完成。为了使角色能够响应输入并执行相应的动作,通常会重写虚函数 `SetupPlayerInputComponent()` 来配置玩家输入组件。 #### 配置玩家输入组件 当创建一个新的角色蓝图时,默认情况下已经包含了基本的输入绑定设置。如果要完全用 C++ 实现,则可以在头文件中声明用于处理不同方向移动的方法: ```cpp UCLASS() class YOURGAME_API AYourGameCharacter : public ACharacter { GENERATED_BODY() protected: virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; private: /** 移动事件 */ UFUNCTION() void MoveForward(float Value); UFUNCTION() void MoveRight(float Value); }; ``` 接着,在 `.cpp` 文件内具体定义这些函数的行为方式,并调用父类中的相应接口来进行实际的动作操作[^1]。 对于上述提到的具体实现可以如下所示: ```cpp void AYourGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 设置按键重复触发 PlayerInputComponent->bConsumeCapturedInputs = true; // 绑定轴向输入到对应的成员函数 PlayerInputComponent->BindAxis("MoveForward", this, &AYourGameCharacter::MoveForward); PlayerInputComponent->BindAxis("MoveRight", this, &AYourGameCharacter::MoveRight); } ``` 这里利用了 `BindAxis` 方法将虚拟摇杆或其他连续变化类型的控制器映射到了特定的功能上。每当检测到对应键位发生变化时就会自动回调指定的对象方法[^4]。 #### 处理移动逻辑 接下来就是编写具体的移动逻辑部分。这涉及到物理模拟、动画播放等多个方面的工作。下面是一个简单的例子展示如何根据传入的速度参数调整角色的位置: ```cpp void AYourGameCharacter::MoveForward(float Value) { if ((Controller != nullptr) && (Value != 0.0f)) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0.f, Rotation.Yaw, 0.f); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(Direction, Value * SpeedMultiplier); // SpeedMultiplier 是速度倍率变量 } } void AYourGameCharacter::MoveRight(float Value) { if (Value != 0.0f) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0.f, Rotation.Yaw, 0.f); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(Direction, Value * SpeedMultiplier); } } ``` 这段代码片段展示了如何计算当前视角下的前进/右移矢量,并将其应用给角色对象以改变其位置。注意这里的 `SpeedMultiplier` 可以用来调节整体移动速率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜_tu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值