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


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

    路径也加上组件后缀 

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

    场景组件主要是能看到;

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

     在类中添加一个成员变量

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

     这里名字改成了COOP

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

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

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

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

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

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

    DefaultHealth = 100;

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

    1. // Called when the game starts
    2. void USHealthComponent::BeginPlay()
    3. {
    4. Super::BeginPlay();
    5. Health = DefaultHealth;
    6. }

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

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

     定义这个函数

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

     导入actor的头文件

    #include "GameFramework/Actor.h"

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

    1. // Called when the game starts
    2. void USHealthComponent::BeginPlay()
    3. {
    4. Super::BeginPlay();
    5. Health = DefaultHealth;
    6. AActor * Owner = GetOwner();
    7. if (Owner)
    8. {
    9. Owner->OnTakeAnyDamage.AddDynamic(this, &USHealthComponent::HandleTakeAnyDamage);
    10. }
    11. }

    为了方便测试

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

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

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

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

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

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

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

    运行

     

  • 相关阅读:
    联合体UNION的内存占用计算
    8-Arm PEG-DBCO,八臂-聚乙二醇-二苯基环辛炔,用于修饰生物分子
    C语言进阶第六课-----------字符分类函数和内存的开辟
    JSON从入门到大师
    漏洞复现 - - - 未授权访问漏洞Redis
    pycharm交互式编程 python console
    NVIDIA Jetson TX2 安装ORB-SLAM3 ROS 错误总结
    Swin Transformer网络模型
    go进阶语法10问
    Linux systemd 定时任务
  • 原文地址:https://blog.csdn.net/zhang2362167998/article/details/127782543