Step4:资源开发
资源开发是指按照资源设计文档 01.描述与反馈清单.xlsx
将文档中的设计转化为程序可识别的信息的过程。
#
资源开发步骤资源开发的全部步骤为: Step1:打开资源工具PropertyTool ➡ Step2:自动转化资源属性 ➡ Step3:设置VRaaS资源蓝图组件 ➡ Step4:Change方法属性功能开发 ➡ Step5:交互点属性开发。
不同类型的资源开发是其中几个步骤的组合。
#
Step1:打开属性工具PropertyTool自动转化资源属性之前,先打开VRaaS™ 资源制作工具,步骤为:
Step1:打开项目工程
从VRaaS™ 资源制作工具包,(如果没有,点击扫描二维码获取) 中的资源工程项目工程目录
VRaaS_Assets/1.Code
下打开资源项目工程VRaaS资源制作工程.uproject
。VRaaS资源制作工程路径Step2:运行资源属性工具
打开项目工程后,在
VRaaS_AssetToolContent/tool
目录下右键运行PropertyTool
。PropertyTool文件路径运行VRaaS™ 资源工作工具的操作方法:
运行后,资源属性工具即被打开,可以根据自己的习惯改变窗口位置。接下来就可以自动转化资源属性了。
#
Step2:自动转化资源属性⬇ 打开要开发的资源设计文档
01.描述与反馈清单.xlsx
、资源属性工具PropertyTool
和要开发的资源蓝图测试场景
的关卡蓝图。⬇ 复制
01.描述与反馈清单.xlsx
中红色虚线内的单元格。⬇ 将复制内容粘贴在
PropertyTool
的上半部分输入区域。⬇ 点击 Excel转化为Unreal结构体 按钮。
⬇ 复制
PropertyTool
下半部分区域生成的信息。→ 点击
Variables > PXR Variable > Scene > AssetData
,然后右键PropertyList
复制。
这样就把 01.描述与反馈清单.xlsx
中的属性经自动转化变为对应VRaaS资源的属性了。
关于属性字段的说明如下:
- PropertyName
- PropertyGroup
- PropertyDrawType
- PropertyDrawSetting
- PropertyValue
- PropertyReflectType
- PropertyReadOnly
ヾ(◍°∇°◍)ノ゙
此时,可以通过 资源测试 看看具有属性的VRaaS资源是什么样,这可是令人惊喜的第一步呀ヾ(◍°∇°◍)ノ゙~
小提示
- 开发前,打开资源功能关卡
测试场景
的关卡蓝图,确保其父类是 PBase XRScene。 - 另外,如果自动转化生成的属性信息有错误的话,要去仔细检查一下
01.描述与反馈清单.xlsx
的文档格式是否完全满足 资源设计规则。
#
Step3:设置VRaaS资源蓝图组件根据 01.描述与反馈清单.xlsx
描述,在VRaaS资源蓝图中整合相关模型、音效、特效等组件,此处不做过多要求,可根据自己擅长的实现方法去实现,只要能满足设计文档要求、效果好、性能好即可。
小提示
- Scene场景资源开发是在关卡蓝图进行的开发,不需要进行组件设置。
#
Step4:Change方法属性功能开发Change方法属性功能开发是给 01.描述与反馈清单.xlsx
中 属性反射类型(建议)= 普通
的属性都创建 Change[属性名称]
方法,然后在方法中用蓝图开发实现 属性值描述
中对每一个值的业务描述。
具体做法包含两步,创建Change[属性名称]方法 -> 实现Change[属性名称]方法。
创建Change[属性名称]方法
创建Change[属性名称]的步骤为:新增方法 -> 重命名方法名称 -> 修改方法分组。
创建Change[属性名称]方法注意事项
- Change后面跟 是否XXX 的一定要与属性名称完全一致,否则属性值修改底层逻辑会无法正确执行。
- 方法的分组一定要是ChangeProperty,否则属性值修改底层逻辑会无法正确执行。
- PropertyReflectType类型为变量反射(Ref_Variable)的属性,系统会自动处理,不用额外写Change[属性名称]方法。
- 位置、旋转、缩放、可见性 为基础属性,其改变时系统将自动处理物体的渲染,所以不需要再额外写Change方法处理这些属性。
实现Change[属性名称]方法
Change方法的本质是系统底层自动处理当资源属性值改变是,通过“反射”自动找到“Change[属性名称]”函数,Change方法中的逻辑即是属性的具体体现了。所以,Change方法都是基于获取对应属性结构体,针对不同属性值描述自行完成蓝图开发。
#
Step5:交互点属性开发交互点属性开发是InteractiveObject资源和Character资源特有的。交互点属性开发以配置、测试为主,少量默认逻辑为辅助,基本不用写代码,数据驱动。
#
Step5-1:交互概念理解在开始交互点属性开发之前,请阅读下方各标签组内容,以便于正确理解交互并完成开发。
- 关于交互点
- 交互 VS 元交互
- VR交互框架
①. InteractiveObject交互物自身不能直接被化身交互,化身是通过与交互物上设定好的交互点进行的交互。
②. 一个交互物可以有多个交互点。
③. 一个交互点可以是交互物自身,也可以是交互物的某个部件。
④. 交互点可以是虚拟的看不见的,也可以和物体的可见部分一致。
⑤. 示例:
⑤-①. 杯子,杯子作为一个交互物资源,整个交互物就是一个交互点,此时整个杯子任意位置都可以用来交互;或者只有杯子手柄是交互点,那么就只有杯子手柄可以用来交互。
⑤-②. 门,门作为一个交互物资源,只能通过门把手来打开,所以门把手是一个交互点。
②. 01.描述与反馈清单.xlsx
中可能出现的交互点属性都属于元交互。
下方图示截取了可交互物的交互框架示意,用来帮助开发者更深一步理解交互。
②. 所有元交互可以分为四大类,即:
②-①. 真实世界的玩家控制化身的元交互,是指真实世界的玩家通过硬件外设接入虚拟世界,对自己的虚拟化身进行各种交互,比如传送、射线等。
②-②. 化身对“虚拟世界”的可交互物交互,是指化身与可交互物的交互点进行的各种交互时“化身”方触发的元交互(与此同时,可交互物方也会触发相应的事件),例如:因为化身手部拿起杯子时,化身手部需要做相应的动作,杯子需要播放相应的音效,而这两种逻辑是在化身和杯子中分别处理的(防止耦合),如果在化身中处理杯子的音效问题,那化身会和杯子耦合,因为化身可以拿起的物体有无限种,声音各不相同。
②-③. 可交互物被化身交互,是指可交互物体被化身交互后,自身触发的另一种元交互,原理同上。
②-④. 可交互物被可交互物交互,是指化身拿着“可交互物A”去间接交互(例如碰触)可交互物B,例如化身拿起棒球棍去击打棒球,此时棒球棍与棒球都会分别触发各自的元交互。
③. “元交互名称”及“元交互接口方法”
③-①.元交互分为“事件触发型“与“每帧触发型“交互,“每帧触发型“在名称后会有“更新“二字,方法名以 _U 结尾(Update)。
举例:当化身用手部触碰某物体时,会触发“触碰”元交互,它就是事件触发型的,因为它只会执行一次直到化身下一次再触碰该物体。
再举例:当化身抓握到某物体后,开始抓紧或者松开扳机,而被抓握的物体根据抓握力度而产生不同的形变,此时形变逻辑要每帧执行,所以这种交互就是“每帧触发型”。
③-②. 元交互又分为“主动交互”与“被动交互”,接口方法以 IA_ 开头表示是化身(主体)身上发生的交互,以 RIA_ 开头表示是被交互的IO身上发生的交互(R是Receive的意思,表示它接收到了主体的交互而产生自己的交互)。
#
Step5-2:交互点属性确认经过 Step2:自动转化资源属性 交互点属性应该也已经转化完毕且复制到资源变量 AssetData > PropertyList
中了。(如果没有,请回到Step2:自动转化资源属性 完成属性自动转化。)
#
Step5-3:添加交互点获取交互点信息
在
01.描述与反馈清单.xlsx
中的资源描述-交互点
和资源属性-交互点-[交互点名称]
对比查看,获取当前资源的交互点数量、位置、大小、名称信息。在VRaaS资源蓝图中添加交互点组件
交互点有3种类型,分别是普通网格、骨骼网格、Widget界面,根据需要选择。
#
Step5-4:设置交互点组件交互点组件设置包含 基础设置 和 元交互设置。
基础设置
是指设置碰撞与模型外观。
交互点可以“刚好”就是IO模型本身,也就是说整个IO就是一个交互点。交互点也可以是一个“无形的看不见的”虚拟物体,比如当IO整体不方便交互时,可以设置一个虚拟的交互点来交互。所以,根据资源具体情况来设置交互点的模型外观。
交互点的碰撞必须是:OverlapAllDynamic,否则无法触发所有交互。
元交互开关设置
元交互设置有很多,开关设置是指 图中黄框 标记的
开关
类型的设置一定要全部默认为否
,因为这些开关是在运行时/测试时手动设置的。
可被手部射线交互属性的特殊注意点
如果交互点需要能被手部射线射中,则需要设置如下碰撞,否则射线将会穿过交互点:
- 元交互详细设置
交互详细设置是指 左图中红框 标记的部分根据 01.描述与反馈清单.xlsx
中的设计来设置,左图中红框标记出来的需要根据文档中的 红色字体 部分(右图紫色框中)设置。
设置项详述解释如下:
- 交互点名称
- 检测位置范围数值
- 检测触碰范围数值
- 被触碰时的左手/右手手型
- 被抓握时的左手/右手手型
- 被抓握挂载的位置
此项设置设置非常重要,此处应该与 01.描述与反馈清单.xlsx
文档一致设置为 [交互点名称]
,如未设置,则交互测试日志中会提示交互点“不存在”。
方法为:
①. 打开化身手部骨骼:选好左右手。
②. 骨骼Socket上添加预览模型:预览模型添加当前资源中的核心模型,因为不能添加Actor,因此制作资源引用模型的时候一定要调整好模型的坐标轴,保证资源与核心模型的坐标轴一致。
caution
一定要在PXR_TestAttachPoint这个Socket上添加预览模型。
③. 调整手指骨骼位置及Socket挂载点的位置来完成一个触摸姿势的制作。
小提示
注意:移动手指骨骼时一定要符合人体物理规律、不穿模、满足需求文档要求即可。
④.生成单帧动画:调整好手型后按照图示生成一个动画文件,保存到当前资源的6_Animations文件夹中,根据设置的参数类型起名为“左手触摸手型、右手触摸手型”等。
⑤. 完成交互点的设置:在交互点中完成动画姿势文件的最终设置。
方法为:
①. 打开化身手部骨骼:选好左右手。
②. 骨骼Socket上添加预览模型:预览模型添加当前资源中的核心模型,因为不能添加Actor,因此制作资源引用模型的时候一定要调整好模型的坐标轴,保证资源与核心模型的坐标轴一致。
caution
一定要在PXR_TestAttachPoint这个Socket上添加预览模型。
③. 调整手指骨骼位置及Socket挂载点的位置来完成一个抓握姿势的制作。
小提示
注意:移动手指骨骼时一定要符合人体物理规律、不穿模、满足需求文档要求即可。
④. 记录位置:上图中红框的PSR信息记录下来,之后作为交互点中“被抓握挂载的位置”设置。
⑤. 生成单帧动画:调整好手型后按照图示生成一个动画文件,保存到当前资源的6_Animations文件夹中,根据设置的参数类型起名为“左手抓握手型、右手抓握手型”等。
⑥. 完成交互点的设置:在交互点中完成动画姿势文件、挂载位置的最终设置。
资源被抓握时挂载在手上的样子,最终样子由location、rotation、scale决定。
在 被抓握时的左手/右手手型
制作的过程中,第④步即可获取“被抓握挂载的位置”,第⑥步即完成“被抓握挂载的位置”的设置。
左右手镜像的所以位置一样。
#
Step5-5:实现交互点属性功能(可选)所有元交互的交互判定、交互发生后的逻辑都由系统实现好的,因此开发交互时大部分情况下只需要设置、测试即可。如果 01.描述与反馈清单.xlsx
中属性描述单元格的红色字体部分有 交互触发默认逻辑
则需要追加额外的逻辑,需要重写元交互相关方法。
例如:如果要是在“进入位置范围”元交互触发后追加自定义逻辑,则先重写方法,重写时一定要Super(调用父类方法),且自定义逻辑如果是改变IO已有的其它属性的值则一定要按照截图调用接口来完成,否则系统无法记录状态,大部分需求中的自定义逻辑都是改变IO已有的属性为某个值。
#
Scene场景资源开发根据资源 01.描述与反馈清单.xlsx
设计结果,Scene场景资源的开发需要 Step1:打开属性工具PropertyTool + Step2:自动转化资源属性 + Step4:Change方法属性功能开发 三个过程或前两个组合即可完成。
另外,关于Scene场景开发还有以下几点需要注意:
每个Scene资源创建时会有一些固有代码(见下方三个图示),不要删除,否则会无法使用及测试。
场景的关卡(Level)可能会有很多子关卡(Level),而在主关卡(Level)的蓝图中是无法直接引用子关卡(Level)的场景元素的(如Actor),因为没法直接调用。此时有2种解决方案:
第一种:可以在子关卡(Level)的Actor设置Tag,然后在主关卡(Level)中动态获取所有拥有此Tag的Actor进行后续逻辑操作。
第二种:如果某些场景“状态”切换是直接动态加载/卸载 子关卡(Level),那么直接可以用LoadStreamingLevel来解决。子Level的蓝图中也可以写一些代码。
note
开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试。
#
InteractiveObject可交互物资源开发根据资源 01.描述与反馈清单.xlsx
设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyTool + Step2:自动转化资源属性 + Step3:设置VRaaS资源蓝图组件 + Step4:Change方法属性功能开发 + Step5:交互点属性开发 全部过程或去掉最后一个过程组合即可完成。
note
开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试。
#
UI 资源开发根据资源 01.描述与反馈清单.xlsx
设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyTool + Step2:自动转化资源属性 + Step3:设置VRaaS资源蓝图组件 + Step4:Change方法属性功能开发 前三个或四个过程组合即可完成。
#
Character角色资源开发根据资源 01.描述与反馈清单.xlsx
设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyTool + Step2:自动转化资源属性 + Step3:设置VRaaS资源蓝图组件 + Step4:Change方法属性功能开发 + Step5:交互点属性开发 全部过程或去掉最后一个过程组合即可完成。
另外,关于Character角色资源的开发还有以下几点需要额外注意:
#
角色动作角色资源开发一般还会涉及到 用来 切换角色动作 的属性,比如属性名称叫
动作
,对应的Change方法的实现方式是固定的,如下图:需要实现
GetAnimList
接口,返回所有本角色支持的动画名称列表。需要实现
PlayAnim
接口,播放动画。如果是骨骼模型,则对需要播放骨骼动画的SkeletalMesh进行处理,SkeletalMesh的动画蓝图必须继承PXRBaseAnimInstance。如下图,调用其PlayAnim方法。
如果是非骨骼模型,则可以写任意自定义逻辑,但是都必须调用父类的PlayAnim及绑定完成时的事件。
动画蓝图(Animation Blueprint)开发
动画蓝图必须继承PXRBaseAnimInstance
状态机开发
新建状态机作为动画输出
实现状态机:跳转需要设置“过渡参数”以平滑过渡,且必须有返回“路径”,以让人物可以在任意动画之间平滑切换。
关于
CurrentAnimaName
的说明CurrentAnimName变量是继承自动画蓝图父类PXRBaseAnimInstance的,不需要自己创建。
#
骨骼点挂载一般来说,角色会有要在手上或其他部位挂载物体的需求,那么,物体必须要挂载在角色的骨骼点上(这样挂载的物体才会随着角色的动作一起动),此时需要:
在角色资源开发时,要使用IAPoint Skeletal Mesh组件,而非Skeletal Mesh组件。
设置IAPoint Skeletal Mesh组件的交互属性,填写交互点名称即可(一般就是角色资源名称),然后打包上传。
这样在VRaaS Engine中就可以在挂载时选择角色资源的骨骼点了。
note
开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试。