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))); }
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); }