Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Question Probuilder AppendElement.AppendFaces doesnt work at all

Discussion in 'World Building' started by CuberDaniel1, Mar 23, 2023.

  1. CuberDaniel1

    CuberDaniel1

    Joined:
    Aug 4, 2021
    Posts:
    6
    Code (CSharp):
    1. public override void InsertFace()
    2.         {
    3.             m_faceSelection.BeginChange();
    4.  
    5.             ProBuilderMesh[] meshes = m_faceSelection.Meshes.OrderBy(m => m == m_faceSelection.LastMesh).ToArray();
    6.             foreach (ProBuilderMesh mesh in meshes)
    7.             {
    8.                 IList<int> faceIndexes = m_faceSelection.GetFaces(mesh).ToArray();
    9.                 for (int i = 0; i < faceIndexes.Count; ++i)
    10.                 {
    11.                     m_faceSelection.Remove(mesh, faceIndexes[i]);
    12.                 }
    13.  
    14.                 IList<Face> faces = new List<Face>();
    15.                 mesh.GetFaces(faceIndexes, faces);
    16.  
    17.                 Vector3[][] positions = new Vector3[faces.Count][];
    18.                 Color[][] colors = new Color[faces.Count][];
    19.                 Vector2[][] uvs = new Vector2[faces.Count][];
    20.                 int[][] shared = new int[faces.Count][];
    21.                 for (int i = 0; i < faces.Count; i++)
    22.                 {
    23.                     var vertices = mesh.GetVertices(faces[i].indexes);
    24.                     positions[i] = new Vector3[vertices.Length];
    25.                     int j = 0;
    26.                     foreach (var index in vertices)
    27.                     {
    28.                         positions[i][j] = index.position + mesh.transform.position;
    29.                         Debug.DrawRay(positions[i][j],Vector3.down,Color.red,10f);
    30.                         j++;
    31.                     }
    32.  
    33.                     colors[i] = new Color[] { };
    34.                     uvs[i] = new Vector2[] {Vector2.zero, Vector2.zero, Vector2.zero, Vector2.zero,Vector2.zero, Vector2.zero};
    35.                     // for (int k = 0; k < faces[i].indexes.Count; k++)
    36.                     // {
    37.                     //     Debug.Log(k + " " + faces[i].indexes[k]);
    38.                     // }
    39.                     shared[i] = faces[i].indexes.ToArray();
    40.                 }
    41.  
    42.  
    43.                 mesh.AppendFaces(positions, colors, uvs, faces.ToArray(), shared);
    44.  
    45.                 for (int i = 0; i < faceIndexes.Count; ++i)
    46.                 {
    47.                     m_faceSelection.Add(mesh, faceIndexes[i]);
    48.                 }
    49.  
    50.                 mesh.ToMesh();
    51.                 mesh.Refresh();
    52.             }
    53.  
    54.             m_faceSelection.EndChange();
    55.  
    56.             m_faceSelection.Synchronize(
    57.                 m_faceSelection.GetCenterOfMass(),
    58.                 m_faceSelection.LastPosition);
    59.  
    60.             RaisePBMeshesChanged(false);
    61.         }
    the probuilder mesh color array is always null and the method wont going well!
    upload_2023-3-23_20-11-1.png
     
  2. CuberDaniel1

    CuberDaniel1

    Joined:
    Aug 4, 2021
    Posts:
    6
    Edit:I didnt set the colors array correctly, but can you guys give me an example of how AppendFaces works?