美文网首页
游戏控制的摄像机

游戏控制的摄像机

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

    了解如何激活和切换不同的视角

    创建 Actor 子类

    创建 Actor 子类, 命名为 CameraDirector. 我们需要创建一个 C++ 类来控制摄像机视图, 这里选择该类为 Actor 子类, 因为 Actor 是可在场景中放置的最基本对象类型, 这样我们可以把这个相机控制器拖到场景中. 然后让它来控制场景中的各个相机对象.

    创建相机变量指针

    在类的 public 中加入两个相机变量指针, 用来指向场景中的相机变量:

    UPROPERTY(EditAnywhere)
    AActor* CameraOne;
    
    UPROPERTY(EditAnywhere)
    AActor* CameraTwo;
    
    float TimeToNextCameraChange;
    

    UPROPERTY 宏使得变量对编辑器可见。这样, 当我们启动游戏或在将来的工作会话中重新载入关卡或项目时,实例化对象的这些变量中设置的值将不会被重置

    EditAnywhere 关键字允许我们直接在编辑器中设置 CameraOne 和 CameraTwo 所指向的对象.

    因为相机类也继承自 Actor , 因此指针类型可以设置为 AActor.

    添加头文件

    为了实现体现相机控制效果, 我们需要获取玩家的视图, 因此需要包含 GameplayStatics.h 头文件. 添加:

    #include "Kismet/GameplayStatics.h"
    

    在 Tick 函数中实现相机控制

    // 两个相机切换时间
    const float TimeBetweenCameraChanges = 2.0f;
    // 平滑混合的时间
    const float SmoothBlendTime = 0.75f;
    
    // 切换时间倒计时
    TimeToNextCameraChange -= DeltaTime;
    
    // 到了切换时间
    if (TimeToNextCameraChange <= 0.0f)
    {
        // 重新加载切换时间
        TimeToNextCameraChange += TimeBetweenCameraChanges;
    
        // 查找处理本地玩家控制的 actor
        APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
        if (OurPlayerController)
        {
            if ((OurPlayerController->GetViewTarget() != CameraOne) && (CameraOne != nullptr))
            {
                // 立即切换到摄像机1。
                OurPlayerController->SetViewTarget(CameraOne);
            }
            else if ((OurPlayerController->GetViewTarget() != CameraTwo) && (CameraTwo != nullptr))
            {
                // 平滑地混合到摄像机2。
                OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
            }
        }
    }
    

    在 Tick 函数中, 当 2s 的倒计时结束后, 重新设置倒计时为 2s, 然后通过 GetPlayerController 函数实时获取玩家控制器, 利用玩家控制器获取玩家视图所对应的相机, 用它来判断如何切换相机, 如果当前是相机1的视图, 就平滑切换到相机 2, 如果当前是相机 2, 则直接切换到相机 1.

    应用该类

    编译代码, 并在编辑器中放置两个 相机 Actor, 然后放置 CameraDirector, 在细节中设置 CameraOne 和 CameraTwo 指针变量, 将其指向刚刚放置两个 相机 Actor.

    相关文章

      网友评论

          本文标题:游戏控制的摄像机

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