4. 测试您的代码

  1. 虚幻编辑器 中,找到 Content Browser(内容浏览器) ,并展开名称为"C++类"的文件夹、 在该文件夹中,有一个包含了 Actor 类的 FloatingActor 的"QuickStart"文件夹。

    ClassInContentBrowser.png

  2. 我们可以直接把 FloatingActor 类拖曳到 Level Editor(关卡编辑器) 窗口来创建世界中 FloatingActor 的实例。 我们会在 Level Editor(关卡编辑器)World Outliner(世界大纲视图) 中选择它,它在其中的名称为 "FloatingActor1"。 它的 Components(组件) 和其它属性可以在 Details(详细信息) 面板中看到。

    WorldOutliner.png

  3. FloatingActor 应该在游戏中可见。 在选择了它后,我们可以在 Details Panel(详细信息面板) 中点击 Add Component(添加组件) ,然后选择 Cone(椎体) 从而赋予它简单的可视化表现。

    AddStaticMesh.png

  4. 现在自定义的 Actor 已经完成了,让我们把它移动到明显的位置。 我们可以用鼠标左键在世界中选择并拖曳内容,或者我们也可以手动来移动它。 如需手动移动,我们可以在 Level Editor(关卡编辑器)World Outliner(世界大纲视图) 中选择它,然后使用 Details Panel(详细信息面板) 来选择"FloatingActor1 (实例)"。 我们现在可以直接编辑FloatingActor1的 Transform(变换)Location(位置) 域了。 让我们把X设置为-200,把Z设置为200。这样我们就可以在场景中的桌子上放置"FloatingActor1"了。

    SetActorLocation.png

  5. 按下 Play(播放) 按钮,然后观看椎体的上下浮动!

    MovingCone.png


Finished Code

FloatingActor.h

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"

UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
    GENERATED_BODY()

public: 
    // 设置此actor属性的默认值
    AFloatingActor();

    // 当游戏开始或生成时调用
    virtual void BeginPlay() override;

    // 在每一帧调用
    virtual void Tick( float DeltaSeconds ) override;

    float RunningTime;
};

FloatingActor.cpp

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.

#include "QuickStart.h"
#include "FloatingActor.h"

// 设置默认值
AFloatingActor::AFloatingActor()
{
    // 将此actor设置为在每一帧都调用Tick()。  如果您不需要这项功能,您可以关闭它以改善性能。
    PrimaryActorTick.bCanEverTick = true;

}

// 当游戏开始或生成时调用
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// 在每一帧调用
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的系数进行缩放
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}