• 03UEc++【打飞艇:导弹与飞艇的碰撞事件】


    1.同理导入导弹和大陆(都不导入骨骼)

     2.点击大陆的网格体设置碰撞

     3.然后把大地拖入游戏场景

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

    1.创建导弹类Missle和敌人类Enemy,都继承于actor类

     

    2.为 Missle添加一个静态网格体组件和运动组件

    1. UPROPERTY(VisibleAnywhere)
    2. UStaticMeshComponent* Mesh;
    3. UPROPERTY(VisibleAnywhere)
    4. class UProjectileMovementComponent * MovementComponent;

    3.在源文件中引入头文件

    1. #include "Components/StaticMeshComponent.h"
    2. #include "GameFramework/ProjectileMovementComponent.h"

    4.在构造函数中初始化

    1. //创建静态网格体
    2. Mesh = CreateDefaultSubobject(TEXT("Mesh"));
    3. //静态网格体设为根组件
    4. RootComponent = Mesh;
    5. //创建移动组件
    6. MovementComponent = CreateDefaultSubobject(TEXT("MovementComponent"));
    7. //设置初始速度
    8. MovementComponent->InitialSpeed = 500.0f;

    5.在头文件中声明一个函数,用来作为重叠事件

    1. //OverlappedComponent:自身的重叠组件 OtherActor:重叠的对方 OtherComp:对方的组件
    2. UFUNCTION()
    3. void OverlapHanler(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult);

    6.此时我们想增加一个逻辑,打中一个飞艇就加分,首先我们在gamemode里面,添加分数

    1. UCLASS()
    2. class TUTDRONE_API ATutDroneGameModeBase : public AGameModeBase
    3. {
    4. GENERATED_BODY()
    5. public:
    6. //本次游戏得分
    7. UPROPERTY()
    8. int32 num;
    9. };

    7.在源文件中进行定义

    1. void AMissle::OverlapHanler(UPrimitiveComponent * OverlappedComponent, AActor * OtherActor, UPrimitiveComponent * OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
    2. {
    3. //首先判断,碰撞到的物体是否继承于AEnemy类
    4. if (OtherActor->IsA())
    5. {
    6. //该物体销毁
    7. OtherActor->Destroy();
    8. //加分
    9. ATutDroneGameModeBase * gm = Cast(GetWorld()->GetAuthGameMode());
    10. if (gm != nullptr)
    11. {
    12. gm->num++;
    13. }
    14. //自身也要炸掉
    15. this->Destroy();
    16. }
    17. }

    8.在构造函数中将改函数绑定到重叠开始事件

    1. //启动overlap事件
    2. Mesh->SetGenerateOverlapEvents(true);
    3. //设置重叠开始事件
    4. Mesh->OnComponentBeginOverlap.AddDynamic(this,&AMissle::OverlapHanler)

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

    1.为 Enemy添加一个静态网格体组件并在源文件中创建,步骤同上

    2.在头文件中,声明一个函数,作为销毁时的事件

    1. UFUNCTION()
    2. void DestroyHandler(AActor * DestroyedActor);

    3.在源文件中进行定义(未完)

    4.在构造函数中激活重叠事件并绑定销毁事件

    1. //启动overlap事件
    2. Mesh->SetGenerateOverlapEvents(true);
    3. this->OnDestroyed.AddDynamic(this, &AEnemy::DestroyHandler);

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

    1.创建对应的蓝图

     2.把两个mesh的碰撞预设都设为这个

     3.给胡萝卜模型添加一个胶囊体碰撞

    4.给飞艇自动生成一个碰撞

    在这里设置相关参数

    测试

    当重叠事件发生时,打印

    UKismetSystemLibrary::PrintString(this, TEXT("BANGBANGBANG"));

     

    敌人消失并打印出改字符串 

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

    导入音频

    1.创建音频的cue

     

     

    2.为声音添加一个衰减,随着距离衰减

    3.为飞艇添加粒子特效和声音

    1. //爆炸特效
    2. UPROPERTY(EditAnywhere)
    3. class UPartycleSystem * Explosion;
    4. //爆炸声音
    5. UPROPERTY(EditAnywhere)
    6. class USoundBase * ExplosionSound;

     4.在源文件中引入相关文件

    #include "Kismet/GamePlayStatics.h"

    5.在销毁事件函数中生成特效和声音

    1. void AEnemy::DestroyHandler(AActor * DestroyedActor)
    2. {
    3. UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), Explosion, this->GetTransform());
    4. UGameplayStatics::PlaySoundAtLocation(this, ExplosionSound, this->GetActorLocation(),2.0f);
    5. }

     

     6.在胡萝卜头文件里,添加一个声音

    1. //发射声音
    2. UPROPERTY(EditAnywhere)
    3. class USoundBase * FireSound;

    7.在源文件的构造函数中发出声音

    1. // Called when the game starts or when spawned
    2. void AMissle::BeginPlay()
    3. {
    4. Super::BeginPlay();
    5. UGameplayStatics::PlaySoundAtLocation(this, FireSound, this->GetActorLocation(), 2.0f);
    6. }

    8.在蓝图中选择声音

     

    测试:

    除了没有爆炸特效,其他都正常。

  • 相关阅读:
    错过金三银四,找工作4个月,面试15家,终于拿到3个offer,定级P7+
    嵌入式 Linux 入门(七、Linux 下的环境变量)
    set容器
    安卓:解决AndroidStudio导出Unity的Apk(APP)出现2个显示图标
    什么是集成测试?集成测试方法有哪些?
    Ascend C保姆级教程:我的第一份Ascend C代码
    Git版本管理
    如何自动化 OWASP ZAP
    Vue学习之--------全局事件总线(2022/8/22)
    java学习--day11(抽象类、接口)
  • 原文地址:https://blog.csdn.net/zhang2362167998/article/details/126830229