当前位置: 首页 > article >正文

斯坦福UE4 C++课学习补充21:击败动画

文章目录

  • 一、判断存活
  • 二、禁用输入

一、判断存活

  1. 之前在实现血量条时已有属性组件,因此可以通过健康值判断角色是否存活。
// SAttributeComponent.h
UFUNCTION(BlueprintCallable)
bool IsAlive() const;

// SurAttributeComponent.cpp
bool USurAttributeComponent::IsAlive() const
{
	return Health > 0.0f;
} 

二、禁用输入

  1. 在角色倒地死亡后,自然是不能再操作的,因此我们需要禁用玩家的控制输入。
  2. GetController()函数用于获取一个角色当前的控制器。这个返回的控制器通常是 AController类的一个实例,这是一个抽象基类。如果需要访问更具体的控制器类的功能,比如APlayerController,就需要使用 Cast来将返回的控制器安全地转换为更具体的类型。

Cast<>是类型安全的,它在转换不成功时会返回nullptr

  1. DisableInput()函数,这是一个用于临时禁用玩家控制的函数。当调用一个角色或控制器上的DisableInput(APlayerController* PlayerController) 时,它会阻止该控制器接收任何输入,这意味着玩家将不能通过键盘、鼠标或游戏手柄来控制该角色。
  • 当需要重新启用输入时,可以调用 EnableInput(APlayerController* PlayerController)
//SCharacter.cpp
ASurCharacter::OnHealthChanged(AActor* InstigatorActor, USurAttributeComponent* OwningComp, float NewHealth, float Delta)
{
	// 血量小于0且(包括治疗)血量变化也小于0
	if (NewHealth <= 0 && Delta < 0) {
		APlayerController* PC = Cast<APlayerController>(GetController());
		DisableInput(PC);
	}
}
  1. 利用PostInitializeComponents在组件初始化后完毕后进行动态绑定,就可以让这个事件生效。 写在此处是因为我们在广播时要确定OnHealthChanged和相关蓝图操作已被初始化完成

PostInitializeComponents()主要用于那些依赖于组件完全初始化的代码。由于在构造函数中组件可能还没有完全初始化,所以在那里写依赖于组件的初始化代码可能会导致错误或不稳定的行为。它会在在对象的构造过程的最后阶段,所有的组件已被创建和配置,但对象尚未开始游戏逻辑时调用。

  1. 一般来说,绑定事件应当尽早进行,以确保当事件发生时,监听器已经准备就绪。PostInitializeComponents() 提供了一个确保所有组件都已初始化,且在对象的生命周期中相对早期的点,这是进行此类绑定的理想位置。
void ASurCharacter::PostInitializeComponents()
{
	Super::PostInitializeComponents();

	AttributeComp->OnHealthChanged.AddDynamic(this, &ASurCharacter::OnHealthChanged);
}

http://www.kler.cn/a/291464.html

相关文章:

  • 25.UE5时间膨胀,慢动作,切换地图,刷BOSS
  • 小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
  • BERT模型中的嵌入后处理与注意力掩码
  • 【网页设计】CSS3 进阶(动画篇)
  • UniApp在Vue3的setup语法糖下自定义组件插槽详解
  • 亿咖通科技应邀出席微软汽车行业智享会,分享ECARX AutoGPT全新实践
  • Snipaste:一款强大的截图与贴图工具
  • 汽车电子行业知识:什么是车辆定位技术
  • UNIX及UNIX-like环境下的调试工具gdb使用方法
  • 【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
  • ES之三:springboot集成ES
  • Django+Vue家居全屋定制系统的设计与实现
  • chapter09-OOP高级部分——(单例模式)——day12
  • 【图灵完备 Turing Complete】游戏经验攻略分享 Part.3 存储器
  • Spring Boot如何解决跨域问题?
  • 区块链开发解决方案有哪些
  • 高防IP的作用有哪些?
  • 羲和能源大数据平台——Python数据绘图方法
  • 前端XSS 攻击与SQL注入 处理
  • 本地电脑交叉编译ffmpeg 到 windows on arm64
  • 机器学习课程学习周报十
  • Qlik数据集成 | Qlik 连续 14 年稳居 2024 Gartner® ABI Magic Quadrant™ 领导者
  • --- 数据结构 链表 --- java
  • pytorch pyro更高阶的优化器会使用更高阶的导数,比如二阶导数(Hessian矩阵)
  • Verilog基础,原码,反码与补码的概念
  • 【面试八股总结】MySQL 锁:全局锁、表级锁、行级锁