<pc-script-instance>
<pc-script-instance> 为父 <pc-script> 的实体添加一个脚本实例,name 指定已注册类,其余属性配置实例。
- 必须直接位于
<pc-script>下。 - 通过
<pc-asset>加载模块注册类,或在 pc-app 就绪后自行调用 registerScript()。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
attributes | String(字符串) | - | JSON 属性对象,用于嵌套结构及 title 等与 HTML 保留名称冲突的脚本属性 |
enabled | Boolean(布尔) | "true" | 脚本启用状态 |
name | String(字符串) | - | 类注册名称,即 scriptName 或 registerScript() 指定名称 |
其他非保留属性映射到同名脚本项,kebab-case 对应 camelCase,例如 focus-point → focusPoint。按默认值类型解析,不能推断时可用 asset:、entity:、vec2:、vec3:、vec4:、color:。entity: 裸值为名称,id 应写 entity:#id。同名项同时出现在 JSON 中时,逐属性优先。详见脚本行为。
声明值是配置依据。pc-model 改资源时保留宿主与脚本实例,存活实例会重新应用声明配置,覆盖声明属性的运行时修改。因此运行状态应放在标记未声明的 property 中。pc-node 重新绑定则是新实体,脚本重新创建。
类不必先注册,元素会等待,到达后创建实例,并在 initialize() 前应用全部声明属性。脚本资源全部加载结束仍缺类时会警告,通常是忘记 pc-asset 或 name 与 scriptName 不匹配。元素仍持续等待,因此稍后注册也可成功。
事件
通过 addEventListener() 监听:
| 事件 | 说明 |
|---|---|
scriptattributeschange | 设置 attributes JSON 或 scriptAttributes 时触发,detail.attributes 为新对象;逐属性修改不触发 |
scriptenablechange | 每次设置 enabled 都触发,即使值没变,detail.enabled 为新状态 |
scriptnamechange | 已有 name 后改名时触发,detail.oldName 和 detail.newName 为两名称;父 <pc-script> 销毁旧脚本并创建新脚本 |
三者均冒泡。父组件监听并应用到引擎,也可在祖先统一观察多个实例。逐属性由父组件直接观察元素变化,如需自行观察,可用 MutationObserver。
示例
立方体挂载 rotate。脚本通常来自资源,也可从内联模块注册,实例会等待类到达。可修改旋转速度:
<pc-app>
<pc-scene>
<pc-entity name="camera" position="0 0 3">
<pc-camera clear-color="#1d1f2b"></pc-camera>
</pc-entity>
<pc-entity name="light" rotation="45 30 0">
<pc-light></pc-light>
</pc-entity>
<pc-entity name="cube">
<pc-render type="box"></pc-render>
<pc-script>
<pc-script-instance name="rotate"></pc-script-instance>
</pc-script>
</pc-entity>
</pc-scene>
</pc-app>
<script type="module">
import { registerScript, Script } from 'playcanvas';
import { whenReady } from '@playcanvas/web-components';
// Wait for the application, then register the script class
await whenReady('pc-app');
class Rotate extends Script {
update(dt) {
this.entity.rotate(10 * dt, 20 * dt, 30 * dt);
}
}
registerScript(Rotate, 'rotate');
</script>
JavaScript 接口
可以通过 ScriptInstanceElement API创建和操作元素。
实例创建后就绪,等待 whenReady 或 ready(),再通过 script 访问活动 Script,或将对象赋给 scriptAttributes,等同 attributes JSON 通道。
另请参阅
<pc-script>:实例容器。<pc-asset>:加载模块。- 通过脚本添加行为:声明属性与类型。