美文网首页
编程快速入门

编程快速入门

作者: wjundong | 来源:发表于2021-07-18 17:40 被阅读0次

    创建首个代码项目,并添加新的C++类.

    创建 Actor 子类

    Actor 是可在场景中放置的最基本对象类型. 创建Actor 子类, 命名为 FloatingActor

    添加组件

    添加静态网络组件, 以使该 Actor 在场景中可见. 这里首先声明了静态网络组件的成员变量:

    // 声明静态网络组件
    UPROPERTY(VisibleAnywhere)
        UStaticMeshComponent* VisualMesh;
    

    UPROPERTY(VisibleAnywhere) 宏定义使得我们可以在编辑器中可以看到该组件.

    在构造函数中初始化组件

    FloatingActor 类的默认构造函数中:

    // 创建静态网络组件并将其设为 FloatingActor 的根组件
    VisualMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
    VisualMesh->SetupAttachment(RootComponent);
    
    // 设置静态网络组件所绑定的资源
    static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));
    if (CubeVisualAsset.Succeeded())
    {
        VisualMesh->SetStaticMesh(CubeVisualAsset.Object);
        VisualMesh->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
    }
    

    上述代码首先通过CreateDefaultSubobject创建静态网络组件, 并把该组件作为我们这个 FloatingActor 类的根组件, 因为 UStaticMeshComponent 组件继承自 UPrimitiveComponent(基元组件, 是拥有几何表示的场景组件), 而场景组件具有位置行为, 所以当把该静态网络组件设为根组件时, 其位置信息就代表了我们的 FloatingActor 类的位置信息.

    接下来是使用 FObjectFinder 函数来查找资源目录下的 Shape_Cube (方块模型), 如果找到, 我们就把它绑定到我们的静态网络组件, 并设置静态网络组件的初始位置信息为 (0, 0, 0), 该过程也可以使用编辑器来完成, 编译后, 拖入场景中会对该类进行实例化, 从而调用该构造函数, 因为创建静态网络组件和绑定到根组件的代码已经执行完成, 这时在细节栏里可以看到该静态网络组件的相关设置, 其中就有设置其绑定的资源.

    在 Tick 函数中控制行为

    // 获取位置信息和旋转信息
    FVector NewLocation = GetActorLocation();
    FRotator NewRotation = GetActorRotation();
    
    // 获取游戏运行时间
    float RunningTime = GetGameTimeSinceCreation();
    
    // 计算Δt内高度变化值 Δh = sin(t + Δt) - sin(t)
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;    
    
    // 计算Δt内角度变化值
    float DeltaRotation = DeltaTime * 20.0f;  
    NewRotation.Yaw += DeltaRotation;
    
    // 将位置信息和旋转信息同步到我们的 FloatingActor
    SetActorLocationAndRotation(NewLocation, NewRotation);
    

    Tick 函数在每一帧画面刷新时都会调用, 并传递两帧之间的时间差 Δt 参数, 我们利用该参数计算 FloatingActor 的位置信息和旋转信息应该如何变化. 上述代码实现了 FloatingActor 的上下浮动并顺时针旋转.

    相关文章

      网友评论

          本文标题:编程快速入门

          本文链接:https://www.haomeiwen.com/subject/iceapltx.html