コード例 #1
0
    void UpdatePointMeshes()
    {
        int numParticles      = MPAPI.mpGetNumParticles();
        int numActiveChildren = numParticles / 65000 + (numParticles % 65000 == 0 ? 0 : 1);

        while (children.Count < numActiveChildren)
        {
            GameObject child    = CreateChildMesh();
            Vector3[]  vertices = new Vector3[65000];
            Vector2[]  uv       = new Vector2[65000];
            int[]      indices  = new int[65000];
            fixed(Vector3 *v = vertices)
            {
                fixed(Vector2 *t = uv)
                {
                    fixed(int *idx = indices)
                    {
                        meshData.vertices = v;
                        meshData.uv       = t;
                        meshData.indices  = idx;
                        MPAPI.mpGeneratePointMesh(children.Count, ref meshData);
                    }
                }
            }

            Mesh mesh = child.GetComponent <MeshFilter>().mesh;
            mesh.vertices = vertices;
            mesh.uv       = uv;
            mesh.SetIndices(indices, MeshTopology.Points, 0);
            children.Add(child);
        }
        UpdateChildMeshes(numActiveChildren);
    }