vtj-scene-management

star 144

Orchestrates World lifecycle and component initialization. Use when managing initialization order, update sequences, or implementing proper disposal chains.

hexianWeb By hexianWeb schedule Updated 2/2/2026

name: vtj-scene-management description: Orchestrates World lifecycle and component initialization. Use when managing initialization order, update sequences, or implementing proper disposal chains.

vite-threejs Scene Management

Overview

World 类作为场景 orchestrator,管理所有 3D 组件的生命周期。核心原则:等待资源、顺序注册、顺序更新、逆序清理

When to Use

  • 创建新的 World 或主场景管理器
  • 添加新的 3D 组件到场景
  • 管理组件初始化顺序
  • 确保资源正确清理

Core Patterns

1. 等待资源 (Wait for Resources)

所有依赖资源的组件在 core:ready 后初始化:

constructor() {
  this.experience = new Experience()

  emitter.on('core:ready', () => {
    // 资源已加载完成,开始初始化
    this.initComponents()
  })
}

2. 顺序注册 (Registration Order)

示例: 按依赖关系顺序创建组件:

initComponents() {
  // 1. 先初始化地形(玩家需要地形数据)
  this.chunkManager = new ChunkManager()

  // 2. 再初始化玩家(需要地形做碰撞检测)
  this.player = new Player()

  // 3. 相机跟随玩家
  this.cameraRig = new CameraRig()
  this.cameraRig.attachPlayer(this.player)

  // 4. 环境效果
  this.environment = new Environment()

  // 5. 交互系统(依赖地形和玩家)
  this.blockRaycaster = new BlockRaycaster({
    chunkManager: this.chunkManager
  })
}

3. 顺序更新 (Update Order)

update() 中按依赖顺序调用:

update() {
  // 1. 先更新地形流式加载
  this.chunkManager?.updateStreaming()
  this.chunkManager?.update()

  // 2. 玩家依赖地形数据
  this.player?.update()

  // 3. 环境效果
  this.environment?.update()

  // 4. 交互系统
  this.blockRaycaster?.update()
}

4. 逆序清理 (Reverse Disposal)

destroy() 中按相反顺序清理:

destroy() {
  // 与注册顺序相反:后创建的先销毁
  this.blockRaycaster?.destroy()      // 5
  this.environment?.destroy()         // 4
  this.cameraRig?.destroy()           // 3
  this.player?.destroy()              // 2
  this.chunkManager?.destroy()        // 1
}

Quick Reference

阶段 原则 代码位置
初始化 等待 core:ready emitter.on('core:ready', ...)
注册 依赖先行 constructor 或 init 方法
更新 数据流顺序 update() 方法
清理 逆序销毁 destroy() 方法

Common Mistakes

❌ 在 core:ready 之前访问资源

// BAD
constructor() {
  this.model = this.resources.items['playerModel']  // undefined!
}

// GOOD
emitter.on('core:ready', () => {
  this.model = this.resources.items['playerModel']
})

❌ 忘记更新子组件

// BAD
update() {
  // 没有调用 chunkManager.update()
  this.player.update()
}

// GOOD
update() {
  this.chunkManager?.update()
  this.player?.update()
}

❌ 清理顺序错误

// BAD: 先销毁 chunkManager,但 player 还在引用它
destroy() {
  this.chunkManager?.destroy()
  this.player?.destroy()  // 可能崩溃
}

// GOOD: 先销毁依赖者
destroy() {
  this.player?.destroy()
  this.chunkManager?.destroy()
}
Install via CLI
npx skills add https://github.com/hexianWeb/Third-Person-MC --skill vtj-scene-management
Repository Details
star Stars 144
call_split Forks 37
navigation Branch main
article Path SKILL.md
More from Creator