文末有git地址
一、角色移动,摄像机旋转
1.1、官方RPGAction Demo下载地址:
1.2、在场景中创建一个空的角色
创建一个Character蓝图和一个PlayerController蓝图,添加弹簧臂组件和摄像机,并为网格体添加上一个骨骼网格体
1.3、如何让这个角色出现在场景中,
创建一个GameMode蓝图,把默认Pawn类设置成我们创建的角色,玩家控制器类设置成我们的控制类
GameMode、character、playercontroller 具体的含义推荐看:
InsideUE5www.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已经获取到了值
文章来源:https://www.toymoban.com/news/detail-774504.html
g张乂卓/ActionRPGCopyhttps://gitee.com/StartUE4/action-rpgcopy.git文章来源地址https://www.toymoban.com/news/detail-774504.html
到了这里,关于UE4动作游戏实例RPG Action解析一:角色移动,旋转,动画创建,创建武器,及武器配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!