13uec++多人游戏【创建和使用自定义组件】

创建组件的c++类,一共有两种组件类,然后我们选择actor的那一种。

路径也加上组件后缀 

 那么场景组件和actor组件区别是什么呢

场景组件主要是能看到;

actor组件看不到,纯功能性组件。

 在类中添加一个成员变量

	//当前生命值
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "HealthComponent")
	float Health;

 这里名字改成了COOP

 编译,然后打开玩家蓝图,添加组件

我们发现该组件在COOP分组里面

=================

回到组件c++类,继续添加成员

	//最大生命值
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "HealthComponent")
	float DefaultHealth;

 在构造函数中将其设置成100

DefaultHealth = 100;

 在游戏开始函数里,将做大健康值赋予当前健康值

// Called when the game starts
void USHealthComponent::BeginPlay()
{
	Super::BeginPlay();

	Health = DefaultHealth;
	
}

添加一个函数,用来处理伤害

//承受伤害
UFUNCTION()
	void HandleTakeAnyDamage(AActor* DamagedActor, float Damage, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser);

 定义这个函数

void USHealthComponent::HandleTakeAnyDamage(AActor * DamagedActor, float Damage, const UDamageType * DamageType, AController * InstigatedBy, AActor * DamageCauser)
{
	//当前生命值<=0,就不做任何处理
	if (Health <= 0)
	{
		return;
	}
	//承受伤害
	Health = FMath::Clamp(Health - Damage, 0.0f, DefaultHealth);
}

 导入actor的头文件

#include "GameFramework/Actor.h"

在游戏开始函数里,调用伤害函数

// Called when the game starts
void USHealthComponent::BeginPlay()
{
	Super::BeginPlay();

	Health = DefaultHealth;
	
	AActor * Owner = GetOwner();
	if (Owner)
	{
		Owner->OnTakeAnyDamage.AddDynamic(this, &USHealthComponent::HandleTakeAnyDamage);
	}
}

为了方便测试

我们添加一个输出日志,打印生命值

UE_LOG(LogTemp, Log, TEXT("Health %s"), *FString::SanitizeFloat(Health));

编译,然后打开靶子蓝图,添加一个生命值组件

并且我们向场景中拉入一个新的玩家类 

我们发现了一个bug,我们打其他玩家,没有溅血的效果。

是因为胶囊体的阻挡缘故。

我们这样设置胶囊体的碰撞,这样子弹就可以打在网格体上了

运行

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无情的阅读机器

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

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

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

打赏作者

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

抵扣说明:

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

余额充值