跳到主要内容

UI场景

UI场景控件可以在UI上显示3D场景,并可在其中创建和操作客户端单位和表现。

『UI场景』实际上是两个概念——场景和控件的结合体。用户需要通过客户端触发器来创建和操作后台UI场景,但UI场景在被触发器创建后只是一些内存中的代码,它们仍需要通过界面编辑器的UI控件才能被显示出来,因此用于显示的『UI场景控件』和被显示的『UI场景』其实是两个不同的对象。

属性列表

属性功能
渲染路径控制UI场景背景是否透明
不透明:和正常场景显示一致
半透明混合:UI场景背景透明,但需要消耗两倍的算力

UI场景单位和表现的特性

使用UI场景的『创建单位』和『创建表现』面向对象方法,用户可以在UI场景中创建数编中指定的客户端单位和表现。这两个函数分别返回所创建的单位或表现对象。UI场景中的客户端单位和表现比普通的单位或表现功能少一些,但依然共享大部分的面向对象方法。

UI场景支持创建单位以及以下几种数编表现:

  • 单位节点
  • 模型表现节点(持续性和一次性)
  • 粒子表现节点(普通和一次性)
  • 附属模型表现节点
  • 光束表现节点
  • 材质表现节点

其它类型的表现节点无法正常在UI场景中创建。

UI场景中的单位和表现可以通过面向对象方法执行以下操作:

  • 播放(粒子表现)
  • 附着到同场景中的单位或者表现
  • 播放动画(通过客户端高级动画API,请参考客户端高级动画文档)
  • 替换模型资源(仅限单位和模型表现节点)
  • 设置XYZ缩放
  • 设置坐标(点)
  • 设置XYZ坐标
  • 销毁(移除UI场景中的单位或表现)

注:

  1. 对UI场景中的单位或表现设置坐标时,如果传入的坐标点属于其它场景,不会令单位或者表现跳转场景,仅会使用点中所指定的XYZ坐标来设置单位/表现的位置。
  2. 用户只能通过面向对象方法来操作UI场景中的单位和表现。此外,UI场景表现在设置高度时需永远指定绝对高度,无法指定地形相对高度。

如何创建并使用UI场景

接下来会通过几个触发语句一步步展示如何创建、使用、销毁UI场景。

创建UI场景对象

要展示一个UI场景,需要先创建一个UI场景对象,并将其绑定到想要显示它的UI场景控件上。

可以通过客户端触发器『创建UI场景』来创建一个新的UI场景。该函数返回新建的UI场景,并可选择是否在场景中显示阴影,以及是否加载指定的地编场景。

  • 默认镜头

    • 该参数可以指定一个地编镜头,UI场景在绑定到控件以后会展示这个镜头在UI场景中看到的内容。默认情况下会指定一个查看0,0点位置的第三人称镜头。用户可以选择自己设定的镜头。
    • 需要注意的是,用户在想要指定自定义镜头位置时应当选择『固定镜头』或者『手势控制』镜头,跟随镜头会永远位于0,0坐标位置,因为UI场景中不存在主控单位的概念。
    • 无论地图再大,一个镜头所能显示的区域也是有限的,这也是为什么不应该加载非必要的大尺寸地编场景的一个原因。
  • 显示阴影

    • 决定UI场景中是否计算单位和表现的阴影,阴影会占用额外的渲染资源。此外,只有在数编里的地图设置中关闭『预计算场景阴影』高级选项才能在UI场景中显示阴影。
  • 加载地编场景

    • 决定UI场景是否会加载指定的地编场景,如果是,会将指定的地编场景整个载入到UI场景中。但不会包含地上的单位、点和区域。
    • 除非有特殊必要,用户不应该加载过大的地编场景,因为地编场景会消耗额外的资源。

UI场景创建完成后,必须通过一个变量记录其返回的UI场景对象,并使用其面向对象方法来在场景中创建、设置单位和表现,并将其绑定到UI场景控件上用于显示。

绑定与解绑UI场景

『绑定UI场景』语句立刻将UI场景与指定的UI场景控件绑定(UI场景控件可通过通用的『获取下属控件』函数来获得),使UI场景的内容显示到指定的控件上。

反之,使用『解除绑定UI场景』语句会使UI场景与UI场景控件解除绑定,控件不再显示UI场景的内容。

『绑定UI场景』方法还可指定控件是静态还是动画绘制指定的UI场景,若选择静态,则控件上显示的画面将永远静止,只会持续显示绑定的那一瞬间UI场景的内容。若不选择静态渲染,则控件会实时反映所绑定的UI场景的变化。

创建单位/创建表现

在UI上显示3D场景通常并不仅仅是为了显示一块光秃秃的地形。因此星火编辑器允许用户像对待普通场景一样,在UI场景里创建和控制单位以及表现。

调整视口尺寸

该动作允许用户手动调整UI场景控件所展示的内容的分辨率。当UI场景绑定到控件时,会自动根据控件的当前尺寸来设置视口尺寸(即分辨率),但用户可以在绑定操作完成后手动设置视口尺寸,以调整控件内容的分辨率。

调整镜头

在UI场景中,可以指定不同的场景镜头,并可以设置当前镜头的位置和旋转。

销毁UI场景

摧毁UI场景,释放其所占用的资源。

UI场景会占用额外的资源,用户应当及时对不再使用的UI场景进行清理。

切忌每次显示控件时反复创建额外的UI场景且不清理旧的UI场景,这可能导致多次显示控件后,后台堆积了大量的UI场景对象,造成内存居高不下。