Example #1
0
    IEnumerator DoPull(Rigidbody2D rb)
    {
        if (rb.GetComponent <Thing>().hasShield)
        {
            yield break;
        }
        if (swap.overheadSnap && rb == swap.overheadRB)
        {
            swap.DropOverhead();
        }
        Vector3 targetPos = playerControl.transform.position + new Vector3(0f, pullHeight, 0f);
        Vector3 diff      = targetPos - rb.transform.position;
        //rb.GetComponent<BoxCollider2D>().enabled = false;
        int layer = rb.gameObject.layer;

        rb.gameObject.layer = 19;
        //while (diff.magnitude > snapThreshold)
        //{
        //    Debug.Log(diff.magnitude);
        //    targetPos = playerControl.transform.position + new Vector3(0f, pullHeight, 0f);
        //    diff = targetPos - rb.transform.position;
        //    rb.velocity = diff.normalized * pullSpeed;
        //    yield return new WaitForEndOfFrame();
        //}

        //rb.transform.position = playerControl.transform.position + new Vector3(0f, pullHeight, 0f);

        target = rb;
        Vector2 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector2 dir           = (mouseWorldPos - (Vector2)target.transform.position).normalized;

        target.gameObject.GetComponent <Rigidbody2D>().velocity = dir * throwSpeed;
        pulled = false;
        target.transform.parent = null;


        //触发
                TriggerInstanceEvent(rb.GetComponent <Thing>());

        playerBody.velocity = -dir * reactForceSpeed;
        yield return(new WaitForSeconds(0.15f));

        rb.gameObject.layer = layer;

        yield return(new WaitForSeconds(0.2f));
        //
        //target.GetComponent<BoxCollider2D>().enabled = true;
    }