2D 플랫포머에서 상자 들어 올리는 걸 구현하려고 해요.그래서 플레이어에 pickuppoint 2d 박스 콜라이더에 is trigger 발라서 붙였거든요?





그리고 박스 스크립트에 pickuppoint랑 상자가 접촉했을때 OnTriggerStay2D로 플레이어랑 픽업포인트 정보 가져오게 하고 FixedUpdate에서 PickUp()이란 함수를 넣어서





키입력이 있고 픽업포인트 정보가 있으면 상자의 부모 오브젝트를 픽업 포인트로 하고 픽업포인트의 로컬 포지션을 제로로 놓고 중력 스케일을 0으로 잡아서 들어올리고





옮기는 것 까지는 원활해요. 그런데 내리는 걸 OnTriggerExit2D 안에 ReturnGravityExit() 라는 함수로 구현을 하니까 콜라이더에서 





벗어나는 거리가 있어야만 상자가 땅에 떨어져서 바로 제자리에 놓는게 안 되네영. 어떻게 하면 좋을까요?





지금은 FixedUpdate에도 ReturnGravity() 함수를 박고 버튼업 && pickuppoint!=null 조건 넣어놨어요;;





일단 이게 박스 스크립트인데 뭘 쓰면 자연스럽게 제자리에 박스를 놓을 수 있을까용?


using System.Collections;

using System.Collections.Generic;

using System;

using UnityEngine;



public class Box : MonoBehaviour

{   

    public Player player;

    public GameObject pickuppoint;

    public Rigidbody2D rigid;

    private void OnTriggerStay2D(Collider2D collision)

    {

        if (collision.transform.name == "PickUpPoint")

        {

            

            pickuppoint = collision.transform.gameObject;

            player = collision.transform.gameObject.GetComponentInParent<Player>();

            

        }

    }


    private void OnTriggerExit2D(Collider2D collision)

    {

        ReturnGravityExit();

    }


    void ReturnGravity()

    {

        if (Input.GetButtonUp("InterAct") && pickuppoint != null)

        {

            rigid.velocity = Vector2.zero;

            rigid.gravityScale = 2;

            transform.parent = null;

            pickuppoint = null;

            player = null;

        }

        

    }


    void ReturnGravityExit()

    {

        rigid.velocity = Vector2.zero;

        rigid.gravityScale = 2;

        transform.parent = null;

        pickuppoint = null;

        player = null;

    }


    void PickUp()

    {

        transform.SetParent(pickuppoint.transform);

        transform.localPosition = Vector2.zero;

        rigid.gravityScale = 0;


    }


    private void Awake()

    {

        rigid = GetComponent<Rigidbody2D>();

    }


    private void FixedUpdate()

    {


        if (Input.GetButton("InterAct")&&pickuppoint!=null)

        {

            PickUp();

        }

        ReturnGravity();

    }



}




(사실 제자리에 안 놔도 박스 자체를 몸통으로 밀어서 원위치 시키는 방법도 있는데 그래도 이것 저것 해보면서 실력을 늘리고 싶어서요..)