/// <summary> /// 如果没有相切的错误,就返回true,否则返回false /// </summary> /// <returns></returns> public bool CheckSeperate() { var dir = (FarPoint.Position - NearPoint.Position).normalized; var hit = Physics2D.Raycast(NearPoint.Position, dir, (FarPoint.Position - NearPoint.Position).magnitude, LayerManager.LayerMask.SilkJoint); if (hit) { SilkDebug.DrawCross(hit.point, 0.3f, Color.red); var curLine = new Vector4(NearPoint.Position.x, NearPoint.Position.y, FarPoint.Position.x, FarPoint.Position.y); SilkDebug.DrawLine(LastLine, Color.green); SilkDebug.DrawLine(curLine, Color.black); LineCollisionHit lineHit; var bl = LineCollision.TryGetLineCollisionPoint(LastLine, curLine, out lineHit, LayerManager.LayerMask.SilkJoint, PhysicsConfig.SurfaceLayerThickness); var tmpDrawer = lineHit.Collider.GetComponent <TmpDrawCircleCollider2D>(); if (tmpDrawer != null) { tmpDrawer.DrawArc(lineHit.Point); Debug.LogFormat("line to circle distance:{0} @{1}", Vector2.Distance(lineHit.Point, tmpDrawer.transform.position.ToVector2()) - tmpDrawer.GetComponent <CircleCollider2D>().radius, Time.frameCount); } SilkDebug.DrawCross(lineHit.Point, 0.4f, Color.black); if (bl) { var jointItem = lineHit.Collider.gameObject.layer == LayerManager.Layer.Ground ? null : lineHit.Collider.GetComponent <Rigidbody2D>(); MySilk.SeperateSegment(IndexOnSilk, lineHit.Point, jointItem); } else { Debug.LogWarningFormat("Tangency Error[{0}]", IndexOnSilk); return(false); } } return(true); }
// Start is called before the first frame update void Start() { lineCollision = GetComponent <LineCollision>(); lineRenderer = GetComponent <LineRenderer>(); }