Aframe自定义组件,schema中的自定义属性导致错误

Aframe custom component, custom property in schema results in error

我想在我的模式中有两个自定义属性,如果它们没有定义,或者如果它们的值低于 0.0,则它们有一个回退值

这是架构:

schema: {
  url: { type: 'string'},
  key: { type: 'string'},
  intensity: {
    // default is -100 to trigger fallback
    default: -100, 
    parse: function (value) { 
      if (value >= 0.0) { 
        return value 
      } 
      return -100
    } 
  }
}

给我带来问题的 属性 是强度 属性。 如果在a-entity

定义

<a-entity io3d-data3d="key: mykey; lightMapIntensity: 1.0" shadow="receive: true"></a-entity>

组件正确使用了该值,但是当我打开 a-frame 3d 编辑器并单击实体时 - 我收到此错误:

如果 a-entity 中未设置属性,不会 发生这种情况。

我是不是在使用自定义属性时做错了什么? 有没有办法定义默认值为 undefined 或 null 的可选属性?

自定义 属性 类型:

https://aframe.io/docs/0.6.0/core/component.html#custom-property-type

好的,所以我注意到我的模式试图将我的 属性 解析为字符串。 如果您不定义类型,我猜这是后备方案?

lightMapIntensity: {
  // default is -100 to trigger fallback to value specified in data3d file
  type:'float',
  default:-100.0,
  parse: function (value) {
    if (parseFloat(value) >= 0.0) {
      return parseFloat(value)
    }
    return -100.0 // = fallback to value from data3d file
  }
}

至少我没有错误了。

也许有人有更好的答案。

a 帧检查器尝试使用 toFixed(decimalPlaces) 函数对值进行四舍五入。

组件中传递的值是字符串,据我所知,toFixed() 不适用于字符串,至少在我的实验中不是,在 documentation.

一个简单的解决方案是return一个解析值:

if (value >= 0.0) {
  return parseFloat(value);
}

虽然在比较字符串和浮点数时,它会做一些额外的解析,您可能希望在检查之前解析值:

value = parseFloat(value);
if (value >= 0.0) {
  return value);    
}