Exemple #1
0
        public void TriangleIsTouchingPointTest()
        {
            Collider coll = new TriangleCollider(new Vector2(0, 0), new Vector2(100, 0f), new Vector2(50, 100));

            Assert.IsFalse(coll.IsTouching(new Vector2(500, 500)));
            Assert.IsTrue(coll.IsTouching(new Vector2(50, 50)));
        }
Exemple #2
0
        public void TriangleIsTouchingPolygonTest()
        {
            Collider coll1 = new TriangleCollider(new Vector2(0, 0), new Vector2(100, 0f), new Vector2(50, 100));
            Collider coll2 = new PolygonCollider(new Vector2(200, 0), new Vector2(300, 0), new Vector2(250, 100), new Vector2(100, 100));

            Assert.IsFalse(coll1.IsTouching(coll2));
            Assert.IsFalse(coll2.IsTouching(coll1));

            coll2.Position -= new Vector2(150, 15);

            Assert.IsTrue(coll1.IsTouching(coll2));
            Assert.IsTrue(coll2.IsTouching(coll1));
        }
    //normal=(V1-V0)x(V2-V0)
    //Vector3.Cross(pointB - pointA, pointC - pointA);
    //OYM:三角形需要计算法线,这个任务交给jobs完成好了
    //OYM:等下,仔细想一下的话,似乎完全不需要计算很多次,只需要算好一次,然后根据初始的rotation计算坐标就好了

    public static TriangleCollider GetTriangleCollider(Vector3[] point3, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside)
    {
        TriangleCollider t = new TriangleCollider
        {
            colliderType = ColliderType.Triangle,
            collideFunc  = collideFunc,
            pointA       = point3[0],
            pointB       = point3[1],
            pointC       = point3[2],
        };

        t.GetNormal();
        return(t);
    }