Beispiel #1
0
    void Start()
    {
        EntityManager entityManager = World.Active.GetOrCreateManager <EntityManager>();

        // Create archetypes
        KineticRigidBodyArchetype   = PhysicsEntityFactory.CreateKineticRigidbodyArchetype(entityManager);
        KinematicRigidBodyArchetype = PhysicsEntityFactory.CreateKinematicRigidbodyArchetype(entityManager);
        SphereColliderArchetype     = PhysicsEntityFactory.CreateSphereColliderArchetype(entityManager);
        //BoxColliderArchetype = PhysicsEntityFactory.CreateBoxColliderArchetype(entityManager);

        SimpleRendererArchetype = entityManager.CreateArchetype(
            typeof(Unity.Transforms.Position),
            typeof(Unity.Transforms.Rotation),
            typeof(MeshInstanceRenderer),
            typeof(PhysicsEngine.FollowRigidBody)
            );

        // Spawn kinetic objects random
        for (int i = 0; i < SpawnCount; i++)
        {
            float3 startPos = new float3(
                transform.position.x + UnityEngine.Random.Range(-SpawnDistance, SpawnDistance),
                transform.position.y + UnityEngine.Random.Range(-SpawnDistance, SpawnDistance),
                transform.position.z + UnityEngine.Random.Range(-SpawnDistance, SpawnDistance)
                );
            float3 startVel = new float3(
                startPos.x >= 0f ? -SpawnVelocityRange : SpawnVelocityRange,
                0,
                0
                );

            if (i % 2 == 0)
            {
                //SpawnBoxSmall(startPos, startVel);
                SpawnSphereSmall(startPos, startVel);
            }
            else
            {
                SpawnSphereSmall(startPos, startVel);
            }
        }

        // spawn ground spheres
        if (SpawnGround)
        {
            foreach (Transform t in GroundSpheresRoot)
            {
                SpawnSphereBig(t.position, new float3(0, 0, 0));
            }
        }
    }