UE4 创建自己的角色

本文详细介绍了在UE4中如何创建自定义角色。首先,设置输入按键,然后通过蓝图或C++创建主角控制器。蓝图步骤包括创建人形控制器蓝图,添加摄像机组件并绑定输入事件。C++实现则涉及创建继承自Character的类,编辑输入绑定并设置DefaultPawnClass。最后,可以通过蓝图继承自定义的C++类进一步扩展功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,需要在UE4中设置自己需要输入的按键,点击工具栏的Settings/ProjectSettings,找到input,在Bindings下添加自己需要的输入按键,我这里绑定了JumpBtn、MoveForward、MoveRight、Turn、LookUp


输入设置完毕后,就开始创建自己的主角控制器

一、使用蓝图创建主角

1.在UE4文件夹中,右键创建一个Blueprint Class,选择继承Character(人形控制器),创建后自己命名FirstHero

2.双击打开蓝图,可以给FirstHero添加一个摄像机组件,点击AddComponent,找到Camera

3.开始可以给FirstHero添加控制事件了,打开Event Graph,分别找到最开始设置输入的五个事件,并对应相应的操作,JumpBtn调用Jump跳跃和StopJumping,MoveForward调用AddMoveMentInput前后移动,MoveRight调用AddMoveMentInput左右移动,Turn调用AddControllerYawInput左右旋转,LookUp调用AddControllerPitchInput上下查看


4.还需要一个小小的设置,不然摄像机是不会跟着控制器旋转的,选择摄像机组件,找到CameraSettings/UsePawnControlRotation,选中即可

5.编译,设置好GameMode的DefaultPawnClass,就可以运行了。

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;"><span style="white-space:pre">    </span>static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/BluePrint/FirstHero"));  
  2.     DefaultPawnClass = PlayerPawnClassFinder.Class;</span>  


二、使用C++创建主角

1.在UE4中创建一个C++ Class,选择继承Character(人形控制器),创建后自己命名FirstHero

2.在VS中,进行编辑

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma once  
  2.   
  3. #include "GameFramework/Character.h"  
  4. #include "FristHero.generated.h"  
  5.   
  6. UCLASS()  
  7. class MYNULLPROJECT_API AFristHero : public ACharacter  
  8. {  
  9.     GENERATED_BODY()  
  10.     class UCameraComponent* FirstCameraCompent;  
  11. public:  
  12.     // Sets default values for this character's properties  
  13.     AFristHero();  
  14.   
  15.     // Called when the game starts or when spawned  
  16.     virtual void BeginPlay() override;  
  17.       
  18.     // Called every frame  
  19.     virtual void Tick( float DeltaSeconds ) override;  
  20.   
  21.     // Called to bind functionality to input  
  22.     virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;  
  23.   
  24.     //前后移动  
  25.     void MoveForward(float value);  
  26.     //左右移动  
  27.     void MoveRight(float value);  
  28.     //跳跃  
  29.     void Jump();  
  30.     //停止跳跃  
  31.     void StopJump();  
  32. };  

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // Fill out your copyright notice in the Description page of Project Settings.  
  2.   
  3. #include "MyNULLProject.h"  
  4. #include "FristHero.h"  
  5.   
  6.   
  7. // Sets default values  
  8. AFristHero::AFristHero()  
  9. {  
  10.     // Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.  
  11.     //设置这个控制的Tick函数每帧执行  
  12.     PrimaryActorTick.bCanEverTick = true;  
  13.     // 创建一个摄像机组件  
  14.     FirstCameraCompent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));  
  15.     FirstCameraCompent->AttachParent = GetCapsuleComponent();  
  16.     FirstCameraCompent->RelativeLocation = FVector(0, 0, 64.f); // Position the camera  
  17.     //设置摄像机可以跟随控制器旋转  
  18.     FirstCameraCompent->bUsePawnControlRotation = true;  
  19. }  
  20.   
  21. // Called when the game starts or when spawned  
  22. void AFristHero::BeginPlay()  
  23. {  
  24.     Super::BeginPlay();  
  25.       
  26. }  
  27.   
  28. // Called every frame  
  29. void AFristHero::Tick( float DeltaTime )  
  30. {  
  31.     Super::Tick( DeltaTime );  
  32. }  
  33.   
  34. // Called to bind functionality to input  
  35. void AFristHero::SetupPlayerInputComponent(class UInputComponent* InputComponent)  
  36. {  
  37.     Super::SetupPlayerInputComponent(InputComponent);  
  38.     InputComponent->BindAxis("MoveForward"this, &AFristHero::MoveForward);  
  39.     InputComponent->BindAxis("MoveRight",this, &AFristHero::MoveRight);  
  40.     InputComponent->BindAxis("Turn"this, &APawn::AddControllerYawInput);  
  41.     InputComponent->BindAxis("LookUp"this, &APawn::AddControllerPitchInput);  
  42.     InputComponent->BindAction("JumpBtn",IE_Pressed,this, &AFristHero::Jump);  
  43.     InputComponent->BindAction("JumpBtn", IE_Released, this, &AFristHero::StopJump);  
  44. }  
  45.   
  46. //前后移动  
  47. void AFristHero::MoveForward(float value)  
  48. {  
  49.     if (value != 0.0f)  
  50.     {  
  51.         AddMovementInput(GetActorForwardVector(), value);  
  52.     }  
  53. }  
  54. //左右移动  
  55. void AFristHero::MoveRight(float value)  
  56. {  
  57.     if (value != 0.0f)  
  58.     {  
  59.         AddMovementInput(GetActorRightVector(), value);  
  60.     }  
  61. }  
  62. //跳跃  
  63. void AFristHero::Jump()  
  64. {  
  65.     Jump();  
  66. }  
  67. //停止跳跃  
  68. void AFristHero::StopJump()  
  69. {  
  70.     StopJumping();  
  71. }  
3.设置GameMode的DefaultPawnClass

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include "MyNULLProject.h"  
  2. #include "MyNULLProjectGameMode.h"  
  3. #include "FristHero.h"  
  4. AMyNULLProjectGameMode::AMyNULLProjectGameMode()  
  5. {  
  6.     //通过路径找到蓝图,并将蓝图控制器的类设置给DefaultPawnClass  
  7.     //static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/BluePrint/FirstHero"));  
  8.     //DefaultPawnClass = PlayerPawnClassFinder.Class;  
  9.       
  10.     //如果用C++创建,则直接将控制器的类赋值给DefaultPawnClass  
  11.     DefaultPawnClass = AFristHero::StaticClass();  
  12. }  
4.编译运行


三、使用蓝图继承自己写的C++类创建主角

1.参照二写一个C++类

2.在.h文件中的类名上,做一个标注UCLASS(Blueprintable),此类可以为蓝图继承

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma once  
  2.   
  3. #include "GameFramework/Character.h"  
  4. #include "FristHero.generated.h"  
  5.   
  6. UCLASS(Blueprintable)  
  7. class MYNULLPROJECT_API AFristHero : public ACharacter  
  8. {  
  9.     GENERATED_BODY()  
  10.     class UCameraComponent* FirstCameraCompent;  
  11. public:  
  12.     // Sets default values for this character's properties  
  13.     AFristHero();  
  14.   
  15.     // Called when the game starts or when spawned  
  16.     virtual void BeginPlay() override;  
  17.       
  18.     // Called every frame  
  19.     virtual void Tick( float DeltaSeconds ) override;  
  20.   
  21.     // Called to bind functionality to input  
  22.     virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;  
  23.   
  24.     //前后移动  
  25.     void MoveForward(float value);  
  26.     //左右移动  
  27.     void MoveRight(float value);  
  28.     //跳跃  
  29.     void Jump();  
  30.     //停止跳跃  
  31.     void StopJump();  
  32. };  
3.创建一个新蓝图,继承自定义的C++类,可直接搜索到
4.蓝图操作,详细见其他资料

5.编译运行



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值