3. 写入并编译C++代码

  1. Visual Studio 中,我们会使用 Solution Explorer(解决方案浏览器) 面板来搜寻新建的C++文件。 在我们的示例中,它们被命名为FloatingActor.cppFloatingActor.h,并且将被放置于"QuickStart"项目中。

    SolutionExplorer_Files.png

    我们要开始写代码了。 本教程中所有的代码可用于完成本页面的所有指示,您可以在页面的底部位置找到它们。

  2. FloatingActor.h中,我们会在文件末尾处的终止大括号和分号之前添加以下代码:

    float RunningTime;
  3. 切换到FloatingActor.cpp,我们会在 AFloatingActor::Tick 底部的终止大括号前添加以下代码:

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

    我们刚写的代码会导致 FloatingActors 平滑地上下跳动,使用我们创建的 RunningTime 变量来随时间追溯移动的轨迹。

  4. 现在编码完成了,我们可以通过在 Solution Browser(解决方案浏览器) 中右键点击项目并选择 Build(编译) 命令,或通过点击 Unreal Editor(虚幻编辑器)Compile(编译) 按钮来进行编译。 编译成功后, 虚幻引擎 会自动载入我们的变更内容。

    CompileFromVS.png

    (在 Visual Studio 中)

    CompileFromEditor.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);
}