forked from Unity-Technologies/EntityComponentSystemSamples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateSimpleTerrain.cs
More file actions
57 lines (47 loc) · 2.23 KB
/
Copy pathCreateSimpleTerrain.cs
File metadata and controls
57 lines (47 loc) · 2.23 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
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Transforms;
public class CreateSimpleTerrainScene : SceneCreationSettings {}
public class CreateSimpleTerrain : SceneCreationAuthoring<CreateSimpleTerrainScene> {}
public class CreateSimpleTerrainSystem : SceneCreationSystem<CreateSimpleTerrainScene>
{
public override void CreateScene(CreateSimpleTerrainScene sceneSettings)
{
int2 size = new int2(2, 2);
float3 scale = new float3(10, 1.0f, 10);
NativeArray<float> heights = new NativeArray<float>(size.x * size.y * UnsafeUtility.SizeOf<float>(), Allocator.Temp);
{
heights[0] = 0;
heights[1] = 0;
heights[2] = 0;
heights[3] = 0;
}
var collider = TerrainCollider.Create(heights, size, scale, TerrainCollider.CollisionMethod.VertexSamples);
CreatedColliders.Add(collider);
float3 position = new float3(15.0f, -1.0f, -5.0f);
CreateTerrainBody(position, collider);
// Mark this one CollisionResponse.None
collider = TerrainCollider.Create(heights, size, scale, TerrainCollider.CollisionMethod.VertexSamples);
CreatedColliders.Add(collider);
unsafe
{
((TerrainCollider*)collider.GetUnsafePtr())->Material.CollisionResponse = CollisionResponsePolicy.None;
}
position = new float3(15.0f, -1.0f, 10.0f);
CreateTerrainBody(position, collider);
}
void CreateTerrainBody(float3 position, BlobAssetReference<Collider> collider)
{
var entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
Entity entity = entityManager.CreateEntity(new ComponentType[] {});
entityManager.AddComponentData(entity, new LocalToWorld {});
entityManager.AddComponentData(entity, new Translation { Value = position });
entityManager.AddComponentData(entity, new Rotation { Value = quaternion.identity });
var colliderComponent = new PhysicsCollider { Value = collider };
entityManager.AddComponentData(entity, colliderComponent);
CreateRenderMeshForCollider(entityManager, entity, collider, StaticMaterial);
}
}