Ejemplo n.º 1
0
    /// <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);
    }
Ejemplo n.º 2
0
 // Start is called before the first frame update
 void Start()
 {
     lineCollision = GetComponent <LineCollision>();
     lineRenderer  = GetComponent <LineRenderer>();
 }