虚幻4 C++实现物体的上下浮动

虚幻4 C++实现物体的上下浮动


  1. 新建一个C++类,命名为FloatingActor
  2. 在FloatingActor.h中声明变量floatK和floatSpeed,具体用途看注释:
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "FloatingActor.generated.h"

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

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

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

private:
    //物体运动的时间
	float runninfTime;

	UStaticMeshComponent* staticMesh;

public:
	UPROPERTY(EditAnywhere, Category = "Float|value")
		//物体上下移动的振幅
		float floatK = 20.f;

	UPROPERTY(EditAnywhere, Category = "Float|value")
		//物体上下浮动的速率
		float floatSpeed = 1.f;
};

  3. 在FloatingActor.CPP中的Tick中写入相关代码是物体发生位移:

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


#include "FloatingActor.h"
#include "Engine/StaticMesh.h"

// Sets default values
AFloatingActor::AFloatingActor()
{
 	// 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;

	staticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));

	UStaticMesh* actorMesh = LoadObject<UStaticMesh>(NULL, TEXT("StaticMesh'/Game/StarterContent/Shapes/Shape_Cone.Shape_Cone'"));

	staticMesh->SetStaticMesh(actorMesh);
}

// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
	Super::BeginPlay();
	
}

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

	//获取物体当前的位置并赋值给newLocation
	FVector newLocation = GetActorLocation();
	//计算这一帧因该上升的高度
	float deltaHeight = FMath::Sin(runninfTime + DeltaTime * floatSpeed) - FMath::Sin(runninfTime);
	//物体的高度加上这一帧因该上升的高度
	newLocation.Z += deltaHeight * floatK;
	//累计时间加上帧时间
	runninfTime += DeltaTime * floatSpeed;
	//设置物体的位置为新的位置
	SetActorLocation(newLocation);
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值