• ARPG----C++学习记录03 Section7位置,偏移,函数


    Pawn

    新建一个Pawn的c++类Bird,并且新建一个蓝图

    添加一个Capsule(胶囊)

    不知道要加啥头文件,去网站找https://docs.unrealengine.com/5.3/en-US/API/Runtime/Engine/Components/UCapsuleComponent/SetCapsuleSize/

    包含文件名字的头文件必须放在最后

    //文件

    UPROPERTY(VisibleAnywhere)

    UCapsuleComponent* Capsule;

    //构造函数

    Capsule = CreateDefaultSubobject(TEXT("Capsule"));

    SetRootComponent(Capsule);

    不能让两个头文件互相引用,会产生错误,但是可以在对方的CPP里引用头文件。从父类继承时必须包含头文件

    当你把头文件移到CPP的时候,你需要在第一个定义的时候加上Class

    Skeletal Mesh Component骨骼网格体组件

    为之前的Bird蓝图添加一个骨骼网格体,并且选择鸟的骨骼

    BindInputs绑定输入

    一个玩家的游戏,可以设置Player0来操控。shift+F1可以让鼠标和人物分离

    绑定原理,将引擎里边写的前进和代码的绑定,当按下w时会给一个值1.0

    添加绑定和代码编写,随后在bird蓝图里添加一个movement组件

    添加相机臂和相机

    导入头文件,定义相机臂和相机,编写代码

    添加俯仰

    新增轴映射,新建函数,绑定,编写,打开蓝图里的useYaw和Pitch

    添为关卡添加默认pwan

    新建一个GameMode的蓝图将里边的默认Pwan修改为BP_bird,并且将世界场景的gamemode覆盖为创建的

    详细代码

    头文件

    1. // Fill out your copyright notice in the Description page of Project Settings.
    2. #pragma once
    3. #include "CoreMinimal.h"
    4. #include "GameFramework/Pawn.h"
    5. #include "Components/CapsuleComponent.h"
    6. #include "Components/SkeletalMeshComponent.h"
    7. #include "GameFramework/SpringArmComponent.h"
    8. #include "Camera/CameraComponent.h"
    9. #include "Bird.generated.h"
    10. UCLASS()
    11. class ARPG_API ABird : public APawn
    12. {
    13. GENERATED_BODY()
    14. public:
    15. ABird();
    16. virtual void Tick(float DeltaTime) override;
    17. protected:
    18. virtual void BeginPlay() override;
    19. void MoveForward(float Value);
    20. void Turn(float Value);
    21. void LookUp(float Value);
    22. public:
    23. // Called to bind functionality to input
    24. virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
    25. UPROPERTY(VisibleAnywhere)
    26. UCapsuleComponent* Capsule;
    27. UPROPERTY(VisibleAnywhere)
    28. USkeletalMeshComponent* BirdMesh;
    29. private:
    30. UPROPERTY(VisibleAnywhere)
    31. class USpringArmComponent* CameraArm;
    32. UPROPERTY(VisibleAnywhere)
    33. class UCameraComponent* Camera;
    34. };

    CPP

    1. // Fill out your copyright notice in the Description page of Project Settings.
    2. #include "Bird.h"
    3. // Sets default values
    4. ABird::ABird()
    5. {
    6. PrimaryActorTick.bCanEverTick = true;
    7. Capsule = CreateDefaultSubobject(TEXT("Capsule"));
    8. SetRootComponent(Capsule);
    9. //创建骨骼网格体,并且附加在根组件下
    10. BirdMesh = CreateDefaultSubobject(TEXT("BirdMesh"));
    11. BirdMesh->SetupAttachment(GetRootComponent());
    12. // 创建一个名为 "CameraArm" 的默认子对象,将 CameraArm 与根组件(RootComponent)关联
    13. //设置相机臂的目标长度
    14. CameraArm = CreateDefaultSubobject(TEXT("CameraArm"));
    15. CameraArm->SetupAttachment(RootComponent);
    16. CameraArm->TargetArmLength = 300.f;
    17. //创建一个名为 "Camera" 的默认子对象,关联相机臂使相机位于 CameraArm 的末端
    18. Camera = CreateDefaultSubobject(TEXT("Camera"));
    19. Camera->SetupAttachment(CameraArm);
    20. //设置自动接收输入玩家0
    21. AutoPossessPlayer = EAutoReceiveInput::Player0;
    22. }
    23. // Called when the game starts or when spawned
    24. void ABird::BeginPlay()
    25. {
    26. Super::BeginPlay();
    27. }
    28. void ABird::MoveForward(float Value)
    29. {
    30. if (Controller && (Value != 0.f))
    31. {
    32. FVector Forward = GetActorForwardVector();
    33. AddMovementInput(Forward,Value);
    34. }
    35. }
    36. void ABird::Turn(float Value)
    37. {
    38. AddControllerYawInput(Value);
    39. }
    40. void ABird::LookUp(float Value)
    41. {
    42. AddControllerPitchInput(Value);
    43. }
    44. // Called every frame
    45. void ABird::Tick(float DeltaTime)
    46. {
    47. Super::Tick(DeltaTime);
    48. }
    49. // Called to bind functionality to input
    50. void ABird::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    51. {
    52. Super::SetupPlayerInputComponent(PlayerInputComponent);
    53. // 绑定“MoveForward”输入轴到 MoveForward 函数,以响应玩家输入
    54. // 参数 FName("MoveForward") 指定了输入轴的名称
    55. // this 指针将 ABird 类的当前实例与输入组件绑定
    56. // &ABird::MoveForward 是处理输入的函数,它会在输入轴发生变化时被调用
    57. PlayerInputComponent->BindAxis(FName("MoveForward"),this,&ABird::MoveForward);
    58. PlayerInputComponent->BindAxis(FName("Turn"),this,&ABird::Turn);
    59. PlayerInputComponent->BindAxis(FName("LookUp"),this,&ABird::LookUp);
    60. }

  • 相关阅读:
    【C++11】智能指针的使用以及模拟实现(shared_ptr,unique_ptr,auto_ptr,weak_ptr)
    goland报错:“package command-line-arguments is not a main package”解决方案
    kafka集群安装
    磁盘存储链式的B树与B+树
    RFC(Remote function call)
    LVS集群
    使用brainconn工具绘制的大脑连接数据,比BrainNet更方便和灵活
    学习记录639@python机器学习模型部署与访问实战-基于Flask
    采访从不写代码注释的高手,他是真的牛呀
    使用container_of宏进行类型转换
  • 原文地址:https://blog.csdn.net/szn1316159505/article/details/134273882