• 自己用U++写的植物大战僵尸豌豆射手部分逻辑记录


    Plants.h:

    // Fill out your copyright notice in the Description page of Project Settings.

    #pragma once

    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "Plants.generated.h"

    UCLASS()
    class HOWTO_AUTOCAMERA_API APlants : public AActor
    {
        GENERATED_BODY()
        
    public:    
        // Sets default values for this actor's properties
        APlants();

    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;

    public:    
        // Called every frame
        virtual void Tick(float DeltaTime) override;
        UFUNCTION(BlueprintCallable)
            void LoopDo();
        UPROPERTY(EditAnywhere)
            UStaticMeshComponent* mesh;
        UPROPERTY(EditAnywhere)
            UStaticMesh* staticMesher;

    };


    Plants.cpp

    // Fill out your copyright notice in the Description page of Project Settings.


    #include "Plants.h"
    #include "PlantsBullet.h"
    #include "Engine.h"

    // Sets default values
    APlants::APlants()
    {
         // 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;
        mesh = CreateDefaultSubobject(TEXT("MyComponent"));
        mesh->SetupAttachment(GetRootComponent());
        static ConstructorHelpers::FObjectFinder SphereVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
        if (SphereVisualAsset.Succeeded()) {
            mesh->SetStaticMesh(SphereVisualAsset.Object);
            mesh->SetWorldScale3D(FVector(1.0f));
            mesh->SetWorldLocation(FVector(0.0f, 0.0f, 50.0f));
        }
    }

    // Called when the game starts or when spawned
    void APlants::BeginPlay()
    {
        Super::BeginPlay();
        FTimerHandle TimeHandle;
        GetWorld()->GetTimerManager().SetTimer(TimeHandle, this, &APlants::LoopDo, .5f, true);
        return;
    }

    void APlants::LoopDo() {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("22"));
        FTransform SpawnLocation = this->GetActorTransform();
        GetWorld()->SpawnActor(APlantsBullet::StaticClass(), SpawnLocation);

        return;
    }

    // Called every frame
    void APlants::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);

    }


    PlantBullet.h

    // Fill out your copyright notice in the Description page of Project Settings.

    #pragma once

    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "PlantsBullet.generated.h"

    UCLASS()
    class HOWTO_AUTOCAMERA_API APlantsBullet : public AActor
    {
        GENERATED_BODY()
        
    public:    
        // Sets default values for this actor's properties
        APlantsBullet();

    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;

    public:    
        // Called every frame
        virtual void Tick(float DeltaTime) override;
        UFUNCTION(BlueprintCallable)
            void DestroyMyself();
        UPROPERTY(EditAnywhere)
            UStaticMeshComponent *mesh;
        UPROPERTY(EditAnywhere)
            UStaticMesh* staticMesher;
    };


    PlantsBullets.cpp

    // Fill out your copyright notice in the Description page of Project Settings.


    #include "PlantsBullet.h"

    // Sets default values
    APlantsBullet::APlantsBullet()
    {
         // 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;
        mesh = CreateDefaultSubobject(TEXT("MyComponent"));
        mesh->SetupAttachment(GetRootComponent());
        static ConstructorHelpers::FObjectFinder SphereVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
        if (SphereVisualAsset.Succeeded()) {
            mesh->SetStaticMesh(SphereVisualAsset.Object);
            mesh->SetWorldScale3D(FVector(0.1f));
            mesh->SetWorldLocation(FVector(0.0f, 0.0f, 50.0f));
        }
    }

    // Called when the game starts or when spawned
    void APlantsBullet::BeginPlay()
    {
        Super::BeginPlay();
        FTimerHandle TimerHandle;
        GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &APlantsBullet::DestroyMyself, 5.f, false);
    }

    void APlantsBullet::DestroyMyself() {
        this->Destroy();
    }

    // Called every frame
    void APlantsBullet::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);
        FVector newLocation = this->GetActorLocation() + this->GetActorForwardVector() * 10;
        FRotator newRotation = this->GetActorRotation();
        this->SetActorLocation(newLocation);
        
    }

  • 相关阅读:
    【typescript】面向对象(下篇),包含接口,属性的封装,泛型
    你在MySQL中加了什么锁,导致死锁的?
    第五章 Linux常用应用软件
    李宏毅机器学习作业2——音位分类预测
    算法-线行表
    51单片机学习:ADC模数转换实验--光敏电阻AD采集
    PointNet 和 PointNet++ 作者讲座学习笔记
    静态时序分析-OCV和time derate
    js/axios/umi-request 根据后端返回的二进制流下载文件
    三. Docker的安装Mysql并挂载
  • 原文地址:https://blog.csdn.net/qqQQqsadfj/article/details/125858007