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) { // 你的逻辑... } }

浙公网安备 33010602011771号