Skip to content
beafraid edited this page Apr 16, 2024 · 16 revisions

简介

本SDK可以导出2种Item:场景(Scene)或模型(Model),通过 Item Manager窗口的 Type枚举可切换类型。每种Item里面都可包含 资源文件(Assets),后面会详细介绍。应用一次只能加载一个场景Item,但可额外加载多个模型Item。

Item Type Content
Scene Scene,Assets
Model Assets

场景Item

场景Item包含主场景及 资源文件,可以通过这类Item为用户提供各种奇特的环境。以海洋Item为例,主场景为广阔的海洋,资源文件为替代桌面图标的物体(如船、宝箱)、装饰物体(如鸭子)、及背景动态物体(如基于Flocking算法运动的海鸥及鱼群)等:

image

注意:

  • 此类Item中的 资源文件通常与其主场景有较强的关联性(如仅存在海洋中的漂浮物),或使用了自定义的代码组件。如果 资源文件为通用素材,建议挪到单独的模型Item中打包,以便更多场景能够使用到。

模型Item

模型Item仅包含 资源文件,通常为同一系列资源的合集(如建筑模块、环境特效、交通工具),这些资源可供用户在不同场景中使用。以低多边形建筑模块Item为例,该Item基于Unity商店中的免费资源包Low Poly Buildings - Full Pack制作,提供了搭建城市所需的建筑、道路、载具等模块:

image

场景Item的主场景

如果Item的类型是场景,则需要为其添加一个主场景才能正常打包。点击 Item Manager窗口的 Create Scene按钮,会弹出来一个标题为 Select Template...的场景模板窗口,这里提供了常用的Item模板场景,在左侧选中符合的一项然后点击 Create按键,一个新的 Entry.unity场景文件及相关资源将会被克隆并存储在 [Item根目录]/Scenes目录下。

image

一旦主场景创建完成,你可以点击 Item Manager窗口的 Edit Scene来重新打开它。 在Hierarchy窗口,你可以看到以下两个场景:

image

Entry 场景

该场景为Item的主场景,包含了环境布置以及各种逻辑代码。

image

游戏对象及组件

该场景可能包含以下游戏对象,其中带 [必要]标识代表该游戏对象必须包含在该场景中(或组件必须附着在游戏对象中), 带 [可选]标识代表可选项,应用已经提供默认实现,仅当开发者认为需要提供重载实现或打算公开给用户修改时才自行添加:

AliveDesktop [必要]:该场景的主控制器。它有以下组件:

  • AD_AliveDesktop [必要]: 标记该物体为AliveDesktop单例。

ShellController [必要]:Shell Item的控制器。它有以下组件:

  • AD_DefaultShellController (或IAD_ShellController的子类) [必要]: 自定义物体的生成规则(如生成区域、生成间隔)。

DecorationController [必要]:Decoration Item的控制器。它有以下组件:

  • AD_DefaultDecorationController (或IAD_DecorationController的子类) [必要]: 自定义装饰物体的生成规则(如生成区域、生成间隔)。

EnvironmentController [可选]:管理环境设置。它有以下组件:

  • AD_DefaultEnvironmentController (或IAD_EnvironmentController的子类) [必要]: 自定义环境设置(如灯光、天空盒或反射等)。

PostProcessingController [可选]: 管理后期特效(PostProcessing)设置。它有以下组件:

  • AD_DefaultPostProcessingController (或IAD_PostProcessingController的子类) [必要]: 自定义PostProcessing设置。

XRController [可选]: 管理XR设置。它有以下组件:

  • AD_DefaultXRController (或IAD_XRController的子类) [必要]: 自定义初始传送点、XR移动模式及缓存上次离开时的位置信息等。

PD Group [可选]: 如果想为用户提供可配置/存储的数据(如上述的PostProcessing配置文件),你需要在该物体下增加带指定PersistentData组件的子物体,且对每个组件指定唯一Key:

image

AliveDesktopHub_Simulator场景

该场景模拟了运行时环境,因此你不需要打包Item也可以测试部分功能:

image

注意:

  • 如果找不到该场景,你可以点击顶部菜单的 Alive Desktop/Add Simulator Scene按钮叠加打开该场景。
  • 该场景资源默认存储在只读的Pacakge文件夹下,你需要先在 PacakgeManager窗口导入或更新相关的 Simulator资源才能正常打开。
  • 模拟器支持PC/VR模式运行,可通过顶部菜单的 Alive Desktop/Set Platform Mode切换。
  • 在PC模式运行时,由XRI的XR Device Simulator模块提供键鼠模拟VR输入的功能,可展开左下角的 XR Device SimulatorUI查看操作提示:

image

下面对该场景中较为重要的游戏对象进行介绍,如果觉得无聊可以跳过这一段:

SystemManager Group (处理系统数据及事件)

  • SystemAudioManager: 进行系统音频采样,主要用于音频可视化。该物体有一个 AudioSource组件,可以设置不同的音频源进行调试。如果你想在运行时播放/暂停音频,可以单击Hierarchy窗口中该物体右侧的ToggleUI进行切换。

SettingManager Group (处理用户设置)

  • CommonSettingManager: 管理程序的通用设置。当程序运行后,如果你更改了 AD_CommonSettingManagerSimulator组件的相关字段,那么程序将会发送对应的事件。
  • ModManager Group (处理程序数据及事件)
  • EnvironmentManager: 管理环境设置。
  • PostProcessingManager: 管理PostProcessing设置。
  • SceneManager: 管理场景变换。
  • XRManager: 管理XR设置及状态。
  • InputManager: 管理各种输入源。
  • ShellManager: 管理Shell控制器。
  • DecorationManager: 管理Decoration控制器。

AssistantManager

该物体组主要提供调试功能,相关配置信息存储在 Assets/Resources/Threeyes/SteamworksEditorSetting.asset文件中:

image

资源文件

资源文件主要由各种素材构成,如Prefab、模型、贴图、音频等。

壳/装饰物体

以下两类Prefab物体比较特殊,他们主要提供给用户编辑使用:

  • 壳物体(Shell Item):此类物体用于替代桌面图标(如文件、文件夹、快捷方式),能够以文本、贴图等形式呈现对应图标的信息。如下图,该帆船模型代替了桌面的 此电脑图标,船名对应图标的名称,船帆图案对应图标的预览图,用户可以进入编辑模式修改其内容:

image

  • 装饰物体(Decoration Item):此类物体不与桌面图标绑定,用户可在运行时添加/删除/编辑它们以便丰富场景内容。如下图,场景中的座椅、电视机和时钟等都是用户在运行时摆放的装饰物体:

image

按照以下流程可创建壳/装饰物体

初始化Prefab

首先,物体需要按照规则进行建模及摆放:

  • 根物体的缩放值为1,整体与真实世界的尺寸一致(Unity中的1单位对应真实世界的1米);
  • 如果物体与物理引擎有关,请为其增加必要的碰撞体。
  • 根物体的锚点放在物体的底部,其局部X/Y/Z轴分别对应物体的右/上/前方(基于Unity坐标系)。为了方便查看,可以基于物体的可摆放区域,在建模场景中如下摆放(注意它们的锚点朝向以及局部旋转值):
    • 物体主要摆放在地面: image
    • 物体主要附着在墙壁: image
    • 物体主要附着在天花板: image

物体制作完成后需要将其变成Prefab,然后在Project窗口中选中该Prefab,点击顶部菜单Alive Desktop/[Shell/Decoration]/Init/...中合适的选项,SDK将会为其添加必须的组件:

image

以下组件是物体必须包含的,否则会出现无法正常序列化等问题:

  • AD_DefaultShellItem/AD_DefaultDecorationItem:标记该物体为壳/装饰物体
  • RuntimeSerializable_GameObject:管理物体的整体序列化数据。
  • RuntimeSerializable_Transform:管理物体的Transform组件序列化数据。

按照是否能互动,物体可细分为:

  • 静态(Static)物体:仅提供基础的装饰功能,不可交互。如墙壁模块、树木等都可作为静态物体;
  • 可交互(Interactable)物体:可接受玩家的输入信息(抓取、开关、驾驶等),或与环境物体进行互动(如被Socket吸取)。如下图的玩具车,用户可以驾驶该物体,也可以附着在其指定位置:

image

注意:

  • 打包后的嵌套Prefab资源(也就是在Prefab中包含了其他Prefab),会在初始化时出现顺序错乱的问题。因此建议在编辑完成后,进入根Prefab的预览模式,对其所有子Prefab右键并选择 Prefab/[Unpack/Unpack Completely]菜单来取消其Prefab状态(后续需要修改时可以通过Prefab/Reconnect Prefab...重新链接): image

AD_SOXXXPrefabInfo

AD_SOXXXPrefabInfo类型的ScriptableObject文件用于存储壳/装饰物体的Prefab引用、标题及预览图等元数据:

image

如需创建AD_SOXXXPrefabInfo文件,可选中Project窗口中对应的壳/装饰物体Prefab,点击顶部菜单Alive Desktop/[Shell/Decoration]/PrefabInfo/Create,SDK将会自动基于所有选中Prefab的名称、预览图等数据,在 [选中Prefab的文件夹]/PrefabInfo目录生成对应的文件:

image

AD_SOXXXPrefabInfoGroup

AD_SOXXXPrefabInfoGroup类型的ScriptableObject文件用于存储多个AD_SOXXXPrefabInfo,将相似的壳/装饰物体整合在一起变为合集,如下图的音频可视化物体合集:

image

如需创建或更新AD_SOXXXPrefabInfoGroup文件,有以下几种办法:

  • 选中Project窗口中对应的AD_SOXXXPrefabInfo文件,点击顶部菜单Alive Desktop/[Shell/Decoration]/PrefabInfo/Group Selected,SDK就会生成对应的文件。选中生成的文件,就能在Inspector窗口中设置其标题(Title)及AD_SOXXXPrefabInfo列表(ListData)。
  • Project窗口的空白处点击右键,选择Create/Alive Desktop/PrefabInfo/[ShellItemGroup/DecorationItemGroup],SDK就会生成对应的文件。
  • 选中已创建AD_SOXXXPrefabInfoGroup文件,在Inspector窗口对该组件右键并选中InitUsingCurFolder,SDK就会自动搜索该文件所在文件夹下的所有AD_SOXXXPrefabInfo并更新到ListData字段中。

各种文件的关系

上述几种文件的关系如下:

flowchart LR;
    AD_SOXXXPrefabInfoGroup-->AD_SOXXXPrefabInfo1-->Prefab1;
    AD_SOXXXPrefabInfoGroup-->AD_SOXXXPrefabInfo2-->Prefab2;
Loading

注意:

  • 程序运行时会扫描Item包中所有AD_SOXXXPrefabInfoGroup类型的资源,从而列出对应的壳/装饰物体
  • 每个Item包内可包含多个AD_SOXXXPrefabInfoGroup文件。
Clone this wiki locally