UE4动作游戏实例RPG Action解析一:角色移动,旋转,动画创建,创建武器,及武器配置

文末有git地址

一、角色移动,摄像机旋转

1.1、官方RPGAction Demo下载地址:

1.2、在场景中创建一个空的角色

创建一个Character蓝图和一个PlayerController蓝图,添加弹簧臂组件和摄像机,并为网格体添加上一个骨骼网格体

1.3、如何让这个角色出现在场景中,

创建一个GameMode蓝图,把默认Pawn类设置成我们创建的角色,玩家控制器类设置成我们的控制类

GameMode、character、playercontroller 具体的含义推荐看:

InsideUE5​www.zhihu.com/column/insideue4​编辑

打开项目设置,设置成我们的GameMode,运行就能看到角色了

1.4、角色移动功能

先绑定输入按键:

在PlayerController 写蓝图事件,主要方法 添加移动输入,

前后移动: 目标是受控pawn,WorldDirection方向是获取摄像机的向前向量,ScaleValue是输入MoveForward

左右移动:ScaleValue是输入MoveRight

1.5、摄像机旋转

添加Yaw和Pitch输入

Unreal是左手坐标系,

Unreal下,Pitch、raw、roll分别定义如下:

(1)X轴正方向为右方,围绕X轴旋转为Pitch,也叫俯仰角。

(2)Y轴正方向为上方,围绕Y轴旋转为Yaw,也叫偏航角。

(3)Z轴负方向为前方,围绕Z轴旋转为Roll,也叫翻滚角。

1.6、角色跟随移动旋转

设置角色CharacterMovement组件

二、动画创建:

2.1、创建动画蓝图,创建速度变量,并且获取PlayerCharacter的速度值

AnimGraph 创建动画状态机:

状态机里设置播放Idle状态:

Idle状态根据速度播放 混合空间

2.2、动画混合空间创建:

右键 创建 动画 ->混合空间1D,

拖动不同的动画,根据速度调节

2.3、在PlayerCharacter里设置动画蓝图

三、武器创建

3.1、创建武器蓝图

创建一个Actor的蓝图类作为武器基类,

球体碰撞作为根节点,关闭碰撞

添加骨骼网格体和胶囊体碰撞

根据这个WeaponActor创建一个具体的武器

3.2、PlayerController 在pawn控制时,创建武器

生成武器主要方法:

生成武器实例(SpawnActor),并Attach到角色的手的插槽上(添加Actor组件)

四、创建武器配置表

4.1导语:

RPGAction 释放攻击技能是根据武器的不同选择的对应技能,那么先研究怎么创建一个武器的配置表

4.2、分析武器Axe数据C++代码

创建一个RPGItem作为基类,类别有 道具(加生命,魔法),远程攻击武器,近战武器

具体含义看下面注释

近战武器子类,继承RPGItem:

4.3、创建武器资产数据

右键 其他 ->数据资产,选择创建的URPGWeaponItem,

如上图所示,WeaponActor 是 解析三 文章里创建的武器,我把ItemIcon先去掉了,后面到UI的部分再加回来

三、创建一个AssetManager 用来管理这些数据资产

定义一个Weapon类型

五、GameInstance加载UPrimaryDataAsset(武器资源)并加载默认武器资源

5.1 导语:

怎么利用GameInstance动态加载这些资源,

为什么要用GameInstance,参考下面的文章

大钊:《InsideUE4》GamePlay架构(九)GameInstance267 赞同 · 12 评论文章​编辑

5.2、创建GameInstance,添加要加载资源的类型

创建一个GameInstance,

添加一个Map, FPrimaryAssetType填类型,int32表示可以装备的数量

打开项目设置,可以管理资产类型,

我目前只添加了一种Weapon类型,装备数量是2 (这个功能还不讨论)

5.3、GameInstance初始化动态加载

首先设置游戏实例,设置成我们自己创建的GameInstance

创建一个自定义事件,在事件初始的时候调用,

首先循环遍历ItemSlotsPerType的Keys值,ArrayElement为输出即FPrimaryAssetType类型

根据FPrimaryAssetType类型 获取主资产列表,通过调试模式可以看到成功加载了两个资产,

我目前加载的是“Weapon”,打开项目设置->资产管理器,可以看到我们定义的Weapon资产,如果名字不一样就加载不到,加载的目录是下面“/Game/Items/Weapons” 加载的类型是 RPGWeaponItem

5.4、GameInstance添加默认武器

GameInstance 添加默认装备字段

蓝图里添加斧头 数据资产

5.5、PlayerController添加加载逻辑

void APlayerControllerBase::BeginPlay()
{
	LoadInventory();

	Super::BeginPlay();
}

bool APlayerControllerBase::LoadInventory()
{

	//获取GameInstance
	UWorld* World = GetWorld();
	URPGGameInstance* GameInstance = World ? World->GetGameInstance<URPGGameInstance>() : nullptr;

	if (!GameInstance)
	{
		return false;
	}

	//利用AssetManager 加载 武器
	URPGAssetManager& AssetManager = URPGAssetManager::Get();
	CurWeaponItem = AssetManager.ForceLoadItem(GameInstance->DefaultInventory);

	return true;
}

其中AssetManager.ForceLoadItem:

URPGItem* URPGAssetManager::ForceLoadItem(const FPrimaryAssetId& PrimaryAssetId)
{
	FSoftObjectPath ItemPath = GetPrimaryAssetPath(PrimaryAssetId);

	URPGItem* LoadedItem = Cast<URPGItem>(ItemPath.TryLoad());

	return LoadedItem;
}

发现FSoftObjectPath ItemPath = GetPrimaryAssetPath(PrimaryAssetId); 获取不到路径,

要在DefaultEngine.ini 文件中添加如下代码:GetPrimaryAssetPath才能查询到路径

[/Script/Engine.Engine]

AssetManagerClassName=/Script/工程名.RPGAssetManager

添加完后,

URPGAssetManager::StartInitialLoading() 才能在引擎启动的时候调用

通过测试发现 CurWeaponItem已经获取到了值

g张乂卓/ActionRPGCopyicon-default.png?t=N7T8https://gitee.com/StartUE4/action-rpgcopy.git

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张乂卓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值