Skip to content

常用节点和组件接口

在通过 访问节点和组件 介绍的方法获取到节点或组件实例后,这篇文章将会介绍通过节点和组件实例可以通过哪些常用接口实现我们需要的种种效果和操作

节点状态和层级操作

假设我们在一个组件脚本中,通过 this.node 访问当前脚本所在节点。

激活/关闭节点

节点默认是激活的,我们可以在代码中设置它的激活状态,方法是设置节点的 active 属性:

bash
this.node.active = false;

注意

  1. 设置 active 属性和在编辑器中切换节点的激活、关闭状态,效果是一样的

  2. 当一个节点是关闭状态时,它的所有组件都将被禁用。同时,它所有子节点,以及子节点上的组件也会跟着被禁用。(父关闭,子也关闭)

  3. 子节点被禁用时,并不会改变它们的 active 属性,因此当父节点重新激活的时候它们就会回到原来的状态。

  • 也就是说active表示的其实是该节点自身的激活状态.而是否可以被激活则取决于它的父节点.

  • 如果它不在当前的场景中,它也无法被激活.我们可以通过节点上的只读属性activeInHierarchy来判断它当前是否已经激活

激活状态

this.node.active = true

  • 节点原先就处于可激活的状态.修改active为 true 就会立即触发激活操作:

注意

  1. 在场景中重新激活该节点和节点下所有 active 为 true 的子节点

  2. 该节点和所有子节点上的所有组件都会被启用,它们中的 update 方法之后每帧会执行

  3. 这些组件上如果有 onEnable 方法,这些方法将被执行

关闭状态

this.node.active = false

  • 节点原先就处于可关闭的状态.修改active为 false 就会立即触发关闭操作:

注意

  1. 在场景中隐藏该节点和节点下面的所有子节点

  2. 该节点和所有子节点上的所有组件都被禁用,也就是不会在执行这些组件中的update代码

  3. 这些组件上面如果有onDisable方法,这些方法将会被执行

更改节点的父节点

假设父节点为parentNode,子节点为this.node,您可以

js
this.node.parent = parentNode;

或者

js
this.node.setParent(parentNode);

parentNode.addChild(this.node);

这两种方法是等价的

索引节点的子节点

  • this.node.children: 返回节点的所有子节点数组

  • this.node.children.length: 返回节点的子节点数量

注意

这两个 API 都只会返回节点的直接子节点,不会返回孙子节点

更改节点的变换(位置,旋转,缩放)

更改节点位置

  • (1) 使用setPosition方法
js

1. this.node.setPosition(100, 50, 100);

2. this.node.setPosition(new Vec3(100, 50, 100));
  • (2) 设置节点的position属性
js
this.node.position = new Vec3(100, 50, 100);

更改节点旋转

  • (1) 使用setRotation方法
js
this.node.setRotation(90, 90, 90);
  • (2) 使用setRotationFromEuler方法

或通过欧拉角设置本地旋转:

js
this.node.setRotationFromEuler(0, 0, 0);

更改节点缩放

js
this.node.setScale(0.5, 0.5, 0.5);

常用组件接口

Component是所有组件的基类,任何组件都包括如下的常见接口(假设我们在该组件的脚本中,以 this 代指该组件实例):

  • this.node该组件所属的节点实例

  • this.enabled是否每帧都执行该组件的update方法,同时也用来控制渲染组件是否显示

  • update(deltaTime:number) 作为组件的成员方法,在组件的 enabled 属性为 true 时,其中的代码会每帧执行

  • onLoad():组件所在节点进行初始化时(节点添加到节点树时)执行

  • start():会在该组件第一次 update 之前执行,通常用于需要在所有组件的 onLoad 初始化完毕后执行的逻辑