/// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, PhysicMaterial material
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_buffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_buffers.Count; i++)
            {
                GeometryBuffer buffer = m_buffers[i];

                // Create a game object for collider. Unfortunatelly, we can't use object pooling
                // here for otherwise, unity would have to rebake because of change in object position
                // and that is very time consuming.
                GameObject prefab = GameObjectProvider.GetPool(m_prefabName).Prefab;
                GameObject go     = Object.Instantiate(prefab);
                go.transform.parent = GameObjectProvider.Instance.ProviderGameObject.transform;

                {
#if DEBUG
                    if (!string.IsNullOrEmpty(debugName))
                    {
                        go.name = debugName;
                        if (i > 0)
                        {
                            go.name = go.name + "_" + i;
                        }
                    }
#endif

                    Mesh mesh = Globals.MemPools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    UnityMeshBuilder.BuildColliderMesh(mesh, buffer);

                    MeshCollider collider = go.GetComponent <MeshCollider>();
                    collider.sharedMesh         = null;
                    collider.sharedMesh         = mesh;
                    collider.transform.position = position;
                    collider.transform.rotation = rotation;
                    collider.sharedMaterial     = material;

                    m_objects.Add(go);
                    m_colliders.Add(collider);
                }

                buffer.Clear();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, Material material
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_buffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_buffers.Count; i++)
            {
                GeometryBuffer buffer = m_buffers[i];

                var go = GameObjectProvider.PopObject(m_prefabName);
                Assert.IsTrue(go != null);
                if (go != null)
                {
#if DEBUG
                    if (!string.IsNullOrEmpty(debugName))
                    {
                        go.name = debugName;
                        if (i > 0)
                        {
                            go.name = go.name + "_" + i;
                        }
                    }
#endif

                    Mesh mesh = Globals.MemPools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    UnityMeshBuilder.BuildGeometryMesh(mesh, buffer);

                    MeshFilter filter = go.GetComponent <MeshFilter>();
                    filter.sharedMesh         = null;
                    filter.sharedMesh         = mesh;
                    filter.transform.position = position;
                    filter.transform.rotation = rotation;

                    Renderer renderer = go.GetComponent <Renderer>();
                    renderer.material = material;

                    m_objects.Add(go);
                    m_renderers.Add(renderer);
                }

                buffer.Clear();
            }
        }
Ejemplo n.º 3
0
    // Start is called before the first frame update
    public override void Start()
    {
        base.Start();

        UnityMeshBuilder builder = new UnityMeshBuilder();
        // TEMP:
        int mapX = 24;
        int mapY = 18;

        builder.AddQuadGridMesh(new Vector(-1, -1), new Vector(0.5, 0), new Vector(0, 0.5),
                                (mapX + 2) * 2 + 1, (mapY + 2) * 2 + 1);
        builder.Finalize();
        UnityEngine.Mesh mesh = builder.Mesh;
        GetComponent <MeshFilter>().mesh = mesh;
        Color32[] vCols = new Color32[mesh.vertexCount];
        for (int i = 0; i < vCols.Length; i++)
        {
            vCols[i] = new Color32(0, 0, 0, 128);
        }
        mesh.colors32 = vCols;
    }