Beispiel #1
0
    public static bool hitObject(MeshFilter[] meshFilters, Ray rayWorld, out MeshFilter minMf, out float minDist)
    {
        List <BoundsDistance> mfHitBounds = new List <BoundsDistance>();

        foreach (var mf in meshFilters)
        {
            if (!mf.gameObject.activeInHierarchy)
            {
                continue;
            }

            var   bounds = mf.renderer.bounds;
            float dist;
            if (!bounds.IntersectRay(rayWorld, out dist))
            {
                continue;
            }

            mfHitBounds.Add(new BoundsDistance()
            {
                mf = mf, distance = dist
            });
            Debug.Log("Candidate (Bounds) : " + mf.gameObject.name);
        }
        mfHitBounds.Sort((x, y) => (x.distance < y.distance ? -1 : 1));

        bool found = false;

        minMf   = null;
        minDist = Mathf.Infinity;
        foreach (BoundsDistance mfDists in mfHitBounds)
        {
#if false
            if (minDist < mfDists.distance)
            {
                break;
            }
#endif

            MeshFilter mf           = mfDists.mf;
            Vector3    rayOrigin    = mf.transform.InverseTransformPoint(rayWorld.origin);
            Vector3    rayDirection = mf.transform.worldToLocalMatrix * (Vector4)rayWorld.direction;
            Mesh       m            = mf.sharedMesh;
            float      dist;
            if (!TriangleTester.hitTriangleAll(rayOrigin, rayDirection, m.vertices, m.triangles, out dist))
            {
                continue;
            }

            found = true;
            if (dist < minDist)
            {
                minDist = dist;
                minMf   = mf;
            }
        }

        return(found);
    }
 public void AnalyzeTest8_NotForm()
 {
     // check with 0 as dimensions
     NUnit.Framework.Assert.IsFalse(TriangleTester.GetTriangleType(0, 0, 0));
 }
Beispiel #3
0
 void Awake()
 {
     tT = (TriangleTester)target;
 }
 public void AnalyzeTest7_NotForm()
 {
     NUnit.Framework.Assert.IsFalse(TriangleTester.GetTriangleType(-10, -10, 9));
     // check wherther negative value will pass the test
 }
 public void AnalyzeTest6_IsEquilateral()
 {
     NUnit.Framework.Assert.IsTrue(TriangleTester.GetTriangleType(88, 88, 88));
     // check triangle with three same dimensions
 }
 public void AnalyzeTest4_IsIsosceles()
 {
     NUnit.Framework.Assert.IsTrue(TriangleTester.GetTriangleType(20, 10, 10));
     // check triangle with two same dimensions
 }
 public void AnalyzeTest2_IsScalene()
 {
     // check triangle with three different dimensions
     NUnit.Framework.Assert.IsTrue(TriangleTester.GetTriangleType(78, 89, 100));
 }
 public void AnalyzeTest_IsScalene()
 {
     NUnit.Framework.Assert.IsTrue(TriangleTester.GetTriangleType(1, 2, 3));
     // check triangle with three different dimensions
 }