ThirdPersonMPProjectile.h
// 版权所有 1998-2019 Epic Games, Inc。保留所有权利。
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ThirdPersonMPProjectile.generated.h"
class UParticleSystem;
class UStaticMeshComponent;
class USphereComponent;
class UProjectileMovementComponent;
class UDamageType;
UCLASS()
class THIRDPERSONMP_API AThirdPersonMPProjectile : public AActor
{
GENERATED_BODY()
public:
// 为此Actor的属性设置默认值
AThirdPersonMPProjectile();
// 此投射物的基本组件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
USphereComponent* SphereComponent;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
UStaticMeshComponent* StaticMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
UProjectileMovementComponent* ProjectileMovementComponent;
UPROPERTY(EditAnywhere, Category = "Effects")
UParticleSystem* ExplosionEffect;
//此投射物将造成的伤害类型和伤害。
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Damage")
TSubclassOf<UDamageType> DamageType;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Damage")
float Damage;
protected:
// 当游戏开始或生成时调用
virtual void BeginPlay() override;
UFUNCTION()
void OnProjectileImpact(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
void Destroyed() override;
public:
// 每一帧调用
virtual void Tick(float DeltaTime) override;
};
ThirdPersonMPProjectile.cpp
// 版权所有 1998-2019 Epic Games, Inc。保留所有权利。
#include "ThirdPersonMPProjectile.h"
#include "Components/SphereComponent.h"
#include "Components/StaticMeshComponent.h"
#include "GameFramework/ProjectileMovementComponent.h"
#include "GameFramework/DamageType.h"
#include "Particles/ParticleSystem.h"
#include "Kismet/GameplayStatics.h"
#include "UObject/ConstructorHelpers.h"
#include "IDamageInterface.h"
// 设置默认值
AThirdPersonMPProjectile::AThirdPersonMPProjectile()
{
// 将此Actor设置为每一帧调用Tick()。如果不需要,可以关闭此选项来提高性能。
PrimaryActorTick.bCanEverTick = true;
bReplicates = true;
DamageType = UDamageType::StaticClass();
Damage = 10.0f;
static ConstructorHelpers::FObjectFinder<UParticleSystem> DefaultExplosionEffect(TEXT("/Game/StarterContent/Particles/P_Explosion.P_Explosion"));
if (DefaultExplosionEffect.Succeeded())
{
ExplosionEffect = DefaultExplosionEffect.Object;
}
//定义将作为投射物及其碰撞的根组件的SphereComponent。
SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("RootComponent"));
SphereComponent->InitSphereRadius(12.5f);
SphereComponent->SetCollisionProfileName(TEXT("BlockAllDynamic"));
RootComponent = SphereComponent;
//在击中事件上注册此投射物撞击函数。
if (GetLocalRole() == ROLE_Authority)
{
SphereComponent->OnComponentHit.AddDynamic(this, &AThirdPersonMPProjectile::OnProjectileImpact);
}
//定义将作为视觉呈现的网格体。
static ConstructorHelpers::FObjectFinder<UStaticMesh> DefaultMesh(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
StaticMesh->SetupAttachment(RootComponent);
if (DefaultMesh.Succeeded())
{
StaticMesh->SetStaticMesh(DefaultMesh.Obje

这个博客详细介绍了在Unreal Engine中创建一个第三人称多人在线游戏项目的部分代码,包括投射物(ThirdPersonMPProjectile)的实现,它拥有爆炸效果和伤害计算功能。此外,还涵盖了角色(ThirdPersonMPCharacter)的健康值系统、射击机制以及与投射物的交互。代码展示了如何处理碰撞检测、生命值更新以及触控输入等关键功能。
最低0.47元/天 解锁文章
2566

被折叠的 条评论
为什么被折叠?



