首先,需要在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,就可以运行了。

<span style="font-size:14px;"><span style="white-space:pre">	</span>static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/BluePrint/FirstHero"));
DefaultPawnClass = PlayerPawnClassFinder.Class;</span>

二、使用C++创建主角

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

2.在VS中,进行编辑

#pragma once

#include "GameFramework/Character.h"
#include "FristHero.generated.h" UCLASS()
class MYNULLPROJECT_API AFristHero : public ACharacter
{
GENERATED_BODY()
class UCameraComponent* FirstCameraCompent;
public:
// Sets default values for this character's properties
AFristHero(); // Called when the game starts or when spawned
virtual void BeginPlay() override; // Called every frame
virtual void Tick( float DeltaSeconds ) override; // Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override; //前后移动
void MoveForward(float value);
//左右移动
void MoveRight(float value);
//跳跃
void Jump();
//停止跳跃
void StopJump();
};
// Fill out your copyright notice in the Description page of Project Settings.

#include "MyNULLProject.h"
#include "FristHero.h" // Sets default values
AFristHero::AFristHero()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
//设置这个控制的Tick函数每帧执行
PrimaryActorTick.bCanEverTick = true;
// 创建一个摄像机组件
FirstCameraCompent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
FirstCameraCompent->AttachParent = GetCapsuleComponent();
FirstCameraCompent->RelativeLocation = FVector(0, 0, 64.f); // Position the camera
//设置摄像机可以跟随控制器旋转
FirstCameraCompent->bUsePawnControlRotation = true;
} // Called when the game starts or when spawned
void AFristHero::BeginPlay()
{
Super::BeginPlay(); } // Called every frame
void AFristHero::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
} // Called to bind functionality to input
void AFristHero::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
InputComponent->BindAxis("MoveForward", this, &AFristHero::MoveForward);
InputComponent->BindAxis("MoveRight",this, &AFristHero::MoveRight);
InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
InputComponent->BindAction("JumpBtn",IE_Pressed,this, &AFristHero::Jump);
InputComponent->BindAction("JumpBtn", IE_Released, this, &AFristHero::StopJump);
} //前后移动
void AFristHero::MoveForward(float value)
{
if (value != 0.0f)
{
AddMovementInput(GetActorForwardVector(), value);
}
}
//左右移动
void AFristHero::MoveRight(float value)
{
if (value != 0.0f)
{
AddMovementInput(GetActorRightVector(), value);
}
}
//跳跃
void AFristHero::Jump()
{
Jump();
}
//停止跳跃
void AFristHero::StopJump()
{
StopJumping();
}

3.设置GameMode的DefaultPawnClass

#include "MyNULLProject.h"
#include "MyNULLProjectGameMode.h"
#include "FristHero.h"
AMyNULLProjectGameMode::AMyNULLProjectGameMode()
{
//通过路径找到蓝图,并将蓝图控制器的类设置给DefaultPawnClass
//static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/BluePrint/FirstHero"));
//DefaultPawnClass = PlayerPawnClassFinder.Class; //如果用C++创建,则直接将控制器的类赋值给DefaultPawnClass
DefaultPawnClass = AFristHero::StaticClass();
}

4.编译运行

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

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

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

#pragma once

#include "GameFramework/Character.h"
#include "FristHero.generated.h" UCLASS(Blueprintable)
class MYNULLPROJECT_API AFristHero : public ACharacter
{
GENERATED_BODY()
class UCameraComponent* FirstCameraCompent;
public:
// Sets default values for this character's properties
AFristHero(); // Called when the game starts or when spawned
virtual void BeginPlay() override; // Called every frame
virtual void Tick( float DeltaSeconds ) override; // Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override; //前后移动
void MoveForward(float value);
//左右移动
void MoveRight(float value);
//跳跃
void Jump();
//停止跳跃
void StopJump();
};

3.创建一个新蓝图,继承自定义的C++类,可直接搜索到

4.蓝图操作,详细见其他资料

5.编译运行

UE4 创建自己的角色的更多相关文章

  1. UE4 创建第三人称角色

    一.C++创建 1.      创建一个C++类,继承自Character,取名MyThirdCharacter 2.      在头文件中声明一个摄像机目标点CameraBoom,一个摄像机Foll ...

  2. 3D游戏开发之在UE4中创建非玩家角色(NPC)

    接着上节我们继续学习,现在我们来创建一些NPC(non-playable characters,非玩家角色).在这个游戏中,当我们靠近NPC时,它们会做出相应的反应. 一 创建C++类 1) 在UE编 ...

  3. UE4创建空白关卡并添加碰撞体

    让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体. 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N). 2) 你可以选择Defau ...

  4. Oracle11g 创建表空间、创建用户、角色授权、导入导出表以及中文字符乱码问题

    前提:本机已经安装了Oracle11g数据库. 需求:使用PL SQL数据库连接工具操作Oracle数据库 一.创建表空间和用户      想要操作数据库,首先需要创建用户并给用户授予权限:在创建用户 ...

  5. windows下 安装 rabbitMQ 及操作常用命令(操作创建用户密码 角色等)

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  6. Oracle创建用户、角色、授权、建表

    oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system privilege )可以让用户执行特定的命令集.例如,create table权限允许用户创建表,gr ...

  7. Oracle11g创建表空间、创建用户、角色授权、导入导出表以及中文字符乱码问题

    [转载]原文地址:https://www.cnblogs.com/bjh1117/p/6605037.html 前提:本机已经安装了Oracle11g数据库. 需求:使用PL SQL数据库连接工具操作 ...

  8. [转载]Oracle创建用户、角色、授权、建表

    出处:https://www.cnblogs.com/roger112/p/7685307.html oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system p ...

  9. [UE4]创建游戏、加入游戏

    google搜: UE4 compile dedicated server,编译UE4专用服务器 UE4默认网络端口可以在引擎配置文件中修改: 一.创建文件.需要修改一下工程的配置文件DefaultE ...

随机推荐

  1. 安卓高级6 玩转AppBarLayout,更酷炫的顶部栏 Toolbar

    原文大神地址:http://www.jianshu.com/p/d159f0176576 上一篇文章[<CoordinateLayout的使用如此简单 >]上一篇文章<Coordin ...

  2. Unity插件 - MeshEditor(八)模型镜像特效

    将静态模型(带MeshFilter)按指定轴向.指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点, ...

  3. 你知道如何为iOS工程改名吗?

    我们在iOS开发中,难免会遇到项目做到一半要改名字的情况.如果项目名差的太大,工程名看起来总是不舒服的,有良心的开发者可能就会想着为工程改个贴切的名字,那么你就为用到本文记录的内容. 如果我们开发的两 ...

  4. 安卓Button-TextView-EditText综合运用

    1.如何使用安卓中的按键Button? 1.先从控件库拖一个按钮button的控件,在XML设置好宽高等参数 对应的就是Button这个图标,直接拖出来即可; 以下是设置这个按钮对应的XML代码: & ...

  5. Ubuntu下装QQ2014(http://my.oschina.net/oscfox/blog/315951)

    QQ登陆界面: QQ登陆之后: 1.首先我们需要下载一个 deb的 Wine QQ安装包 qq2014官方下载:http://www.longene.org/download/WineQQ2013SP ...

  6. Gazebo機器人仿真學習探索筆記(五)環境模型

    環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...

  7. Android自定义处理崩溃异常

    用过安卓手机的用户以及安卓开发者们会时长碰到程序异常退出的情况,普通用户遇到这种情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉.那么开发者们在开发过程中遇到这种情况给怎么办呢,当然,你不可能世界 ...

  8. 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

     c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...

  9. 安卓TextView完美展示html格式代码

    对于TextView展示html格式代码,最简单的办法就是使用textview.setText(Html.fromHtml(html));,即便其中有img标签,我们依然可以使用ImageGetter ...

  10. UNIX网络编程——利用ARP和ICMP协议解释ping命令

    一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)      ...