2017-03-28 3 views
0

まず、2キューブを作成し、1メッシュに結合します。私は、それぞれの中心に2キューブを拡大したいと思います。メッシュ合成後のスケールメッシュ

どうすればいいですか?

2 Cube

マイコード:

private MeshFilter m_MeshFilter; 
    private MeshRenderer m_MeshRenderer; 
    private Mesh m_Mesh; 

    private float m_Length = 1f; 
    private float m_Width = 1f; 
    private float m_Height = 1f; 

を私は、空のゲームオブジェクトを作成し、コードを追加します。

private void Awake() { 
     m_MeshFilter = this.GetComponent<MeshFilter>(); 
     m_MeshRenderer = this.GetComponent<MeshRenderer>(); 
     m_Mesh   = m_MeshFilter.mesh; 
     m_Mesh.Clear(); 

     m_Cloud = new Mesh[2, 1]; 
    } 

    private void Start() { 
     var mesh1 = DrawCube (0, 0, 0, m_Length, m_Width, m_Height); 
     var mesh2 = DrawCube (1, 1, 2, m_Length, m_Width, m_Height); 

// Combine 2 cube mesh 
     CombineInstance[] combine = new CombineInstance[2]; 
     combine [0].mesh = mesh1; 
     combine [0].transform = Matrix4x4.TRS (Vector3.zero, Quaternion.identity, Vector3.one); 
     combine [1].mesh = mesh2; 
     combine [1].transform = Matrix4x4.TRS (Vector3.zero, Quaternion.identity, Vector3.one); 

     m_MeshFilter.mesh = new Mesh(); 
     m_MeshFilter.mesh.CombineMeshes (combine); 
    } 

x、y、幅、高リターン

private Mesh DrawCube(int i, int x, int y, float length, float width, float height) { 
     #region Mesh 
     var cubeMesh = new Mesh(); 
     var center = 0.5f; 
     #endregion 

     #region Vertices 
     Vector3 p0 = new Vector3(-length * center + x, -width * center, height * center + y); 
     Vector3 p1 = new Vector3(length * center + x, -width * center, height * center + y); 
     Vector3 p2 = new Vector3(length * center + x, -width * center, -height * center + y); 
     Vector3 p3 = new Vector3(-length * center + x, -width * center, -height * center + y);  

     Vector3 p4 = new Vector3(-length * center + x, width * center, height * center + y); 
     Vector3 p5 = new Vector3(length * center + x, width * center, height * center + y); 
     Vector3 p6 = new Vector3(length * center + x, width * center, -height * center + y); 
     Vector3 p7 = new Vector3(-length * center + x, width * center, -height * center + y); 

     Vector3[] vertices = new Vector3[] 
     { 
      // Bottom 
      p0, p1, p2, p3, 

      // Left 
      p7, p4, p0, p3, 

      // Front 
      p4, p5, p1, p0, 

      // Back 
      p6, p7, p3, p2, 

      // Right 
      p5, p6, p2, p1, 

      // Top 
      p7, p6, p5, p4 
     }; 
     #endregion 

     #region Normales 
     Vector3 up  = Vector3.up; 
     Vector3 down = Vector3.down; 
     Vector3 front = Vector3.forward; 
     Vector3 back = Vector3.back; 
     Vector3 left = Vector3.left; 
     Vector3 right = Vector3.right; 

     Vector3[] normales = new Vector3[] 
     { 
      // Bottom 
      down, down, down, down, 

      // Left 
      left, left, left, left, 

      // Front 
      front, front, front, front, 

      // Back 
      back, back, back, back, 

      // Right 
      right, right, right, right, 

      // Top 
      up, up, up, up 
     }; 
     #endregion 

     #region UVs 
     Vector2 _00 = new Vector2(0f, 0f); 
     Vector2 _10 = new Vector2(1f, 0f); 
     Vector2 _01 = new Vector2(0f, 1f); 
     Vector2 _11 = new Vector2(1f, 1f); 

     Vector2[] uvs = new Vector2[] 
     { 
      // Bottom 
      _11, _01, _00, _10, 

      // Left 
      _11, _01, _00, _10, 

      // Front 
      _11, _01, _00, _10, 

      // Back 
      _11, _01, _00, _10, 

      // Right 
      _11, _01, _00, _10, 

      // Top 
      _11, _01, _00, _10, 
     }; 
     #endregion 

     #region Triangles 
     int[] triangles = new int[] 
     { 
      // Bottom 
      3, 1, 0, 
      3, 2, 1,    

      // Left 
      3 + 4 * 1, 1 + 4 * 1, 0 + 4 * 1, 
      3 + 4 * 1, 2 + 4 * 1, 1 + 4 * 1, 

      // Front 
      3 + 4 * 2, 1 + 4 * 2, 0 + 4 * 2, 
      3 + 4 * 2, 2 + 4 * 2, 1 + 4 * 2, 

      // Back 
      3 + 4 * 3, 1 + 4 * 3, 0 + 4 * 3, 
      3 + 4 * 3, 2 + 4 * 3, 1 + 4 * 3, 

      // Right 
      3 + 4 * 4, 1 + 4 * 4, 0 + 4 * 4, 
      3 + 4 * 4, 2 + 4 * 4, 1 + 4 * 4, 

      // Top 
      3 + 4 * 5, 1 + 4 * 5, 0 + 4 * 5, 
      3 + 4 * 5, 2 + 4 * 5, 1 + 4 * 5, 

     }; 
     #endregion 

     cubeMesh.vertices = vertices; 
     cubeMesh.normals = normales; 
     cubeMesh.uv = uvs; 
     cubeMesh.triangles = triangles; 

     cubeMesh.RecalculateBounds(); 
     cubeMesh.Optimize(); 

     return cubeMesh; 
    } 

答えて

0

メッシュと立方体を描くうん最後に、私の問題は簡単に解決しているようです。

まず、私は、各立方体の中心を見つけると方向を計算し、それの規模:D

それは楽しい、とにかく...

private Vector3 CalcuateCenterMesh (Vector3[] vectors) { 
    var sumVec = Vector3.zero; 
    for (int i = 0; i < vectors.Length; i++) { 
     sumVec += vectors [i]; 
    } 
    return sumVec/vectors.Length; 
} 

とスケールをありがとう:

private void ScaleMesh (int index, float scale) { 
     var mesh = m_MeshFilter.sharedMesh; 
     var vertices = mesh.vertices; 
     var min = index * 24; 
     var max = (index + 1) * 24; 
     for (int i = min; i < max; i++) { 
      var direction = vertices[i] - m_MeshCenters[index]; 
      var directionNormal = direction.normalized; 
      vertices [i] = directionNormal * scale + m_MeshCenters[index]; 
     } 
     m_MeshFilter.sharedMesh.vertices = vertices; 
     m_MeshFilter.sharedMesh.RecalculateBounds(); 
    } 

しかし、あなたが持っているとより良い解決策を私に与えてください:D

私は雲のようなgを作成したいame: "Ogre Attacks and Giant Raids!マイティバリスタタワービルド - 王国と城 "

関連する問題