Dots最简实践(三),场景控制

在dots框架中,我们的system,只要游戏一运行,就会自动执行。

但是有时候我们想让他只在某个场景中运行这个system

解决方案:

我们在我们的Scene里面放入一个 Tag

using Unity.Entities;
using UnityEngine;

public struct Level1Only : IComponentData {}  // 场景专属Tag

public class Level1OnlyAuthoring : MonoBehaviour
{
    class Baker : Baker<Level1OnlyAuthoring>
    {
        public override void Bake(Level1OnlyAuthoring authoring)
        {
            var e = GetEntity(TransformUsageFlags.None);
            AddComponent<Level1Only>(e); // 只要场景里有这脚本,就会烘焙一个带 Level1Only 的实体
        }
    }
}

然后让System必须依赖这个 Tag 才会启动

using Unity.Burst;
using Unity.Entities;

[BurstCompile]
public partial struct MySystem : ISystem
{
    [BurstCompile]
    public void OnCreate(ref SystemState state)
    {
        // 只有当世界里存在任意一个带 Level1Only 的实体时,系统才会更新
        state.RequireForUpdate<Level1Only>();
        // 如果你需要更复杂的条件,也可以用 Query 组合:
        // var q = SystemAPI.QueryBuilder().WithAll<Level1Only, SomeOtherTag>().Build();
        // state.RequireForUpdate(q);
    }

    [BurstCompile]
    public void OnUpdate(ref SystemState state)
    {
        // 你的逻辑...
    }
}

 

posted @ 2025-09-04 09:53  三页菌  阅读(13)  评论(0)    收藏  举报