OnBeforeObjectUpdate
OnBeforeObjectUpdate
在一个 `Fn()` 作用域内创建“对象更新前”的事件(针对 Mesh|Sprite)。回调在每帧对象更新前触发,通常用于从 TSL 上下文安全地执行 JS 侧副作用(如更新可脚本数值)。
核心优势
将物体级生命周期钩子引入到 TSL 函数上下文中,无需手写 Three.js 事件绑定与解绑;便于为每个对象执行逐帧、与材质节点协同的轻量更新。
常见用途
在对象更新前刷新 scriptableValue/uniform,用作本帧的混合因子或阈值。
基于对象状态(位置、缩放、实例索引)写入 Var/缓冲节点,驱动后续着色器分支。
与节点材质配合,按对象切换输入或准备计算中间结果。
如何调整
必须在 `Fn()` 作用域中调用,否则事件不会被绑定到函数栈(toStack)。可在同一 `Fn()` 中注册多个事件。回调应保持轻量,避免频繁分配与复杂逻辑;如需停用,移除对应 `Fn()` 构建或销毁材质/对象。事件仅适用于 Mesh 与 Sprite。
代码示例
1// 在 Fn() 内绑定事件:每个对象更新前推进一个脚本值
2const pulse = scriptableValue( 0.0 );
3
4Fn(() => {
5 OnBeforeObjectUpdate(() => {
6 pulse.value = ( pulse.value + 0.02 ) % 1.0; // 每对象每帧推进
7 });
8
9 // 用 pulse 作为混合因子驱动颜色
10 material.colorNode = mix( color(0x1976d2), color(0xffc107), pulse );
11}).once();