// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/SphereComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Collectables.generated.h"
UCLASS()
class PACMAN_API ACollectables : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ACollectables();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// EditDefaultsOnly 可以在编辑器里面编辑,EditDefaultsOnly 只能对其原型进行修改;Category 分类
UPROPERTY(EditDefaultsOnly, Category = Collectable)
UStaticMeshComponent* CollectableMesh;
UPROPERTY(EditDefaultsOnly, Category = Collectable)
USphereComponent* BaseCollisionComponent;
// EditAnyWhere 不仅可以对其原型进行修改,还可以对其实例修改
UPROPERTY(EditAnywhere, Category = Collectable)
bool bIsSuperCollectable;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "Public/Collectables.h"
#include "Public/UObject/ConstructorHelpers.h"
// Sets default values
ACollectables::ACollectables()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
// 等于true,会使得下面这个函数(Tick)每帧运行,这个是豆的,不需要这个,设置成false
PrimaryActorTick.bCanEverTick = false;
// 开启碰撞功能(默认不开启碰撞功能)
SetActorEnableCollision(true);
// 创建网格组件
CollectableMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("CollectableMesh"));
// 创建碰撞体组件
BaseCollisionComponent = CreateDefaultSubobject<USphereComponent>(TEXT("BaseCollisionComponent"));
// 将 碰撞体 和 网格 绑定到一起
CollectableMesh->AttachTo(BaseCollisionComponent);
// 使用 ConstructorHelpers 需要引入的头文件:#include "Public/UObject/ConstructorHelpers.h" 找到了想要的变成的球体
static ConstructorHelpers::FObjectFinder<UStaticMesh> Sphere(TEXT("StaticMesh'/Engine/BasicShapes/Sphere.Sphere'"));
if (Sphere.Succeeded())
{
CollectableMesh->SetStaticMesh(Sphere.Object);
}
// 指定球的大小和尺寸
CollectableMesh->SetWorldScale3D(FVector(0.3, 0.3, 0.3));
BaseCollisionComponent->SetSphereRadius(16);
}
// Called when the game starts or when spawned
void ACollectables::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ACollectables::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// 等于true,会使得下面这个函数(Tick)每帧运行,这个是豆的,不需要这个,设置成false
PrimaryActorTick.bCanEverTick = true;
使用UStaticMeshComponent 需要引入的头文件:
#include "Components/StaticMeshComponent.h"
使用 ConstructorHelpers 需要引入的头文件:
#include "Public/UObject/ConstructorHelpers.h"