You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity ECS子场景加载异常:挂载含Baker的Prefab导致无法加载

解决方案

以下是几种可行的解决思路,可根据项目需求选择:

  • 代理对象中转Baker逻辑
    不在被引用的Sphere预制体上挂载带Baker的Authoring脚本,而是在子场景内新建一个空对象作为代理,将SphereAuthoring和对应的Baker挂载到这个代理上。修改TestAuthoring脚本,让它引用子场景内的代理对象而非预制体。这样Baker的烘焙会在子场景加载时正常执行,不会因预制体的Baker触发加载阻塞。

  • 异步加载+手动触发烘焙

    1. 将子场景设置为异步加载模式;
    2. 在TestAuthoring脚本中添加逻辑,等子场景加载完成后手动调用预制体上Baker的烘焙方法。示例代码如下:
      using UnityEngine;
      using UnityEngine.SceneManagement;
      using Unity.Entities;
      
      public class TestAuthoring : MonoBehaviour
      {
          public GameObject spherePrefab;
          private Scene _subScene;
      
          void Start()
          {
              _subScene = gameObject.scene;
              if (_subScene.isLoaded)
              {
                  TriggerBake();
              }
              else
              {
                  SceneManager.sceneLoaded += OnSubSceneLoaded;
              }
          }
      
          void OnSubSceneLoaded(Scene scene, LoadSceneMode mode)
          {
              if (scene == _subScene)
              {
                  TriggerBake();
                  SceneManager.sceneLoaded -= OnSubSceneLoaded;
              }
          }
      
          void TriggerBake()
          {
              var authoring = spherePrefab.GetComponent<SphereAuthoring>();
              var baker = authoring.GetComponent<Baker<SphereAuthoring>>();
              baker.Bake(authoring);
          }
      }
      

    注意:自定义Baker时要确保烘焙逻辑支持手动调用,Unity内置Baker(如PhysicsShapeBaker)可能需要额外适配。

  • 转为Entity预制体实例化

    1. 将Sphere预制体转为Entity预制体:在预制体Inspector中勾选「Convert To Entity」,设置转换模式为「Convert On Demand」;
    2. 修改TestAuthoring脚本,直接实例化Entity预制体,烘焙流程会在实例化时自动完成,不会干扰子场景加载。示例代码:
      using UnityEngine;
      using Unity.Entities;
      
      public class TestAuthoring : MonoBehaviour
      {
          public GameObject entitySpherePrefab;
      
          void Awake()
          {
              var world = World.DefaultGameObjectInjectionWorld;
              var prefabEntity = GameObjectConversionUtility.ConvertGameObjectHierarchy(entitySpherePrefab, world);
              world.EntityManager.Instantiate(prefabEntity);
          }
      }
      

额外注意事项

  • 子场景加载时的实体转换流程,会和未完成烘焙的预制体产生冲突,因此要避免在子场景的Authoring脚本中直接引用这类预制体;
  • 对于Unity内置带Baker的组件(如Physics Shape),优先用上述方法绕开直接挂载在被引用预制体上的场景。

内容的提问来源于stack exchange,提问作者Javin Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:45:08