创建Actor类
添加相关的头文件,并声明相关组件
#include "Components/StaticMeshComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/SphereComponent.h"
#include "GameFramework/ProjectileMovementComponent.h"
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "components")
UStaticMeshComponent* MyMesh;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "components")
USphereComponent *MySphere;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "components")
UProjectileMovementComponent* MyProjectile;
构造函数中初始化,BeginPlay中动态加载资源,为StaticMeshComponent绑定组件
AMyProjectileActor::AMyProjectileActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
MyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyMesh"));
MySphere = CreateDefaultSubobject<USphereComponent>(TEXT("MySphere"));
MyProjectile = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("MyProjectile"));
RootComponent = MyMesh;
MySphere->SetupAttachment(MyMesh);
MyProjectile->SetUpdatedComponent(MyMesh);
MyProjectile->InitialSpeed = 1200.0f;
MyProjectile->MaxSpeed = 2400.0f;
MyProjectile->bRotationFollowsVelocity = true;
MyProjectile->bIsHomingProjectile = false;
MyProjectile->ProjectileGravityScale = 1.5f;
}
void AMyProjectileActor::BeginPlay()
{
Super::BeginPlay();
UStaticMesh *mesh = LoadObject<UStaticMesh>(this,TEXT("/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cone.Shape_Cone'"));
if (!mesh) {
GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Red,TEXT("mesh load failed!"));
}
MyMesh->SetStaticMesh(mesh);
MyMesh->SetRelativeScale3D(FVector(0.4f,0.4f,0.4f));
}
测试我们的子弹类型
打开关卡蓝图,编写事件