【问题标题】:Three JS. "Property 'material' does not exist on type 'Object3D'" error when getObjectByName is used三个JS。使用 getObjectByName 时出现“类型‘Object3D’上不存在属性‘材料’”错误
【发布时间】:2021-06-23 08:37:37
【问题描述】:

我正在通过this.scene.getObjectByName("MeshName").material 获取我的可视化的材料元素,这些元素存在,一切正常,当我打印它时它工作。我需要它来改变不透明度。但问题是我收到“'Object3D'类型上不存在属性'材料'”错误,因此我无法运行 ng build,我需要使用// @ts-ignore 忽略它。有人知道为什么会这样吗?

【问题讨论】:

  • 我相信这是addressed in this question你基本上必须告诉TS你期待一个Mesh:const myThing = (<THREE.Mesh>scene.getObjectByName('MeshName'));这个然后你可以访问它的材料:myThing.material;

标签: typescript three.js


【解决方案1】:

我认为问题在于getObjectByName() 的返回类型是Object3D。而且这种类型的对象没有material 属性。

因此,如果您确定“MeshName”是网格的名称,则必须将返回的对象转换为材质,然后访问material

(this.scene.getObjectByName("MeshName") as THREE.Mesh).material

【讨论】:

  • 但似乎在“Mesh”中没有 opacity 属性并且它也抛出错误:Property 'opacity' does not exist on type 'Material |材料[]'。 “材料[]”类型上不存在属性“不透明度”
  • 由于material 属性也可以保存一组材料,因此必须转换为单一材料。
  • 抱歉长时间休息。可以肯定的是,我不明白如何进行这种铸造。你能告诉我更多吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2022-10-05
  • 2020-10-18
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多