/// <summary> /// Returns true if the point is inside the initialized mesh /// </summary> /// <param name="point"></param> /// <returns></returns> public bool IsPointInsideMesh(float3 origin) { if (_planes == null) { return(false); } var hitCounter = 0; var hit = false; var end = new float3(origin.x, -10f, origin.z); for (var i = 0; i < _planes.Length; i++) { float3 hitPoint = float3.zero; hit = PlaneCollisionUtility.ComputLineHit( _planes[i], origin, end, out hitPoint); if (hit) { hitCounter++; DrawPlaneGizmos(_planes[i], hitPoint, _planes[i].Normal); } Gizmos.color = Color.magenta; Gizmos.DrawLine(origin, end); } return(hitCounter % 2 == 0); }
public void InitializeMesh(Mesh collisionMesh) { _planes = new PlaneStruct[collisionMesh.triangles.Length / 3]; for (var i = 0; i < collisionMesh.triangles.Length; i += 3) { var pointA = collisionMesh.vertices[collisionMesh.triangles[i + 0]]; var pointB = collisionMesh.vertices[collisionMesh.triangles[i + 1]]; var pointC = collisionMesh.vertices[collisionMesh.triangles[i + 2]]; var collisionPlane = PlaneCollisionUtility.ComputePlaneParameters(pointA, pointB, pointC); _planes[i / 3] = collisionPlane; } }