虚幻四如何实现第一人称_《FPS开发日记》二:角色创建和第一人称摄像頭

fa60245b1978de780bf7dcfe61071952.png

从这章开始我们将从零创建个

FPS(first person shoot)游戏。

关于射击游戏的种类我以后会出个文章详细讲解。

我先说说FPS游戏制作的简单原理。

我们在玩许多FPS的时候可能都会认为自己在控制1个完整的人物。但其实你留心发现的话,你把视角往下看却看不到你的脚,你只能看到你的手臂而已。所以大多数FPS的制作其实都是只做手臂的动画而已。让人以为自己在控制整个人物。事实上只控制手臂而已。但为啥看别人是全人物的呢?那是因为我们准备了两套模型,及两套网格(Mesh)。一个给自己看(手臂),一个给别人看(全身)。很多人会问为什么要这样做?这样做的好处是:

一,如果是全模型的话,会考虑整个手臂动作于身体的兼容性。看起来就可能会比只有手臂的动作僵硬些。

二,优化会比全模型的好一点。也易于操作。

缺点:

看不到自己的脚,只能看到手臂。但无伤大雅。

所以本章你将学到:

一,按键绑定。

二,创建个第一人称游戏角色与

摄像机跟踪。

首先,新建个项目,如图选择空项目,选好保存目录。(注意名字要全英文)

9f1ef59b374c907cb928999aa0f963a7.png

创建好后。打开虚幻4,在左上角文件里新建个c++类,如图。

d2b062a1ed5af6a07d3fb5fae3c347d6.png

然后选character,如图

e0cf132cab8c9ab0f41ed0c9043645f0.png

名字随意,我打的是Schararter(路径有误),注意选公有。

创建编译好后,回到VS。可以看到他显示了我们刚才创建的类。(红线为visual Assist的bug醉)

我们先回到虚幻4界面,创建个人物蓝图,选择自己创建的角色类

然后起名为PlayerPawn;

将它拖到地板上面,并在属性栏里搜索possess,选择player 0;

这样子就可以不用GameStart组件,将它删掉。默认会从我们创建的角色视角开始。

之后切到VS2017在SCharacter.cpp文件下找到这位置打

177d9d0ca3b1e61e65fae006bb5ae22f.png

58d8b639397878e33631cf51234aaefd.png
PlayerInputComponent->
BindAxis(“MoveForward”, this, &ASCharacter::MoveForward);
PlayerInputComponent->
BindAxis(“MoveForward”, this, &ASCharacter::MoveForward);
PlayerInputComponent->
BindAxis(“MoveRight”, this, &ASCharacter::MoveRight);
PlayerInputComponent->
BindAxis(“LookUp”, this, &ASCharacter::AddControllerPitchInput);
PlayerInputComponent->
BindAxis(“Turn”, this, &ASCharacter::AddControllerYawInput);

因为网站字符大小所限,所以只能这样排版。

解释:

这是绑定按键的一个类函数BindAxis,主要是通过按键改变位置的变化和方向。

括号里的四个参数分别是

(“MoveForward”, this, &ASCharacter::MoveForward);

(绑定按键的名字,操作对象,按键时应发生的事件)

绑定按键的名字

这里我取得是“MoveForward”为前后行走的按键的名字,(注意名字不是乱取的)因为

你还要在UE4里设置绑定键.

操作对象

我们想要操作的角色就是我们创建的角色,所以用this。

按键时应发生的事件

MoveForward是我们自定义的函数,我们需要在头文件创建它。

在protect下打

void MoveForward(float x);
 
void MoveRight(float x);

//函数名不一定要跟我一样,但起码得看的懂和为以后的代码布局早想。

之后回到cpp文件在独立的区域打

void ASCharacter::MoveForward(float x)
 
{
 
AddMovementInput
 
(GetActorForwardVector()*x);
 
};
void ASCharacter::MoveRight(float x)
 
{
 
AddMovementInput
 
(GetActorRightVector()*x);
 
};

解释:AddMovementInput()

该函数可以改变角色的位置,改变的位置为括号的数值。

括号里的参数为角色的x轴的位置,也就是前后位置。

GetActorForwardVector()是获取当前角色的位置。而里面的变量x就是我们按键改变的数值。

这样的的话就可以达到前后移动效果。

左右同理。

这样就实现了前后左右移动。

那鼠标呢?

我们已经弄好了。

PlayerInputComponent->BindAxis
(“LookUp”, this, &ASCharacter::AddControllerPitchInput);
PlayerInputComponent->BindAxis
(“Turn”, this, &ASCharacter::AddControllerYawInput);

因为虚幻4已经写好了鼠标控制

AddControllerPitchInput;

AddControllerYawInput;

我们只需要调用就好了。

设置好后回到虚幻4编译。

然后在左上角编辑->项目设置->按键这块输入相对应的按键名字。如图

9f58ee7ca7c335552fe7ec1aab9fa84d.png

注意名字一定要与代码的所答的名字对应,不然没有效果。

好了之后就可以移动了。

但目前只是个空壳,未免有点难看。我们先给他个躯体吧。

第二部分:创建第一人称角色

将模型放到我们创建的虚幻4游戏文件的Content文件夹里。

回到VS2017

我们先创建一个Mesh网格

你可以理解为模型所需要的容器。

在头文件里protect下打

UPROPERTY
(VisibleAnywhere, BlueprintReadOnly, Category = “FPcamera”)
class UCameraComponent* FPcamera;
UPROPERTY
(VisibleAnywhere, BlueprintReadOnly, Category = “FParm”)
class USkeletalMeshComponent* FParm;

以解释过,不明白可看上一章。

回到cpp文件里

在第一个函数里打

FPcamera = CreateDefaultSubobject
 
<UCameraComponent>(TEXT(“FPcamera”));
 
FPcamera->SetupAttachment
 
(GetCapsuleComponent());
 
FPspringarm->bUsePawnControlRotation = true;
 
FParm= CreateDefaultSubobject
 
<USkeletalMeshComponent>(TEXT(“FParm”));
 
FParm->SetupAttachment(FPcamera);
 

解释:

CreateDefaultSubobject 为创建组件尖括号里为组件类型,

TEXT里为组件名称。

setupattachment为绑定组件,即互相绑定的组件都要去那跟那,不能分开。

括号里为绑定的组件。

因为你不想看到你的眼睛(FPcamera)和手臂(FParm)分离吧。

bUsePawnControlRotation = true;

与许控制主角的转向。这样的话,摄像机就可以移动了。

输入好后,回到UE4编译。

完成之后

在新建的网格组件

添加我们下载好的模型

之后调一下摄像机的位置

就会看到

53130a36e1afbe05edbbd4264e5cb7ea.png

大工告成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值