public void Init()
    {
        DragProcessor <BackpackItem> dragProcessor_BackpackItem = new DragProcessor <BackpackItem>();

        dragProcessor_BackpackItem.Init(
            UIManager.Instance.UICamera,
            LayerManager.Instance.LayerMask_BackpackItemGrid,
            (out Vector2 mouseScreenPos) =>
        {
            if (ControlManager.Instance.BuildingInputActionEnabled)
            {
                mouseScreenPos = ControlManager.Instance.Building_MousePosition;
                return(true);
            }
            else
            {
                mouseScreenPos = Vector2.zero;
                return(false);
            }
        },
            ScreenMousePositionToWorld_BackpackDragArea,
            delegate(BackpackItem bi, Collider collider, DragProcessor dragProcessor) { },
            delegate(BackpackItem bi, Collider collider, DragProcessor dragProcessor) { }
            );

        DragProcessor <MechaComponentDropSprite> dragProcessor_MechaComponentDropSprite = new DragProcessor <MechaComponentDropSprite>();

        dragProcessor_MechaComponentDropSprite.Init(
            CameraManager.Instance.MainCamera,
            LayerManager.Instance.LayerMask_ItemDropped,
            (out Vector2 mouseScreenPos) =>
        {
            if (ControlManager.Instance.BuildingInputActionEnabled)
            {
                mouseScreenPos = ControlManager.Instance.Building_MousePosition;
                return(true);
            }
            else
            {
                mouseScreenPos = Vector2.zero;
                return(false);
            }
        },
            ScreenMousePositionToWorld_MechaEditorInventory,
            delegate(MechaComponentDropSprite mcds, Collider collider, DragProcessor dragProcessor)
        {
            Ray ray = CameraManager.Instance.MainCamera.ScreenPointToRay(ControlManager.Instance.Building_MousePosition);
            MechaComponentInfo mci = mcds.MechaComponentInfo.Clone();
            ClientBattleManager.Instance.PlayerMecha.MechaInfo.AddMechaComponentInfo(mci, GridPosR.Zero);
            MechaComponent mc = ClientBattleManager.Instance.PlayerMecha.MechaComponentDict[mci.GUID];
            GridPos gp        = GridUtils.GetGridPosByMousePos(ClientBattleManager.Instance.PlayerMecha.transform, ray, Vector3.up, ConfigManager.GridSize);
            mci.InventoryItem.SetGridPosition(gp);
            DragManager.Instance.CurrentDrag = mc.GetComponent <Draggable>();
            DragManager.Instance.CurrentDrag.SetOnDrag(true, collider, dragProcessor);
            mcds.PoolRecycle();
        },
            delegate(MechaComponentDropSprite mcds, Collider collider, DragProcessor dragProcessor) { }
            );

        DragManager.Instance.Init(
            () => ControlManager.Instance.Building_MouseLeft.Down,
            () => ControlManager.Instance.Building_MouseLeft.Up,
            Debug.LogError,
            LayerManager.Instance.LayerMask_DragAreas);
        DragProcessor <MechaComponent> dragProcessor_MechaComponent = new DragProcessor <MechaComponent>();

        dragProcessor_MechaComponent.Init(
            CameraManager.Instance.MainCamera,
            LayerManager.Instance.LayerMask_ComponentHitBox_Player,
            (out Vector2 mouseScreenPos) =>
        {
            if (ControlManager.Instance.BuildingInputActionEnabled)
            {
                mouseScreenPos = ControlManager.Instance.Building_MousePosition;
                return(true);
            }
            else
            {
                mouseScreenPos = Vector2.zero;
                return(false);
            }
        }
            ,
            ScreenMousePositionToWorld_MechaEditorInventory,
            delegate(MechaComponent mc, Collider collider, DragProcessor dragProcessor) { },
            delegate(MechaComponent mc, Collider collider, DragProcessor dragProcessor) { }
            );
    }