forked from Unity-Technologies/EntityComponentSystemSamples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPhysicsWritingScript.cs
More file actions
63 lines (56 loc) · 1.84 KB
/
Copy pathPhysicsWritingScript.cs
File metadata and controls
63 lines (56 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using Unity.Entities;
using Unity.Jobs;
using Unity.Physics.Systems;
using UnityEngine;
namespace Unity.Physics.Tests
{
public struct WritingPhysicsData : IComponentData {}
public class PhysicsWritingScript : MonoBehaviour, IConvertGameObjectToEntity
{
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
dstManager.AddComponentData(entity, new WritingPhysicsData());
}
}
[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]
[UpdateAfter(typeof(BuildPhysicsWorld))]
[UpdateBefore(typeof(StepPhysicsWorld))]
public partial class WritePhysicsTagsSystem : SystemBase
{
protected override void OnCreate()
{
base.OnCreate();
RequireForUpdate(GetEntityQuery(new EntityQueryDesc
{
All = new ComponentType[] { typeof(WritingPhysicsData) }
}));
}
protected override void OnStartRunning()
{
base.OnStartRunning();
this.RegisterPhysicsRuntimeSystemReadWrite();
}
protected override void OnUpdate()
{
Dependency = new WritePhysicsTagsJob
{
PhysicsWorld = World.GetOrCreateSystem<BuildPhysicsWorld>().PhysicsWorld
}.Schedule(Dependency);
}
struct WritePhysicsTagsJob : IJob
{
public PhysicsWorld PhysicsWorld;
public void Execute()
{
var bodies = PhysicsWorld.Bodies;
for (int i = 0; i < bodies.Length; i++)
{
// Default tags are 0, write 1 to each of them
var body = bodies[i];
body.CustomTags = 1;
bodies[i] = body;
}
}
}
}
}