首页 > 其他分享 >UnrealEngine5 如何为 FPS 游戏设置角色

UnrealEngine5 如何为 FPS 游戏设置角色

时间:2023-11-10 17:07:01浏览次数:53  
标签:游戏 Mesh1P 蓝图 Value AROTDCharacter PlayerInputComponent FPS UnrealEngine5 BindAxi

前言

FPS 是第一人称射击游戏的简称,从反恐精英开始,FPS 游戏已经成为了大热门游戏的首选,今天就让我带大家使用虚幻5(UnrealEngine5)来制作一款简单的FPS游戏吧!

准备

工程创建

打开我们 UE5 的编辑器,选择第一人称射击游戏,选择 C++,设置好您的工程名称,然后创建游戏,我的工程命名叫ROTD。

UnrealEngine5 如何为 FPS 游戏设置角色_游戏开发

资源准备

虚幻5的安装我在这里就不铺开给大家演示了,大家可以自行去官方文档了解。 今天文章中所用到的 FPS 的资源均来自于在 Epic 商城,分别如下:

UnrealEngine5 如何为 FPS 游戏设置角色_游戏开发_02

UnrealEngine5 如何为 FPS 游戏设置角色_sed_03

如果大家对这个资源感兴趣的话,可以联系我。

将下载好的资源放入工程的 Content 文件夹下,然后运行我们的工程。

角色蓝图

创建一个蓝图对象,然后继承自父类 ROTDCharacter,命名为 Henry_BP, 因为我给我的角色取名叫亨,源自于我之前看过的一个电影硬核亨,如图:

UnrealEngine5 如何为 FPS 游戏设置角色_sed_04

打开 Henry_BP,然后再选中 Viewport 窗口,为其添加 Skeletal Mesh, 我这里用到的骨骼网格体如图:

UnrealEngine5 如何为 FPS 游戏设置角色_Unreal Engine_05

添加进去后,调整 Mesh 1P 和摄像机的位置如图:

UnrealEngine5 如何为 FPS 游戏设置角色_游戏开发_06

这里的组件名称都是我们在C++代码中设置的名称,大家可以在 xxxCharacter.cpp 中看到:

.h 头文件

/** Pawn mesh: 1st person view (arms; seen only by self) */
	UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
	USkeletalMeshComponent* Mesh1P;

	/** First person camera */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	UCameraComponent* FirstPersonCameraComponent;

.cpp 文件

AROTDCharacter::AROTDCharacter()
{
	// Set size for collision capsule
	GetCapsuleComponent()->InitCapsuleSize(55.f, 96.0f);

	// set our turn rates for input
	TurnRateGamepad = 45.f;

	// Create a CameraComponent	
	FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
	FirstPersonCameraComponent->SetupAttachment(GetCapsuleComponent());
	FirstPersonCameraComponent->SetRelativeLocation(FVector(-39.56f, 1.75f, 64.f)); // Position the camera
	FirstPersonCameraComponent->bUsePawnControlRotation = true;

	// Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn)
	Mesh1P = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("CharacterMesh1P"));
	Mesh1P->SetOnlyOwnerSee(true);
	Mesh1P->SetupAttachment(FirstPersonCameraComponent);
	Mesh1P->bCastDynamicShadow = false;
	Mesh1P->CastShadow = false;
	Mesh1P->SetRelativeRotation(FRotator(1.9f, -19.19f, 5.2f));
	Mesh1P->SetRelativeLocation(FVector(-0.5f, -4.4f, -155.7f));

}

加上骨骼后,接下来就要给它添加动画了,接着往下看。

动画蓝图

创建一个动画蓝图,双击打开,为其添加三个 Bool 型的变量,如图:

UnrealEngine5 如何为 FPS 游戏设置角色_客户端_07

分别代表当前是否在移动,是否跳跃,以及是否在奔跑。

随后,我们为其创建站立,走路奔跑以及跳跃的动画状态机,如图:

UnrealEngine5 如何为 FPS 游戏设置角色_客户端_08

每个状态中都去关联对应的动画,这里关联的动画关键字为 Empty_Hand.

随后,打开 EventGraph 为其添加蓝图逻辑,如图所示:

UnrealEngine5 如何为 FPS 游戏设置角色_游戏开发_09

这里解释一下:

1.通过 TryGetPawnOwner 节点获取 Pawn ,然后将其Cast为我们的蓝图对象 Henry_BP,这样我们才能获取它里面的值 2.GetVelocity节点的VectorLength可以判断角色是否在移动,如果 > 0, 就设置 IsMoving 为 true 3.同理,通过Character Movement 的 isFalling 值,可以判断玩家是否跳跃 4.IsRunning 是通过按住 Shift 键来判断是否设置为true 或 false

随后回到我们的角色蓝图中,为角色添加动画蓝图,如图:

UnrealEngine5 如何为 FPS 游戏设置角色_sed_10

角色的移动,也已经在C++代码中模板为我们补充好了,如下:

void AROTDCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
	// Set up gameplay key bindings
	check(PlayerInputComponent);

	// Bind jump events
	PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
	PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);

	// Bind fire event
	PlayerInputComponent->BindAction("PrimaryAction", IE_Pressed, this, &AROTDCharacter::OnPrimaryAction);

	// Enable touchscreen input
	EnableTouchscreenMovement(PlayerInputComponent);

	// Bind movement events
	PlayerInputComponent->BindAxis("Move Forward / Backward", this, &AROTDCharacter::MoveForward);
	PlayerInputComponent->BindAxis("Move Right / Left", this, &AROTDCharacter::MoveRight);

	// We have 2 versions of the rotation bindings to handle different kinds of devices differently
	// "Mouse" versions handle devices that provide an absolute delta, such as a mouse.
	// "Gamepad" versions are for devices that we choose to treat as a rate of change, such as an analog joystick
	PlayerInputComponent->BindAxis("Turn Right / Left Mouse", this, &APawn::AddControllerYawInput);
	PlayerInputComponent->BindAxis("Look Up / Down Mouse", this, &APawn::AddControllerPitchInput);
	PlayerInputComponent->BindAxis("Turn Right / Left Gamepad", this, &AROTDCharacter::TurnAtRate);
	PlayerInputComponent->BindAxis("Look Up / Down Gamepad", this, &AROTDCharacter::LookUpAtRate);
}

void AROTDCharacter::MoveForward(float Value)
{
	if (Value != 0.0f)
	{
		// add movement in that direction
		AddMovementInput(GetActorForwardVector(), Value);
	}
}

void AROTDCharacter::MoveRight(float Value)
{
	if (Value != 0.0f)
	{
		// add movement in that direction
		AddMovementInput(GetActorRightVector(), Value);
	}
}

void AROTDCharacter::TurnAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerYawInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

void AROTDCharacter::LookUpAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerPitchInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

结尾

UnrealEngine5 如何为 FPS 游戏设置角色_游戏开发_11

为 FPS 游戏设置角色就完成了,运行我们的编辑器,就可以通过 W A S D 键以及空格键来操作角色了。

标签:游戏,Mesh1P,蓝图,Value,AROTDCharacter,PlayerInputComponent,FPS,UnrealEngine5,BindAxi
From: https://blog.51cto.com/u_15452588/8304667

相关文章

  • 微信小游戏个人开发者如何盈利
    微信小游戏,抖音小游戏,等H5小游戏非常的火,也处于流量的红利期,那么对于我们个人开发者而言我们能能否抓住微信小游戏的红利期,来实现人生的第一桶金,来实现睡后有收入呢?这里有一个游戏开发交流小组,希望大家可以来一起交流一下开发经验呀~今天小编带你来看下,个人开发者适合开发哪些游......
  • 生成式AI横扫PG游戏领域:苹果计划重塑Siri,迎头赶上竞争对手
    今年,生成式AI风头正劲,而苹果似乎也在迎头赶上竞争对手。PGAPP游戏试玩家揭露,苹果正在对其Siri助手进行大规模改造,将引入更多AI功能,并计划将其作为iPhone16的主打特色之一。根据爆料客Revegnus的说法,苹果将用LLM(大型语言模型)对Siri进行改进,以提.升其AI能力,使其成为杀.手级AI应用,并......
  • 跳跃游戏 II
    跳跃游戏II题目:给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0<=j<=nums[i]i+j<n返回到达nums[n-1]的最小跳跃次数。生......
  • 深度合作引领游戏行业,武汉灰京文化掀起合作新风潮
        在竞争激烈的游戏行业,武汉灰京文化传媒有限公司以深度合作为核心战略,引领着游戏行业掀起一股合作新风潮。通过深度合作,他们成功将合作伙伴的游戏产品带入更广泛的市场,为玩家提供更多精彩的游戏体验。这种合作模式的成功不仅有助于游戏公司扩大用户基础,还为游戏行业注入......
  • 撞车嘉年华:知名PG极速赢家毁灭式赛车游戏《Wreckfest》行动装置版超低优惠价
    《Wreckfest》是一款由THQNordic于2018年推出的独特赛车游戏,而它如今也在行动装置版上进行了大幅降价,从原价的9.99美元降至仅0.99美元。这让更多PG模拟玩家能够轻松享受这款引人入胜的游戏。这款PG极速赢家游戏以冲突玩法为主打,玩家需要运用车辆金属碰撞来取得胜利。不仅如此,《Wre......
  • P7514 [省选联考 2021 A/B 卷] 卡牌游戏
    [省选联考2021A/B卷]卡牌游戏题目描述Alice有\(n\)张卡牌,第\(i\)(\(1\lei\len\))张卡牌的正面有数字\(a_i\),背面有数字\(b_i\),初始时所有卡牌正面朝上。现在Alice可以将不超过\(m\)张卡牌翻面,即由正面朝上改为背面朝上。Alice的目标是让最终朝上的\(n\)个数......
  • [国家集训队] 阿狸和桃子的游戏
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+10;intn,m;intk[N],a,b,c;intval[N];//如果一条边的两端点被同一个人选了,那么产生边权的贡献//把边权均分到两端点上,每个端点加上c/2//如果这条边被同一个选了,那......
  • 游戏类软件开发常用代码分享!
    随着科技的迅速发展,游戏软件开发已经成为当今最热门的行业之一,许多开发者和游戏爱好者都渴望了解游戏开发的底层技术和常用的代码,本文将分享游戏类软件开发中一些常见的代码和相关技术,帮助大家更好地了解这个领域。一、游戏引擎与开发工具游戏引擎是游戏开发的核心,它为开发者提供了......
  • 苹果电子iPad Pro系列或推出OLED版,改善PG模拟游戏体验
    在过去的一年中,苹果iPad系列未推出任何新品,然而,明年可能会带来令人振奋的更新。PG游戏软件APP猜测,苹果将进行全面的iPad产品线升级,包括最基础的iPad到高端的iPadPro。其中,最引人瞩目的是采用OLED显示屏的iPadPro,该款产品还将搭载M3芯片,这将是重大升级。根据韩媒的报道,LG、三星和......
  • 即将推出的《深夜拉面》demo游戏版:在PG模拟试玩中倾听客人故事并疗愈心灵
    独立游戏工作室CointinueGames宣布了他们即将在12月中旬推出的《MidnightRamen深夜拉面》(深夜のラーメン)的试玩版。这款游戏将在Steam等平台上推出,并支持简体中文等语言。《深夜拉面》受到了《VA-11Hall-A:CyberpunkBartenderAction赛博朋克酒保行动》和《CoffeeTalk》等游戏......