//pwan头文件部分
1 // Fill out your copyright notice in the Description page of Project Settings. 2 3 #pragma once 4 5 #include "CoreMinimal.h" 6 #include "GameFramework/Pawn.h" 7 #include "MyPawn.generated.h" 8 9 UCLASS() 10 class TEST2_API AMyPawn : public APawn 11 { 12 GENERATED_BODY() 13 14 public: 15 // Sets default values for this pawn's properties 16 AMyPawn(); 17 18 protected: 19 // Called when the game starts or when spawned 20 virtual void BeginPlay() override; 21 22 public: 23 // Called every frame 24 virtual void Tick(float DeltaTime) override; 25 26 // Called to bind functionality to input 27 virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;//virtual作用在作为父类类型 引用时 防止使用父类方法 28 //override作用防止重写的不是父类的方法 29 30 void MoveForward(float AxisValue);//事件 31 void MoveRight(float AxisValue);//事件 32 void ParticleToggle2();//事件 33 34 void mouseClick(float AxisValue) {//事件与实现 35 if (AxisValue > 0) { 36 FString str1 = TEXT("x轴移动"); 37 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Yellow, str1); 38 } 39 else if (AxisValue < 0) {
40 FString str1 = TEXT("y轴移动"); 41 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Purple, str1); 42 } 43 } 44 };
//pawn cpp部分
1 // Fill out your copyright notice in the Description page of Project Settings. 2 #include "MyPawn.h" 3 // Sets default values 4 AMyPawn::AMyPawn() 5 { 6 7 // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. 8 PrimaryActorTick.bCanEverTick = false;//不需要Tick 9 // 掌控默认玩家 这是关键没有这条语句 无法执行玩家操作 10 AutoPossessPlayer = EAutoReceiveInput::Player0;//要放在构造函数里 不要放在BeginPlay()里 11 } 12 13 // Called when the game starts or when spawned 14 void AMyPawn::BeginPlay() 15 { 16 Super::BeginPlay(); 17 18 } 19 // Called every frame 20 void AMyPawn::Tick(float DeltaTime) 21 { 22 Super::Tick(DeltaTime); 23 24 } 25 26 // Called to bind functionality to input 27 void AMyPawn::SetupPlayerInputComponent(UInputComponent* InputComponent) 28 {//所有事件在这个函数里注册 不注册不能执行 29 Super::SetupPlayerInputComponent(InputComponent); 30 31 //BindAction 32 /*BindAction 第一个参数为 虚幻4->设置 ->输入->按键绑定的名称 */ 33 /*参数二事件名称 IE_Pressed 按下 IE_Released松开 IE_DoubleClick双击 */ 34 /*参数三当前对象*/ 35 /*参数四 事件方法的函数指针 例 &类名::方法名 的写法*/ 36 //会在内部用this调用注册的方法 37 InputComponent->BindAction("ParticleToggleWzh", IE_DoubleClick, this, &AMyPawn::ParticleToggle2); 38 39 //BindAxis 40 /*BindAction 第一个参数为 虚幻4->设置 ->输入->按键绑定的名称 一定要一样 重要!!! */ 41 /*参数二 当前对象*/ 42 /*参数三 事件方法的函数指针 例 &类名::方法名 的写法*/ 43 //会在内部用this调用注册的方法 44 InputComponent->BindAxis("MoveForward", this, &AMyPawn::MoveForward); 45 InputComponent->BindAxis("MoveRight", this, &AMyPawn::MoveRight); 46 InputComponent->BindAxis("mouseClick", this, &AMyPawn::mouseClick); 47 48 //BindAxis与BindAction不同 BindAxis是被动执行的 一运行会一直调用 也就是说不能选择事件 需要加入条件判断语句结合AxisValue才能判断按键 49 } 50 51 void AMyPawn::MoveForward(float AxisValue)//移动前进 52 { 53 54 //AxisValue ue4里按键绑定的值 设置输入的向量值移动的大小 55 if (AxisValue > 0) {//一个事件可以绑定多个按键 这里用AxisValue来区分 56 FString str1 = TEXT("向前移动");// TEXT只能接受字符串常量 这里使用防止出现中文乱码 例如 : FString str1 = "向前移动"; //这样会乱码 57 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Red, str1); 58 } 59 else if (AxisValue < 0) { 60 FString str1 = TEXT("向后移动"); 61 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Turquoise, str1); 62 } 63 } 64 65 void AMyPawn::MoveRight(float AxisValue)//移动向右 66 { 67 //AxisValue ue4里按键绑定的值 设置输入的向量值移动的大小 68 if (AxisValue > 0) { 69 FString str1 = TEXT("向右移动"); 70 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Yellow, str1); 71 } 72 else if (AxisValue < 0) { 73 FString str1 = TEXT("向左移动"); 74 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Purple, str1); 75 } 76 } 77 78 void AMyPawn::ParticleToggle2()//我特意用了和ue4里绑定的事件名称不同 不影响 79 { 80 FString str1 = TEXT("空格"); 81 GEngine->AddOnScreenDebugMessage(-1, 0.5, FColor::Cyan, str1); 82 }