跳到主要内容

IdeaXR引擎术语

概述

  • 节点:节点是我们使用引擎创作作品时的基本构件,可以理解为一个构件就是一个节点。
  • 场景:场景由若干节点组成,这些节点构成的树结合起来就构成了场景,它可以看作你完整作品的基本单元。
  • 场景树:不同场景汇集在一起就构成了场景树。

三者关系:一个根节点下可以挂载若干子节点,子节点又可以挂载孙节点,这样构成的树状结构就是节点树。应用在IdeaXR引擎中每个节点其实是一个基础构件,而场景又是由这些构件堆积而成,因此场景也是节点树。场景树是不同场景汇集而成,则场景树也是节点树。

节点、场景和场景树

节点

节点是创建内容的基本构成。引擎里有很多种节点,每个节点类型可以执行特定的功能,例如有的可以播放声音,有的可以显示图像,有的显示3D模型等等。任何给定的节点都具有如下统一属性:

  • 具备节点名称;
  • 可以编辑各种属性;
  • 可以持有子节点;
  • 可以作为子节点添加到其他节点;
  • 可以接收回调方法;
  • 可以扩展出更多功能;

我们可以点击 + 来创建一个新的节点: imageCover

也可以在一个节点上右键点击创建一个新的节点: imageCover

我们可以通过顶部的快捷工具栏以及右键菜单来对节点的属性以及显示进行操作。 例如:我们可以点击工具栏右上角图标展开折叠场景树中的节点。 我们可以选中节点右键选择展开折叠当前节点。 imageCover

!!! 温馨提示

节点与节点之间存在父子关系,如上图我们在一个节点上创建一个新的节点,那么新创建的节点是原节点的子节点,原有的那个节点是新节点的父节点,二者是父子关系。父节点的某些属性会影响到子节点,例如在Spatial类型的节点上创建一个新的节点,那么该节点的初始位置会在其父节点的位置。再例如父节点的隐藏会导致其子节点跟着隐藏

场景

通过在一个节点上添加一个子节点的操作,我们可以将节点与节点之间排成树状结构。在若干次的节点组织后,我们可以得到一个场景。场景文件后缀为.scene。该场景包含了一个树状的节点集合,如下图所示: imageCover

!!! 温馨提示

场景根节点是指场景中最基础的节点,在上述场景中,FirstPerson是该场景的根节点。

一个项目中可以有很多个场景,在运行时,我们需要定义一个主场景,主场景有且仅有一个。主场景是项目运行时的那个场景。我们可以在 编辑 -> 项目设置 中设置主场景。 imageCover

场景树

场景树是引擎为底层提供的主循环。在项目运行时会自动实例化并设置,不需要任何额外的操作。场景树有很重要的作用:

  • 包含一个根视图。当一个场景添加到场景树中时,会把这个场景添加到根视图中作为其子级;

  • 包含编组信息,具有组相关的方法;

  • 包含一些全局状态功能。

运行时可以查看远程的节点树,如下图所示: imageCover

场景树搜索

场景树提供了搜索筛选功能,在图中位置输入节点名称,即可显示出符合筛选条件的节点 imageCover 双击筛选后的节点,可聚焦到选中节点上。

场景树的筛选支持子场景节点的筛选 比如搜索上图平面子场景中的节点静态刚体,搜索结果如下: imageCover 图中 1 处即为符合筛选条件的节点,该节点位于平面子场景里。双击即可聚焦。 图中 2 处表明是子场景的根节点,点击这个图标即可进入子场景。 平面子场景的场景树如下: imageCover

节点操作

实例化子场景

一个项目中可以有多个场景,实例化子场景用来组织项目中的场景。例如,我们有一个房子的场景,和一个小区场景,我们可以在小区场景中实例化多个房子的场景,并排布实例化的节点,这样小区场景中就会有很多的房子。 实例化一个子场景有两种方式,如下所示: imageCover 接下来选择要实例化的场景: imageCover !!! 温馨提示

可以实例化的除了.scene文件还有一些可以当成场景的文件,比如.fbx和.gltf等。

!!! 注意

一个场景被实例化为多个节点,如果修改这个原场景,实例化后的节点也会被修改。此外,对于实例化后的节点,修改其中的一个节点,不会改变原场景。

实例化子场景便利我们做项目:

  • 可以细分场景,便于管理;

  • 同时管理编辑多个节点实例;

  • 组织、嵌入复杂项目和UI;

对于实例化子场景之后生成的节点,右击该节点会多出如下选项:

imageCover

子节点可编辑 功能可以将该实例化的节点展开,能够看到并编辑该场景下的子节点。展开的子节点颜色会比较淡一点。在这里修改展开的子节点的属性,只会在该场景中起作用。其他未修改的属性相当于原场景的引用。修改原场景中的属性,如果实例化的节点的子节点并没有被修改则会受到原场景的影响。 imageCover

加载为占位符 功能主要适用于大场景。该选项打开后,运行项目时该场景节点会被一个占位符取代,只有调用replace_by_instance方法后才会加载实际的场景。

使用本地功能 与子节点可编辑功能类似,但是有本质上的区别。其展开的子节点颜色正常。使用本地会将原场景中的节点树复制一份到新的场景中,而不是引用。 imageCover

在编辑器中打开 功能是指打开这个场景文件。我们可以看到场景实例化来的节点旁边会有一个类似放映的图标,点击可以打开原场景文件。这两个的功能是一致的。

从场景中合并

右击节点,会出现一个 从场景中合并 的选项,点击它可以选中其他场景文件中一些节点,点击确认后复制一份到当前节点的子节点位置。操作如下图:

imageCover

点击从场景中合并

imageCover

选择场景文件

imageCover

选择要合并的节点

imageCover

结果如图,两个被选中的节点出现在了当前场景中

将分支保存为场景

将分支保存为场景 功能与实例化子场景互为相反操作。如果场景树太复杂,可以使用此功能将部分节点树拆分出去。此外,如果有部分子树可以独立出来供复用的话,可以使用该功能。具体操作可以参考下图:

imageCover

imageCover

imageCover

信号和Groups

选中某个节点之后,点击场景旁边的节点选项,我们可以看到两大块内容,一个是信号,一个是Groups。

imageCover

多场景管理

三种新建场景模板的区别和用途

引擎提供了3中新建场景模板,分别是3D场景,2D场景和空场景,如下图所示: imageCover

3D场景 是引擎预设的一个场景,在这个场景中有4个节点,分别是 Spatial 节点, MainCamera 节点, Plane 节点和 DirectionalLight 节点。 Spatial 节点是场景的根节点。 MainCamera 节点是一个相机类型的节点,引擎给该节点添加了一个脚本,用来实现相机的自由移动。 Plane 是一个MeshInstance类型的节点,即下方的棋盘格。 DirectionalLight 节点是一个平行光节点,给场景以光照。该场景提供了一些基础的节点,你可以基于该场景继续创作。

imageCover

2D场景 是用来制作UI的场景。引擎预设了两个节点,分别是 ControlButton 节点。其他的2D UI节点需要项目开发者自己制作。 imageCover

空场景 是一个3D的空场景。这个场景中只有一个 Spatial 节点。你可以在该场景下尽情创作。 imageCover

信号和输入

  • 信号:信号起事件通知的作用,在节点发生某些事件时发出信号。
  • 输入:用于用户交互中输入一些事件。

信号

当你和朋友约定个手势并在特定时间让他做出这个手势,你就能理解他的意思,此时这个手势信息就可以理解为一种信号。在IdeaXR中节点在发生某些事件时发出的信息就是一种信号,此功能无需在代码中硬连接它们就能让节点相互通信。它为你提供了构建场景的灵活性。

Docusaurus Plushie

这里有关于信号的详细介绍

输入

IdeaXR的输入事件系统会捕获玩家的输入。在游戏中可以使用多种不同类型的输入————键盘,鼠标等等,除此之外还有许多不同的方法将这些输入转化为游戏中的动作。

在实际的使用时可以通过脚本调用输入事件方法:

Docusaurus Plushie

这里有关于输入操作的详细介绍

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet