《UE5_C++多人TPS完整教程》学习笔记30 ——《P31 摄像机和弹簧臂(Camera And Spring Arm)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P31 摄像机和弹簧臂(Camera And Spring Arm)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么



P31 摄像机和弹簧臂

本节课将在我们创建的第三人称射击游戏角色蓝图类上添加摄像机组件和弹簧臂组件。
在这里插入图片描述


31.1 添加摄像机和弹簧臂组件

  1. 在虚幻引擎中打开项目 “Blaster”,从内容浏览器中拖拽蓝图类 “BP_BlasterCharacter” 至关卡 Lobby 中,并在右侧细节面板中将 “Pawn” 选项卡下的 “自动控制玩家”(Auto possess player)改为 “玩家 0”(Player 0),点击上方工具栏的 “播放”(▶)按钮,可以看到摄像机位于 “BP_BlasterCharacter” 的内部。
    在这里插入图片描述
    在这里插入图片描述

  2. 因此,我们需要摄像头组件和弹簧臂组件来控制我们拥有角色时的视图(Control the view when we’re possessing the character)。在 VS 中打开 “BlasterCharacter.h”,定义摄像头组件和弹簧臂组件类为 “ABlasterCharacter” 的私有成员变量。

    // Fill out your copyright notice in the Description page of Project Settings.
    
    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/Character.h"
    #include "BlasterCharacter.generated.h"
    
    UCLASS()
    class BLASTER_API ABlasterCharacter : public ACharacter
    {
    	GENERATED_BODY()
    
    public:
    	// Sets default values for this character's properties
    	ABlasterCharacter();
    
    	// Called every frame
    	virtual void Tick(float DeltaTime) override;
    
    	// Called to bind functionality to input
    	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
    
    protected:
    	// Called when the game starts or when spawned
    	virtual void BeginPlay() override;
    
    /* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    private:
    	UPROPERTY(VisibleAnywhere, Category = Camera)	
    	class USpringArmComponent* CameraBoom;			// 定义弹簧臂组件类,归类为 “Camera”
    
    	UPROPERTY(VisibleAnywhere, Category = Camera)
    	class UCameraComponent* FollowCamera;			// 定义摄像机组件类,归类为 “Camera”
    /* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    
    public:	
    
    };
    
    
  3. 在 “BlasterCharacter.cpp” 的构造函数 “ABlasterCharacter::ABlasterCharacter()” 中分别创建弹簧臂组件和摄像机组件对象,设置它们的默认属性并调整它们的相对位置。

    // Fill out your copyright notice in the Description page of Project Settings.
    
    
    #include "BlasterCharacter.h"
    
    /* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    #include "GameFramework/SpringArmComponent.h"
    #include "Camera/CameraComponent.h"
    /* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    
    // Sets default values
    ABlasterCharacter::ABlasterCharacter()
    {
     	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    	PrimaryActorTick.bCanEverTick = true;
    	
    	/* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    	// 创建弹簧臂对象 CameraBoom 并设置 CameraBoom 的默认属性
    	CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));	// 基于弹簧臂组件类创建对象
    	CameraBoom->SetupAttachment(GetMesh());											// 设置弹簧臂附加到角色的骨骼网格体组件,如果附加到胶囊体上,角色在做蹲下的动作时,由于胶囊体的大小和路线会发生改变,弹簧臂的高度也会发生改变(弹簧臂将会移动)
    	CameraBoom->TargetArmLength = 600.f;											// 设置弹簧臂长度
    	CameraBoom->bUsePawnControlRotation = true;										// 设置弹簧臂跟随角色控制器旋转
    
    	// 创建摄像机对象 FollowCamera 并设置 FollowCamera 的默认属性
    	FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));	// 基于摄像机组件类创建对象
    	FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);		// 将摄像机附加到弹簧臂 CameraBoom 上,并指定插槽名为虚幻引擎摄像机组件成员变量 SocketName
    	FollowCamera->bUsePawnControlRotation = false;									// 设置摄像机不跟随角色控制器旋转
    
    	// 调整弹簧臂和摄像机的相对位置(也可以在虚幻引擎的蓝图编辑器中设置)
    	CameraBoom->SetRelativeLocation(FVector(0, 0, 88));								// 设置弹簧臂和摄像机在蓝图类 “BP_BlasterCharacter” 的相对位置为 (0, 0, 88),以避免它们与地面相撞
    	/* P31 摄像机和弹簧臂(Camera And Spring Arm)*/
    }
    
    // Called when the game starts or when spawned
    void ABlasterCharacter::BeginPlay()
    {
    	Super::BeginPlay();
    	
    }
    
    // Called every frame
    void ABlasterCharacter::Tick(float DeltaTime)
    {
    	Super::Tick(DeltaTime);
    
    }
    
    // Called to bind functionality to input
    void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
    	Super::SetupPlayerInputComponent(PlayerInputComponent);
    
    }
    

    在这里插入图片描述

  4. 回到 “Lobby” 关卡编辑器,点击上方工具栏的 “播放”(▶)按钮,可以看我们的视角就在角色的正后方。
    在这里插入图片描述


31.2 Summary

本节课本节课在角色蓝图类 “BP_BlasterCharacter” 上添加了摄像机组件和弹簧臂组件,具体做法是在 “BlasterCharacter.h” 中定义摄像头组件和弹簧臂组件类,然后在 “BlasterCharacter.cpp” 的的构造函数 “ABlasterCharacter::ABlasterCharacter()” 中分别创建弹簧臂组件和摄像机组件对象,设置它们的默认属性,最后调整它们的默认相对位置,这一步既可以通过 C++ 代码实现,也可以在蓝图编辑器中实现。
在这里插入图片描述


最近更新

  1. TCP协议是安全的吗?

    2024-04-06 11:26:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 11:26:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 11:26:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 11:26:01       18 阅读

热门阅读

  1. C++入门

    C++入门

    2024-04-06 11:26:01      14 阅读
  2. Linux 指令

    2024-04-06 11:26:01       21 阅读
  3. MySQL Payload

    2024-04-06 11:26:01       12 阅读
  4. 金蝶Apusic应用服务器 未授权目录遍历漏洞复现

    2024-04-06 11:26:01       12 阅读
  5. 在Ubuntu 14.04上如何备份和恢复Redis数据

    2024-04-06 11:26:01       17 阅读
  6. Flink集群从节点TaskManager启动分析

    2024-04-06 11:26:01       12 阅读
  7. 大语言模型LLM《提示词工程指南》学习笔记01

    2024-04-06 11:26:01       14 阅读
  8. 如何更改WordPress站点的域名:完全指南

    2024-04-06 11:26:01       15 阅读
  9. Day3-struct类型、列转行、行转列、函数

    2024-04-06 11:26:01       15 阅读
  10. MySQL 里记录货币用什么字段

    2024-04-06 11:26:01       13 阅读
  11. C# Socket发送、接收结构体

    2024-04-06 11:26:01       18 阅读