实体多属性组件数据(setAttribute)

更新多属性组件数据

要更新多属性组件的组件数据,我们可以将已注册组件的名称作为 componentName 传递,并将属性对象作为传递。字符串也是可以接受的(例如,类型:点;距离:30 ),但是对象将在解析时保存 A-Frame 的一些工作:

// Only the properties passed in the object will be overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
});

或者,要更新多属性组件的各个属性,我们可以将已注册组件的名称作为 componentName 传递,将属性名称作为第二个参数传递,将属性值作为第三个参数传递:

// All previous properties for the material component (besides the color)  will be unaffected.
entity.setAttribute('material', 'color', 'crimson');

请注意,数组属性类型的行为是唯一的:

  • 数组是可变的。它们通过引用分配,因此组件可以看到对数组的更改。
  • 对数组类型属性的更新不会触发组件的更新方法,也不会发出事件。

更新多属性组件数据

如果将 true 作为第三个参数传递给 .setAttribute ,则将重置未命名的属性并使用 clobbered:

// All previous properties for the light component will be removed and overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
}, true);