Skip to main content

Step4:资源开发

资源开发是指按照资源设计文档 01.描述与反馈清单.xlsx 将文档中的设计转化为程序可识别的信息的过程。

资源开发步骤#

资源开发的全部步骤为: Step1:打开资源工具PropertyToolStep2:自动转化资源属性Step3:设置VRaaS资源蓝图组件Step4:Change方法属性功能开发Step5:交互点属性开发

不同类型的资源开发是其中几个步骤的组合。

Step1:打开属性工具PropertyTool#

自动转化资源属性之前,先打开VRaaS™ 资源制作工具,步骤为:

  • Step1:打开项目工程

    从VRaaS™ 资源制作工具包,(如果没有,点击扫描二维码获取) 中的资源工程项目工程目录 VRaaS_Assets/1.Code 下打开资源项目工程 VRaaS资源制作工程.uproject

    VRaaS资源制作工程路径
    1.Code
    └── VRaaS资源制作工程.uproject
  • Step2:运行资源属性工具

    打开项目工程后,在 VRaaS_AssetToolContent/tool 目录下右键运行 PropertyTool

    PropertyTool文件路径
    1.Code
    └── VRaaS_AssetToolContent
    └── tool
    └── PropertyTool

    运行VRaaS™ 资源工作工具的操作方法:

    sys

    运行后,资源属性工具即被打开,可以根据自己的习惯改变窗口位置。接下来就可以自动转化资源属性了。

    sys

Step2:自动转化资源属性#

  • ⬇ 打开要开发的资源设计文档 01.描述与反馈清单.xlsx 、资源属性工具 PropertyTool 和要开发的资源蓝图 测试场景 的关卡蓝图。

  • ⬇ 复制 01.描述与反馈清单.xlsx 中红色虚线内的单元格。

    sys

  • ⬇ 将复制内容粘贴在 PropertyTool 的上半部分输入区域。

    sys

  • ⬇ 点击 Excel转化为Unreal结构体 按钮。

    sys

  • ⬇ 复制 PropertyTool 下半部分区域生成的信息。

    sys

  • → 点击 Variables > PXR Variable > Scene > AssetData,然后右键 PropertyList 复制。

    sys

这样就把 01.描述与反馈清单.xlsx 中的属性经自动转化变为对应VRaaS资源的属性了。

sys

关于属性字段的说明如下:


属性名称,该资源内必须唯一。

ヾ(◍°∇°◍)ノ゙

此时,可以通过 资源测试 看看具有属性的VRaaS资源是什么样,这可是令人惊喜的第一步呀ヾ(◍°∇°◍)ノ゙~

小提示
  • 开发前,打开资源功能关卡 测试场景 的关卡蓝图,确保其父类是 PBase XRScenesys
  • 另外,如果自动转化生成的属性信息有错误的话,要去仔细检查一下 01.描述与反馈清单.xlsx 的文档格式是否完全满足 资源设计规则

Step3:设置VRaaS资源蓝图组件#

根据 01.描述与反馈清单.xlsx 描述,在VRaaS资源蓝图中整合相关模型、音效、特效等组件,此处不做过多要求,可根据自己擅长的实现方法去实现,只要能满足设计文档要求、效果好、性能好即可。

小提示
  • Scene场景资源开发是在关卡蓝图进行的开发,不需要进行组件设置。

Step4:Change方法属性功能开发#

Change方法属性功能开发是给 01.描述与反馈清单.xlsx属性反射类型(建议)= 普通 的属性都创建 Change[属性名称] 方法,然后在方法中用蓝图开发实现 属性值描述 中对每一个值的业务描述。

具体做法包含两步,创建Change[属性名称]方法 -> 实现Change[属性名称]方法

  • 创建Change[属性名称]方法

    创建Change[属性名称]的步骤为:新增方法 -> 重命名方法名称 -> 修改方法分组

    sys

创建Change[属性名称]方法注意事项
  • Change后面跟 是否XXX 的一定要与属性名称完全一致,否则属性值修改底层逻辑会无法正确执行。
  • 方法的分组一定要是ChangeProperty,否则属性值修改底层逻辑会无法正确执行。
  • PropertyReflectType类型为变量反射(Ref_Variable)的属性,系统会自动处理,不用额外写Change[属性名称]方法。
  • 位置旋转缩放可见性 为基础属性,其改变时系统将自动处理物体的渲染,所以不需要再额外写Change方法处理这些属性。
  • 实现Change[属性名称]方法

    Change方法的本质是系统底层自动处理当资源属性值改变是,通过“反射”自动找到“Change[属性名称]”函数,Change方法中的逻辑即是属性的具体体现了。所以,Change方法都是基于获取对应属性结构体,针对不同属性值描述自行完成蓝图开发。

    sys

Step5:交互点属性开发#

交互点属性开发是InteractiveObject资源和Character资源特有的。交互点属性开发以配置、测试为主,少量默认逻辑为辅助,基本不用写代码,数据驱动。

Step5-1:交互概念理解#

在开始交互点属性开发之前,请阅读下方各标签组内容,以便于正确理解交互并完成开发。


①. InteractiveObject交互物自身不能直接被化身交互,化身是通过与交互物上设定好的交互点进行的交互。

②. 一个交互物可以有多个交互点。

③. 一个交互点可以是交互物自身,也可以是交互物的某个部件。

④. 交互点可以是虚拟的看不见的,也可以和物体的可见部分一致。

⑤. 示例:

⑤-①. 杯子,杯子作为一个交互物资源,整个交互物就是一个交互点,此时整个杯子任意位置都可以用来交互;或者只有杯子手柄是交互点,那么就只有杯子手柄可以用来交互。

sys

⑤-②. 门,门作为一个交互物资源,只能通过门把手来打开,所以门把手是一个交互点。

sys


Step5-2:交互点属性确认#

经过 Step2:自动转化资源属性 交互点属性应该也已经转化完毕且复制到资源变量 AssetData > PropertyList 中了。(如果没有,请回到Step2:自动转化资源属性 完成属性自动转化。)

Step5-3:添加交互点#

  • 获取交互点信息

    01.描述与反馈清单.xlsx 中的 资源描述-交互点资源属性-交互点-[交互点名称] 对比查看,获取当前资源的交互点数量、位置、大小、名称信息。

    sys

  • 在VRaaS资源蓝图中添加交互点组件

    交互点有3种类型,分别是普通网格、骨骼网格、Widget界面,根据需要选择。 sys

Step5-4:设置交互点组件#

交互点组件设置包含 基础设置元交互设置

  • 基础设置

    是指设置碰撞与模型外观。

    • 交互点可以“刚好”就是IO模型本身,也就是说整个IO就是一个交互点。交互点也可以是一个“无形的看不见的”虚拟物体,比如当IO整体不方便交互时,可以设置一个虚拟的交互点来交互。所以,根据资源具体情况来设置交互点的模型外观。

    • 交互点的碰撞必须是:OverlapAllDynamic,否则无法触发所有交互。

      sys

  • 元交互开关设置

    元交互设置有很多,开关设置是指 图中黄框 标记的 开关 类型的设置一定要全部默认为 ,因为这些开关是在运行时/测试时手动设置的。

    sys

可被手部射线交互属性的特殊注意点

如果交互点需要能被手部射线射中,则需要设置如下碰撞,否则射线将会穿过交互点:

sys

  • 元交互详细设置

交互详细设置是指 左图中红框 标记的部分根据 01.描述与反馈清单.xlsx 中的设计来设置,左图中红框标记出来的需要根据文档中的 红色字体 部分(右图紫色框中)设置。

设置项详述解释如下:


此项设置设置非常重要,此处应该与 01.描述与反馈清单.xlsx 文档一致设置为 [交互点名称],如未设置,则交互测试日志中会提示交互点“不存在”。


Step5-5:实现交互点属性功能(可选)#

所有元交互的交互判定、交互发生后的逻辑都由系统实现好的,因此开发交互时大部分情况下只需要设置、测试即可。如果 01.描述与反馈清单.xlsx 中属性描述单元格的红色字体部分有 交互触发默认逻辑 则需要追加额外的逻辑,需要重写元交互相关方法。

sys

例如:如果要是在“进入位置范围”元交互触发后追加自定义逻辑,则先重写方法,重写时一定要Super(调用父类方法),且自定义逻辑如果是改变IO已有的其它属性的值则一定要按照截图调用接口来完成,否则系统无法记录状态,大部分需求中的自定义逻辑都是改变IO已有的属性为某个值。

sys

sys

Scene场景资源开发#

根据资源 01.描述与反馈清单.xlsx 设计结果,Scene场景资源的开发需要 Step1:打开属性工具PropertyToolStep2:自动转化资源属性Step4:Change方法属性功能开发 三个过程或前两个组合即可完成。

另外,关于Scene场景开发还有以下几点需要注意:

  • 每个Scene资源创建时会有一些固有代码(见下方三个图示),不要删除,否则会无法使用及测试。

    sys

    sys

    sys

  • 场景的关卡(Level)可能会有很多子关卡(Level),而在主关卡(Level)的蓝图中是无法直接引用子关卡(Level)的场景元素的(如Actor),因为没法直接调用。此时有2种解决方案:

    • 第一种:可以在子关卡(Level)的Actor设置Tag,然后在主关卡(Level)中动态获取所有拥有此Tag的Actor进行后续逻辑操作。

    • 第二种:如果某些场景“状态”切换是直接动态加载/卸载 子关卡(Level),那么直接可以用LoadStreamingLevel来解决。子Level的蓝图中也可以写一些代码。

note

开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试

InteractiveObject可交互物资源开发#

根据资源 01.描述与反馈清单.xlsx 设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyToolStep2:自动转化资源属性Step3:设置VRaaS资源蓝图组件Step4:Change方法属性功能开发Step5:交互点属性开发 全部过程或去掉最后一个过程组合即可完成。

note

开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试

UI 资源开发#

根据资源 01.描述与反馈清单.xlsx 设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyToolStep2:自动转化资源属性Step3:设置VRaaS资源蓝图组件Step4:Change方法属性功能开发 前三个或四个过程组合即可完成。

Character角色资源开发#

根据资源 01.描述与反馈清单.xlsx 设计结果,InteractiveObject可交互物资源开发需要 Step1:打开属性工具PropertyToolStep2:自动转化资源属性Step3:设置VRaaS资源蓝图组件Step4:Change方法属性功能开发Step5:交互点属性开发 全部过程或去掉最后一个过程组合即可完成。

另外,关于Character角色资源的开发还有以下几点需要额外注意:

角色动作#

  • 角色资源开发一般还会涉及到 用来 切换角色动作 的属性,比如属性名称叫 动作,对应的Change方法的实现方式是固定的,如下图:

    sys

  • 需要实现 GetAnimList 接口,返回所有本角色支持的动画名称列表。

    sys

  • 需要实现 PlayAnim 接口,播放动画。

    • 如果是骨骼模型,则对需要播放骨骼动画的SkeletalMesh进行处理,SkeletalMesh的动画蓝图必须继承PXRBaseAnimInstance。如下图,调用其PlayAnim方法。 sys

    • 如果是非骨骼模型,则可以写任意自定义逻辑,但是都必须调用父类的PlayAnim及绑定完成时的事件。

  • 动画蓝图(Animation Blueprint)开发

    • 动画蓝图必须继承PXRBaseAnimInstance

    • 状态机开发

      • 新建状态机作为动画输出

        sys

      • 实现状态机:跳转需要设置“过渡参数”以平滑过渡,且必须有返回“路径”,以让人物可以在任意动画之间平滑切换。

        sys

        关于 CurrentAnimaName 的说明

        CurrentAnimName变量是继承自动画蓝图父类PXRBaseAnimInstance的,不需要自己创建。

骨骼点挂载#

一般来说,角色会有要在手上或其他部位挂载物体的需求,那么,物体必须要挂载在角色的骨骼点上(这样挂载的物体才会随着角色的动作一起动),此时需要:

  • 在角色资源开发时,要使用IAPoint Skeletal Mesh组件,而非Skeletal Mesh组件。

    sys

  • 设置IAPoint Skeletal Mesh组件的交互属性,填写交互点名称即可(一般就是角色资源名称),然后打包上传。

    sys

  • 这样在VRaaS Engine中就可以在挂载时选择角色资源的骨骼点了。

    sys

note

开发完成后,一定要自行测试,确保每一个属性都没有错误。测试方法见 资源测试