private static Entity CreatePlayer(float3 startPos)
    {
        EntityManager entityManager = World.Active.GetOrCreateManager <EntityManager> ();

        EntityArchetype playerSetup  = PhysicsEntityFactory.CreatePlayerArchetype(entityManager);
        Entity          playerEntity = entityManager.CreateEntity(playerSetup);

        entityManager.SetComponentData(playerEntity, new Translation {
            Value = startPos
        });
        entityManager.SetComponentData(playerEntity, new Rotation {
            Value = quaternion.identity
        });
        entityManager.SetComponentData(playerEntity, new Velocity {
            Value = new float3(0, 0, 0)
        });

        RenderMesh renderer = new RenderMesh();
        GameObject capsule  = GameObject.CreatePrimitive(PrimitiveType.Capsule);

        renderer.mesh = capsule.GetComponent <MeshFilter> ().mesh;
        GameObject.Destroy(capsule);
        renderer.material = AssetDatabase.LoadAssetAtPath <Material> ("Assets/Materials/PlayerCapsuleMaterial.mat");

        entityManager.AddSharedComponentData(playerEntity, renderer);
        return(playerEntity);
    }
Beispiel #2
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));
            }
        }
    }