galacean / engine

A typescript interactive engine, support 2D, 3D, animation, physics, built on WebGL and glTF.
https://www.galacean.com/engine
MIT License
4.29k stars 307 forks source link

浅克隆对象的属性时,若该属性对应的是引用资产类型,应该自动增加引用计数。 #2403

Open cptbtptpbcptdtptp opened 1 month ago

cptbtptpbcptdtptp commented 1 month ago

可以看到引擎中很多地方其实为了处理这套逻辑在 cloneTo 里加了很多兜底代码。 比如:

// Renderer._cloneTo
  _cloneTo(target: Renderer, srcRoot: Entity, targetRoot: Entity): void {
    const materials = this._materials;
    for (let i = 0, n = materials.length; i < n; i++) {
      target._setMaterial(i, materials[i]);
    }
  }
// MeshRenderer._cloneTo
  override _cloneTo(target: MeshRenderer, srcRoot: Entity, targetRoot: Entity): void {
    super._cloneTo(target, srcRoot, targetRoot);
    target.mesh = this._mesh;
  }

// 其他如 SpriteRenderer,TextRenderer 中的逻辑就不枚举了

在执行的时候,反而执行了更多的逻辑。