Example #1
0
    /// <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);
    }
Example #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;
        }
    }