徐州模板开发建站,深圳校园网站建设,百度站长工具seo查询,好的淘客网站文章目录 创建Character第三人称模板添加增强输入引用在脚本中实现移动、旋转 创建Character第三人称模板
创建MyCharacter C类
添加增强输入引用
在DEMO.Build.cs 脚本中添加增强输入模块 有个容易出错的点#xff0c;这里的设置一定要正确 然后添加引用到C头文件中
… 文章目录 创建Character第三人称模板添加增强输入引用在脚本中实现移动、旋转 创建Character第三人称模板
创建MyCharacter C类
添加增强输入引用
在DEMO.Build.cs 脚本中添加增强输入模块 有个容易出错的点这里的设置一定要正确 然后添加引用到C头文件中
#include InputActionValue.h
#include EnhancedInputComponent.h
#include EnhancedInputSubsystems.h最后可以编译一下看看输入模块“EnhancedInput” 是否引入成功。
在脚本中实现移动、旋转
首先是头文件添加引用 MyCharacter.h
#pragma once#include CoreMinimal.h
#include InputActionValue.h
#include EnhancedInputComponent.h
#include EnhancedInputSubsystems.h
#include GameFramework/Controller.h
#include GameFramework/SpringArmComponent.h
#include Camera/CameraComponent.h
#include GameFramework/CharacterMovementComponent.h
#include GameFramework/Character.h
#include MyCharacter.generated.hUCLASS()
class DEMO_API AMyCharacter : public ACharacter
{GENERATED_BODY()public:// Sets default values for this characters propertiesAMyCharacter();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:// Called every framevirtual void Tick(float DeltaTime) override;// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent *PlayerInputComponent) override;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category MySceneComponent)USpringArmComponent *MySpringArm;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category MySceneComponent)UCameraComponent *MyCamera;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputMappingContext *DefaultMappingContext;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* MoveAction;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* LookAction;void Move(const FInputActionValue Value);void Look(const FInputActionValue Value);
};
然后在MyCharacter.cpp中实现
// Fill out your copyright notice in the Description page of Project Settings.#include MyCharacter.h// Sets default values
AMyCharacter::AMyCharacter()
{// Set this character to call Tick() every frame. You can turn this off to improve performance if you dont need it.PrimaryActorTick.bCanEverTick true;MySpringArm CreateDefaultSubobjectUSpringArmComponent(TEXT(MySpringArm));MyCamera CreateDefaultSubobjectUCameraComponent(TEXT(MyCamera));MySpringArm-SetupAttachment(RootComponent);MyCamera-SetupAttachment(MySpringArm);MySpringArm-TargetArmLength 300.0f;// 这么设置是为了让控制器的转动不影响角色的转动只影响摄像机的转动bUseControllerRotationYaw false;bUseControllerRotationPitch false;bUseControllerRotationRoll false;// 为了让角色的移动方向与摄像机的方向一致需要设置以下参数GetCharacterMovement()-bOrientRotationToMovement true;// 这是为了使用Pawn的控制器旋转MySpringArm-bUsePawnControlRotation true;
}// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{Super::BeginPlay();APlayerController *PlayerController CastAPlayerController(GetController());if (PlayerController){UEnhancedInputLocalPlayerSubsystem *LocalPlayerSubsystem ULocalPlayer::GetSubsystemUEnhancedInputLocalPlayerSubsystem(PlayerController-GetLocalPlayer());if (LocalPlayerSubsystem){LocalPlayerSubsystem-AddMappingContext(DefaultMappingContext, 0);}}
}// Called every frame
void AMyCharacter::Tick(float DeltaTime)
{Super::Tick(DeltaTime);
}// Called to bind functionality to input
void AMyCharacter::SetupPlayerInputComponent(UInputComponent *PlayerInputComponent)
{Super::SetupPlayerInputComponent(PlayerInputComponent);if (UEnhancedInputComponent *EnhancedInputComponent CastCheckedUEnhancedInputComponent(PlayerInputComponent)){EnhancedInputComponent-BindAction(MoveAction, ETriggerEvent::Triggered, this, AMyCharacter::Move);EnhancedInputComponent-BindAction(LookAction, ETriggerEvent::Triggered, this, AMyCharacter::Look);}
}void AMyCharacter::Move(const FInputActionValue Value)
{FVector2D MoveVector Value.GetFVector2D();if (Controller ! nullptr){const FRotator Rotation Controller-GetControlRotation();const FRotator YawRotation(0, Rotation.Yaw, 0);const FVector ForwardDirection FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);const FVector RightDirection FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);AddMovementInput(ForwardDirection, MoveVector.Y);AddMovementInput(RightDirection, MoveVector.X);}
}void AMyCharacter::Look(const FInputActionValue Value)
{FVector2D LookVector Value.GetFVector2D();if (Controller nullptr){return;}AddControllerYawInput(LookVector.X);AddControllerPitchInput(LookVector.Y);
}
编译之后创建蓝图类BP_MyCharacter 这时候会有默认组件缺少人物模型我们可以在这里添加 添加动画蓝图类 其他设置
最后拖到场景中把WorldSetting - Game Mode 设置为null 点击运行就可以实现鼠标键盘第三人称操作了。