- Home /
 
Why it;s never getting to the OnMouseDown function when clicking with the mouse ?
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class MeshGenerator : MonoBehaviour
 {
     public int resX = 2; // 2 minimum
     public int resZ = 2;
     public float length = 1f;
     public float width = 1f;
 
     private MeshFilter meshf;
     private UnityEngine.Mesh mesh;
     private Vector3[] vertices;
 
     private int v1;
     private int v2;
 
     private void Start()
     {
         GenerateMesh(); 
     }
 
     private void GenerateMesh()
     {
         // You can change that line to provide another MeshFilter
         meshf = GetComponent<MeshFilter>();
         mesh = new UnityEngine.Mesh();
         meshf.mesh = mesh;
         mesh.Clear();
 
         #region Vertices
 
         vertices = new Vector3[resX * resZ];
         for (int z = 0; z < resZ; z++)
         {
             // [ -length / 2, length / 2 ]
             float zPos = ((float)z / (resZ - 1) - .5f) * length;
             for (int x = 0; x < resX; x++)
             {
                 // [ -width / 2, width / 2 ]
                 float xPos = ((float)x / (resX - 1) - .5f) * width;
                 vertices[x + z * resX] = new Vector3(xPos, 0f, zPos);
             }
         }
         #endregion
 
         #region Normales
         Vector3[] normales = new Vector3[vertices.Length];
         for (int n = 0; n < normales.Length; n++)
             normales[n] = Vector3.up;
         #endregion
 
         #region UVs        
         Vector2[] uvs = new Vector2[vertices.Length];
         for (int v = 0; v < resZ; v++)
         {
             for (int u = 0; u < resX; u++)
             {
                 uvs[u + v * resX] = new Vector2((float)u / (resX - 1), (float)v / (resZ - 1));
             }
         }
         #endregion
 
         #region Triangles
         int nbFaces = (resX - 1) * (resZ - 1);
         int[] triangles = new int[nbFaces * 6];
         int t = 0;
         for (int face = 0; face < nbFaces; face++)
         {
             // Retrieve lower left corner from face ind
             int i = face % (resX - 1) + (face / (resZ - 1) * resX);
 
             triangles[t++] = i + resX;
             triangles[t++] = i + 1;
             triangles[t++] = i;
 
             triangles[t++] = i + resX;
             triangles[t++] = i + resX + 1;
             triangles[t++] = i + 1;
         }
         #endregion
 
         mesh.vertices = vertices;
         mesh.normals = normales;
         mesh.uv = uvs;
         mesh.triangles = triangles;
 
         mesh.RecalculateBounds();
         //mesh.Optimize();
     }
 
     private void OnDrawGizmos()
     {
         if (vertices == null)
         {
             return;
         }
 
         Gizmos.color = Color.black;
         for (int i = 0; i < vertices.Length; i++)
         {
             Gizmos.DrawSphere(transform.TransformPoint(vertices[i]), 0.1f);
         }
     }
 
     void OnMouseDown()
     {
         if (Input.GetMouseButtonDown(0))
     }
 
               I used a break point on the line:
 if (Input.GetMouseButtonDown(0))
 
               But it's never get there.
Might be the camera in the gameview is too far ? I tried now to move the camera as close as i can to the created mesh but still it's not getting to the onmousedown function.
No. how do i add a collider to a mesh ? I know how to add to a GameObject but this is a $$anonymous$$esh it doesn't have any AddComponent property. Tried to google but i didn't find how to add a collider to a $$anonymous$$esh.
Answer by UnityCoach · Apr 15, 2017 at 03:20 PM
You need to add a MeshCollider to the gameObject, or any other Collider. You can do it via script:
 AddComponent<MeshCollider>();
 
               Or manually in the editor. Anyway, you'll have to assign its SharedMesh property with the mesh you generate.
This is what i did
         meshf = GetComponent<$$anonymous$$eshFilter>();
         mesh = new UnityEngine.$$anonymous$$esh();
         meshf.mesh = mesh;
         gameObject.AddComponent<$$anonymous$$eshCollider>();
         transform.GetComponent<$$anonymous$$eshCollider>().shared$$anonymous$$esh = mesh;
         mesh.Clear();
 
                  Once i'm running the game if the Convex is set to false(not checked) i need to check it then when i click the mouse it's getting to the On$$anonymous$$ouseDown function. But next time i'm running the game i need to uncheck the Convex if not it will not get to the On$$anonymous$$ouseDown it's like each time i'm running the game i need to set the Convex to the other state. ( Doing the Convex changes in the editor in the Inspector in the $$anonymous$$eshCollider).
Your answer