06c++呵呵老师【FPS实现游戏角色】

1.新建c++类,以Character作为父类

 2.将新类命名为"FPSCharacter",然后点击 创建类(Create Class)

=======================================================

1.点击 FPSCharacter.cpp ,引入头文件

#include "Engine/Engine.h"

 2.在 BeginPlay() 函数中添加以下代码行(在 Super::BeginPlay(); 下面),以便确认正在使用 FPSCharacter 类:

check(GEngine != nullptr);

// 显示调试消息五秒。 
// -1"键"值参数可以防止更新或刷新消息。
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));

==================================================================

扩展你的C++ FPS角色类到蓝图

1.点击 基于FPSCharacter创建蓝图类(Create Blueprint class based on FPSHUD),打开 添加蓝图类(Add Blueprint Class) 对话框菜单

2. 将新的蓝图类命名为 BP_FPSCharacter,选择蓝图(Blueprints)文件夹,然后点击 创建蓝图类(Create Blueprint Class) 按钮。

============================================================

在游戏模式里设置默认的角色

点击游戏开始,测试成功

 

 =========================================================

设置轴映射

轴映射支持将键盘、鼠标和控制器输入映射到"友好名称",该名称稍后可以绑定到游戏行为上(例如移动)。轴映射会不断被轮询,从而实现无缝的移动过渡和流畅的游戏行为。

向前移动轴映射

1.点击 项目设置(Project Settings)

2.点击 输入(Input)

3.在 绑定(Bindings) 中,点击 轴映射(Axis Mappings) 旁边的+号

 4.在界面显示的文本框中输入"MoveForward"

5.在下拉菜单中,从 键盘(Keyboard) 下拉列表中选择 W

 

6.点击 MoveForward 旁边的+号

7.在第二个下拉菜单中,从 键盘(Keyboard) 下拉列表中选择 S

8.在 S 旁边的 比例(Scale) 字段中输入"-1"

 

向右移动轴映射

1.在 绑定(Bindings) 中,点击 轴映射(Axis Mappings) 旁边的+号

2.在显示的文本字段中输入"向右移动(MoveRight)",然后点击文本框左侧的箭头,展开轴绑定选项

3.在下拉菜单中,从 键盘(Keyboard) 下拉列表中选择 D

4.点击 向右移动(MoveRight) 旁边的+号

5.在第二个下拉菜单中,从 键盘(Keyboard) 下拉列表中选择 A

6.在 A 旁边的 比例(Scale) 字段中输入"-1"

===============================================================

实现角色移动

1.在 FPSCharacter.h 中,声明两个成员函数。 

// 处理用于前后移动的输入。
UFUNCTION()
void MoveForward(float Value);

// 处理用于左右移动的输入。
UFUNCTION()
void MoveRight(float Value);

2.在 FPSCharacter.cpp中,SetupPlayerInputComponent函数中,绑定输入

// 设置"移动"绑定。
PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);

3. 在SetupPlayerInputComponent 下方,添加以下 MoveForward 函数定义

void AFPSCharacter::MoveForward(float Value)
{
    // 找出"前进"方向,并记录玩家想向该方向移动。
    FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
    AddMovementInput(Direction, Value);
}

4. 在SetupPlayerInputComponent 下方,添加以下 MoveRight 函数定义

void AFPSCharacter::MoveRight(float Value)
{
    // 找出"右侧"方向,并记录玩家想向该方向移动。
    FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
    AddMovementInput(Direction, Value);
}

5.编译 

==========================================================

实现鼠标摄像机控制

转向轴映射

1.点击 轴映射(Axis Mappings) 左侧的箭头

2.在显示的文本输入框中输入"Turn"

3.在下拉菜单中,从 鼠标(Mouse) 下拉列表中选择 鼠标X(Mouse X)

 查找轴映射

1.点击 轴映射(Axis Mappings) 旁边的+号

2.在显示的文本输入框中输入"LookUp"

3.在下拉菜单中,从 鼠标(Mouse) 下拉列表中选择 鼠标Y(Mouse Y)

4.在 鼠标Y(Mouse Y) 旁边的 比例(Scale) 输入框中输入"-1.0"

===========================================================

实现鼠标输入处理 

1.在父类中,已经提供了转向和抬头的两个函数,我们直接用就可以

2.在 FPSCharacter.cpp 中的 SetupPlayerInputComponent 函数中进行绑定操作。

// 设置"观看"绑定。
	PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput);
	PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);

3.编译,测试

============================================================

实现角色跳跃

操作映射处理离散事件的输入,让你可以将输入映射到"友好名称",该名称稍后可以与事件驱动的行为绑定。最终效果是,按下和/或释放单个键、鼠标按钮或辅助键盘按钮可以直接触发游戏行为。

1.点击 项目设置(Project Settings)

2.点击 输入(Input)

3.点击 操作映射(Action Mappings) 旁边的+号。

4.在显示的文本输入框中输入"Jump"

5.在下拉菜单中,从 键盘(Keyboard) 下拉列表中选择 空格键(Space Bar)

=============================================================

实现输入处理

在基类中,角色跳跃与 bPressedJump 变量绑定,因此我们需要做的就是,在跳跃操作按下时将该布尔值设置为 true,在跳跃操作释放时将该布尔值设置为 false。

1.在 FPSCharacter.h 中,添加以下公共函数声明

// 按下键时,设置跳跃标记。
UFUNCTION()
void StartJump();

// 释放键时,清除跳跃标记。
UFUNCTION()
void StopJump();

 2.在 FPSCharacter.cpp 中,将以下函数定义添加到代码底部

void AFPSCharacter::StartJump()
{
    bPressedJump = true;
}

void AFPSCharacter::StopJump()
{
    bPressedJump = false;
}

 3.在SetupPlayerInputComponent中,绑定操作

// 设置"操作"绑定。
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);

4.编译,测试

============================================================

将网格体添加到角色

导入资产

 

 

然后保存

 

设置第三人称网格体

1.双击 BP_FPSCharacter 蓝图类图标,在 蓝图编辑器 中打开它

2.在 组件(Components) 选项卡中点击 网格体(Mesh) 组件

 

3.滚动到 细节(Details) 选项卡(屏幕右侧,或在 窗口(Window) > 细节(Details) 中)的 网格体(Mesh) 段

4.点击骨骼网格体(Skeletal Mesh)行中显示为"无"的下拉列表,然后选择 GenericMale 骨骼网格体

 

 

5.滚动到 细节(Details) 窗格中的 变换(Transform) 段,然后,将变换的 Z 轴向位置设置为 "-88.0",使 SkeletalMeshComponent 与 CapsuleComponent 对齐。

 

6.编译保存测试

 

===================================================

更改摄像机视角

默认摄像机放置在网格体的颈部。在此步骤中,你将设置FPS摄像机,这样你可以调整摄像机的属性(例如位置和视野)

1.将以下头文件添加到 FPSCharacter.h 

#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/SkeletalMeshComponent.h"

 2.添加摄像机组件变量

// FPS摄像机。
UPROPERTY(VisibleAnywhere)
UCameraComponent* FPSCameraComponent;

3.在构造函数中进行如下操作

// 创建第一人称摄像机组件。
FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
check(FPSCameraComponent != nullptr);

// 将摄像机组件附加到我们的胶囊体组件。
FPSCameraComponent->SetupAttachment(CastChecked<USceneComponent, UCapsuleComponent>(GetCapsuleComponent()));

// 将摄像机置于略高于眼睛上方的位置。
FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight));

// 启用Pawn控制摄像机旋转。
FPSCameraComponent->bUsePawnControlRotation = true;

 4.编译,测试

===========================================

将第一人称网格体添加到你的角色

1.在FPSCharacter.h添加一个mesh变量

// 第一人称网格体(手臂),仅对所属玩家可见。
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
USkeletalMeshComponent* FPSMesh;

 2.打开 FPSCharacter.cpp,找到构造函数,添加以下代码,创建和配置第一人称网格体:

// 为所属玩家创建第一人称网格体组件。
FPSMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FirstPersonMesh"));
check(FPSMesh != nullptr);

// 仅所属玩家可以看见此网格体。
FPSMesh->SetOnlyOwnerSee(true);

// 将 FPS 网格体附加到 FPS 摄像机。
FPSMesh->SetupAttachment(FPSCameraComponent);

// 禁用某些环境阴影以便实现只有单个网格体的感觉。
FPSMesh->bCastDynamicShadow = false;
FPSMesh->CastShadow = false;
// 所属玩家看不到常规(第三人称)全身网格体。
GetMesh()->SetOwnerNoSee(true);

=============================================

构建手臂网格体

1.右键点击内容浏览器的文件框,打开 导入资产(Import Asset) 对话框

 

2.找到并选择 HeroFPP.fbx 网格体文件

3.内容浏览器(Content Browser) 中将显示 FBX导入选项(FBX Import Options) 对话框

4.请确保将 骨架(Skeleton) 设置为 无(None),然后点击 全部导入(Import All)

 

 5.在 组件(Components) 菜单中点击 FPSMesh

 6.滚动到 细节(Details) 选项卡的 网格体(Mesh) 段,然后点击显示为"无(None)"的下拉菜单。现在,选择 HeroFPP 骨骼网格体,将手臂添加到 视口(Viewport)

 

 7.将新增网格体的变换属性调整为在摄像机前面:将其 位置(Location) 设置为{220, 0, 35},将其 旋转(Rotation) 设置为{180, 50, 180}。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用的 主要技术有: 1、大面积山脉渲染,使用Heightmap构造地形,7级 LOD 细节精度,地形无限重复循环 。 2、清晰、自然的地表贴图。 3、读取.MD2 、.MS3D 格式的3D模型文件。 4、粒子系统,产生爆炸、炊烟等特效。 5、太阳光晕。 6、使用Blend模拟Brightness/contrast调节图象亮度。 操作控制 可以在GameSetting菜单中设定: 1.视频属性 ( Video Setting ) 1).屏幕分辨率( Resolution ) 游戏率默认为800*600,在任务执行前可改变分辨率,但不会立即生效,只有在初始化任务时才改变分辨率。 2).屏幕亮度( Brigthness ) 在不同的硬件配置上,屏幕亮度往往表现出较大差异,通过该项可将亮度调节到最佳。 3).视野范围 ( Visible Distance ) 调节地形绘制的距离。对于配置较低的硬件,适当降低视野距离可提高帧速率,但由于远处地形网格较粗,对帧速率提高贡献并不大。 4).雾浓度 ( Fog Density ) 2.音频属性 ( Audio Setting ) 1).背景音乐(music) 可以打开或关闭背景音乐,可以调节音量。 音乐播放 audio/music/menu.mp3 ,如果你有自己喜爱的mp3音乐文件可以将它替换 menu.mp3 文件。 2).音效( sound ) 可以打开或关闭音效,可以调节音量。游戏中的枪声与人物的发声具有3D效果。 3.键盘操作 ( Keyboard Setting ) 以下操作可以更改 Up、Down、Left、Right设定移动操作。 Fire 射击 Jump 跳跃 Zoom 放大远处景物 Help 弹出帮助 修改方法:用鼠标点击选项,然后输入新的按键。 另外,游戏保留了几个开发模式下的操作: Page Up 提升视点高度 Page Down 降低视点高度 (可以看到地形绘制区域) L 线框模式 F 冻结所有敌人 V 隐身 N 敌人攻击力为零 I 隐藏房子 O 隐藏敌人 P 隐藏树木 在游戏运行中,按 Help 项的按键获得帮助。 4.鼠标操作 鼠标的移动可改变视角,默认设定左键为射击,右键为放大。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情的阅读机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值