一、C++创建

1.      创建一个C++类,继承自Character,取名MyThirdCharacter

2.      在头文件中声明一个摄像机目标点CameraBoom,一个摄像机FollowCamera,再声明两个控制移动的函数,与跳跃的函数

#include "GameFramework/Character.h"
#include "MyThirdCharacter.generated.h" UCLASS()
class MYFIRSTNULLPROJECT_API AMyThirdCharacter : public ACharacter
{
GENERATED_BODY() //摄像机目标点
class USpringArmComponent* CameraBoom;
//跟随相机
class UCameraComponent* FollowCamera;
public:
// Sets default values for this character's properties
AMyThirdCharacter(); // 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);
};

3.      在构造函数中,初始化一些控制参数与创建自己所需要的组件

4.      在输入中,处理控制函数

#include "MyFirstNULLProject.h"
#include "MyThirdCharacter.h" // Sets default values
AMyThirdCharacter::AMyThirdCharacter()
{
// 设置这个Character每帧调用Tick函数
PrimaryActorTick.bCanEverTick = true;
//设置控制器不受旋转影响
bUseControllerRotationPitch = false;
bUseControllerRotationRoll = false;
bUseControllerRotationYaw = false;
//设置胶囊碰撞体的大小
GetCapsuleComponent()->InitCapsuleSize(42.f, 96.f);
//设置控制器在移动时可以旋转
GetCharacterMovement()->bOrientRotationToMovement = true;
//在本地找到模型文件,并赋值给mesh设置相应参数
static ConstructorHelpers::FObjectFinder<USkeletalMesh> playerPawn(TEXT("/Game/Animation/mon_goblinWizard/mon_goblinWizard"));
GetMesh()->SetSkeletalMesh(playerPawn.Object);
GetMesh()->SetRelativeLocation(FVector(0, 0, -95.f));
GetMesh()->SetRelativeRotation(FRotator(0,-90.f,0.f));
//创建一个摄像机目标点 USpringArmComponent 设置父级 长度 可旋转
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
CameraBoom->AttachTo(RootComponent);
CameraBoom->TargetArmLength = 300;
CameraBoom->bUsePawnControlRotation = true;
//创建一个摄像机 绑定到CameraBoom下,不受控制旋转的影响 受CameraBoom旋转影响
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
FollowCamera->AttachTo(CameraBoom, USpringArmComponent::SocketName);
FollowCamera->bUsePawnControlRotation = false; } // Called when the game starts or when spawned
void AMyThirdCharacter::BeginPlay()
{
Super::BeginPlay();
//设置初始位置
RootComponent->SetWorldLocation(FVector(0, 0, 0));
} // Called every frame
void AMyThirdCharacter::Tick( float DeltaTime )
{
Super::Tick( DeltaTime ); } // Called to bind functionality to input
//处理输入事件
void AMyThirdCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
InputComponent->BindAxis("MoveForward", this, &AMyThirdCharacter::MoveForward);
InputComponent->BindAxis("MoveRight", this, &AMyThirdCharacter::MoveRight);
InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput); InputComponent->BindAction("JumpBtn",IE_Pressed,this, &ACharacter::Jump);
InputComponent->BindAction("JumpBtn", IE_Released,this, &ACharacter::StopJumping);
} void AMyThirdCharacter::MoveForward(float value)
{
if ((Controller != NULL) && (value != 0.0f))
{
// 找到当前的前方向
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0); // 获取到前方向
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
AddMovementInput(Direction, value);
}
} void AMyThirdCharacter::MoveRight(float value)
{
if ((Controller != NULL) && (value != 0.0f))
{
// 找到当前的前方向
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0); // 获取到右方向
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(Direction, value);
}
}

5.      设置GameMode的DefaultPawnClass,编译运行

二、蓝图创建

1.创建一个新的蓝图,继承自Character,取名MyThirdHero

2.双击打开蓝图,选择MyThirdHero,确定bUseControllerRotationPitch,bUseControllerRotationRoll,bUseControllerRotationYaw均为false,不受旋转影响

3.选中mesh,在SkeletalMesh中,选择自己的导入的模型,并设置位置旋转等相应参数,可在Viewport中看见详细情况

4.选中CapsuleComponent,在Shape栏下,可以根据模型大小调整碰撞胶囊的大小、

5.创建一个摄像机目标点,点击AddComponent,在Camera分类中有一个Spring Arm,点击创建,选中在右边可以设置他的参数,比如TargetArm
Length则是,他与摄像机的距离,这里主要还得勾选UsePawn Control Rotation,让他可以旋转

6.创建一个摄像机,让他作为SpringArm的子节点,确定摄像机的Use Pawn Control Rotation为不勾选状态,摄像机跟随父节点的旋转

7.选中CharacterMovement,确定OrientRotationtoMovement为勾选状态,让他可以在移动的时候旋转

8.开始编写输入控制,让角色可以动起来

9.编译,设置GameMode的DefaultPawnClass,编译,运行

UE4 创建第三人称角色的更多相关文章

  1. UE4中创建第一、第三人称角色,并进行角色间的切换

    在游戏中经常会出现第一人称和第三人称的视角切换场景,笔者在这里简单介绍如何进行这步操作. 1.创建角色 在内容浏览器中添加2个Character蓝图,分别命名为FirstPersonalCharact ...

  2. 【Unity】第11章 第三人称角色控制器和碰撞体

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 第三人称视角控制器涉及的相关概念有: 1.刚体(Rigidbody). 2.碰撞体(Collider).包括球体碰撞体( ...

  3. UE4 创建自己的角色

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

  4. 第三人称角色移动及自由移动视野(RigidBody实现)

    重点:向量的运算.在获得水平及垂直方向的速度之后,将方向进行重设,让方向与视野同步(即:相机的方向与人物方向相同) 下面以一个实例来说明如何操作: 1.如图创建一个地形(Terrain),两个正方体( ...

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

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

  6. [UE4]使用Is Locally Controlled解决第一人称和第三人称武器位置问题

    一.在第一人称网络游戏中,自己看到的是第一人称,其他玩家看到的自己是第三人称. 二.由于第一人称和第三人称是不同的模型,所以枪在模型上面的插槽位置也会不一样. 三.在武器挂载在人物模型的使用,使用“I ...

  7. Unity3D中的第三人称镜头的脚本控制

    原地址:http://blog.csdn.net/mobanchengshuang/article/details/27591271 好久没有敲Blog了,谢谢大家的留言.关注.私信等支持,但是我好像 ...

  8. Unity3D第三人称摄像机控制脚本

    好久没有敲Blog该.感谢您的留言.注意.私人信件和其他支持,但我似乎没有办法继续自己曾经写了一篇博客系列,因为我在网上找到有关unity3D太少的内容,U3D相关的文章!.. 第三人称视角 第三人称 ...

  9. Unity 3D还原Scene场景、市面多数游戏视角高度自定义、第三人称视角分离功能:平移、拖动、看向中心等

    Unity视角的高度自定义 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

随机推荐

  1. EBS并发程序监控

    SELECT s.* FROM fnd_concurrent_requests r, v$session v, v$sql s WHERE r.oracle_session_id = v.audsid ...

  2. activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)

    1.1.1. 前言 用户故事:现在有这样一个需求,第一个需求:公司的开发环境,测试环境以及线上环境,我们使用的数据库是不一样的,我们必须能够任意的切换数据库进行测试和发布,对数据库连接字符串我们需要加 ...

  3. 全文检索Lucene (1)

    Lucene是apache开源的一个全文检索框架,很是出名.今天先来分享一个类似于HelloWorld级别的使用. 工作流程 依赖 我们要想使用Lucene,那就得先引用人家的jar包了.下面列举一下 ...

  4. C控制台实现模拟平抛运动算法

    平抛运动这个相信读了高中物理都知道这个概念了,详细的我就不说了,不明白的看看百度: 平抛运动 接下来看看用控制台实现的平抛运动算法: #include <stdio.h> #include ...

  5. 18 Ui美化

    资源文件的使用: 一: res中文件中放置的文件类型: res/drawable//放处理过的图片 res/drawable-XXX //放的Ui切得图 >res/anim 放动画 >re ...

  6. 【移动开发】AIDL中callback的实现

    AIDL实现就可以在客户端中调用服务端的方法,并传递数据到服务端,也可以服务端传递数据过来:但是如果要从服务端去调用客户端的方法,那么就需要注册callback! 抄自和源码:http://zxl-o ...

  7. Linux的sleep()和usleep()

    1.sleep和usleep都是linux中的程序挂起函数.只是时间的单位不一样. 2. sleep的基本单位是s(秒),也可以用m(分).h(小时). 例: sleep 1 : 挂起1秒 sleep ...

  8. Android旋转动画

    Android旋转动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...

  9. Android触摸屏幕时间-android学习之旅(三)

    android的多点触摸是经常遇到的编程技巧,这一篇可以将详细的介绍这个问题. 简单实例 android的触摸需要实现OnTouchListener接口,继承里面方法. 布局代码: <?xml ...

  10. Android的ImageSwitcher和TextSw-android学习之旅(三十四)

    ImageSwitcher简介 ImageSwitcher继承了ViewSwitcher,所以在切换时候会有动画,可以把它理解成一个动画版本的ImageView. 他的showNext(),和show ...