Files
netease-modsdk-wiki/docs/mcguide/20-玩法开发/14-预设玩法编程/11-深入理解预设/0-基础架构.md
2025-03-18 14:46:12 +08:00

88 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 基础架构
在上一个课程我们已经学习了预设和零件的一些简单用法,并轻松制作出了一个炫酷的功能玩法。
这个课程将逐步为你介绍一些更深入的知识,包括预设系统的构成、各种内置预设以及如何使用预设编辑器组装各种炫酷的预设等。
## 构成
预设系统的基础数据结构体系如下图:
![image-PresetFramework20220209](./images/image-PresetFramework20220209.png)
前两层是基础数据类型从第三层开始着重介绍PresetBase、PartBase、BoxData是组装自定义预设/零件的基础结构,
EntityObject、PlayerObject、EffectObject是对SdkInterfaceSDK接口封装基类的另一层封装构建对不同种类预设对象的抽象以接口的形式对外直接提供组件操作
XXXPreset相关都是一些内置预设是预设体系与我的世界游戏元素的结合。
预设系统的目标是进一步降低我的世界开发者的使用门槛,通过简单的组装,修改自定义预设,更方便的架设自己的新世界。
## 基础数据类型
- **GameObject**
GameObject游戏对象是所有预设对象的基类实现了序列化存档读取等功能。
- **SdkInterface**
SdkInterfaceSDK接口封装基类是对SDK接口封装的基类将组件的操作以方法的形式暴露出来外界直接调用即可不必再走先创建对应组件再调用组件相关方法的步骤。
- **TransformObject**
TransformObject变换对象是拥有坐标变换属性的的游戏对象基类包括位置变换、旋转变换、缩放变换等是拥有确定位置信息数据的一类对象。
- **PresetBase**
PresetBase预设基类是所有预设的基类。预设是一类可以被直接放置在场景中的TransformObject变换对象并且预设下可以挂接其他TransformObject可以通过这种方式对游戏逻辑进行简单的封装。
在编辑器中放置预设时,会生成预设的虚拟实例,在游戏中生成预设,会生成真实实例。
它也可以直接理解为空预设,实现了挂接子节点,属性修改,实例化,加载卸载与驱动自定义零件逻辑等功能。
- **PartBase**
PartBase零件基类是所有自定义零件的基类。将零件挂接在预设下可以为预设赋予特定的逻辑和功能。
设计零件的初衷是为预设提供一些即插即用的代码型功能组件。
通过良好的设计,预设系统的大部分功能都可以通过自定义零件实现。
零件本身放进MOD里并不会生效必须挂接到某个预设身上并让这个预设在游戏中实例化才能生效。
- **BoxData**
BoxData素材数据与素材类似可以挂接在预设下使用。
素材在编辑器中不会实际生成,而是虚拟实例化,可以重叠放置。
在虚拟实例化状态,素材的变换可以任意调整并进行预览。
只要运行一次,素材就会真实实例化,永久变成地图的一部分。
真实实例化后素材不会因预设卸载或调用坐标变换相关API而发生变化也不会因重启地图而重新加载直至销毁。
销毁素材时,会尝试将素材数据内未发生过变化的方块替换为空气,部分特殊方块可能无法清除。
- **EntityObject**
EntityObject实体对象是对实体公共SDK组件使用的封装为外层实体预设提供了面向实体对象的组件操作方式将底层SDK接口另外做了一层封装向开发者提供更加便捷的SDK组件调用方式
开发者无需再走先创建对应组件再调用组件方法的流程,可直接调用对外提供的组件方法,提高了开发者的开发效率。
- **PlayerObject**
PlayerObject玩家对象是对玩家相关SDK组件使用的封装为外层玩家实体预设提供了面向玩家对象相关的组件操作方法与实体对象的差异在于其只封装了与玩家对象相关的sdk方法。
- **EffectObject**
EffectPreset特效预设是一类绑定特效资源的预设设计思路与上述所述实体对象设计思路一致为外层特效实体预设提供了面向特效对象相关的组件操作方法。