/// <summary>
    /// 当按下space时,捡起或放下工具或者材料
    /// </summary>
    void PickOrLoad()
    {
        // 拾起的区域为角色面前的0.5格
        Vector3 vecPickOrLoad = transform.position + transform.forward * 0.5f;

        // 画出单位方格,即可以碰撞的区域
        DrawBoxForDebug(BoxExtents, new Vector3(vecPickOrLoad.x, 0.5f, vecPickOrLoad.z));
        // 单位方格中的物体,只检测材料和工具
        hitcollidersForward = Physics.OverlapBox(new Vector3(vecPickOrLoad.x, 0.5f, vecPickOrLoad.z), BoxExtents, Quaternion.identity, LayerMask.GetMask("Material", "Tool"));

        if (hitcollidersForward.Length >= 1) // 地上有东西
        {
            // 查找最近的物体
            closestObject = hitcollidersForward[0].gameObject;

            int i = 1;

            while (i < hitcollidersForward.Length)
            {
                // 比较距离,如果距离更近,则替换closestObject
                if (Vector3.Distance(transform.position, hitcollidersForward[i].transform.position) < Vector3.Distance(transform.position, closestObject.transform.position))
                {
                    closestObject = hitcollidersForward[i].gameObject;
                }
                i++;
            }

            // 根据角色手的状态捡起或放下工具或者材料
            GameObject itemOnGround = closestObject.gameObject; // 地上的工具或材料
            bool       isTool       = (itemOnGround.tag == "Tool");
            switch (tm.handState)                               // 角色的手的状态
            {
            case ToolManager.HANDSTATE.EMPTY:                   // 手里没有东西,可以拿工具或者材料
                if (isTool)
                {
                    tm.EquipTool(itemOnGround);
                }
                else
                {
                    tm.EquipMaterial(itemOnGround);

                    if (itemOnGround.name == "Rail")
                    {
                        tm.handState = ToolManager.HANDSTATE.RAIL;
                    }
                }

                break;

            case ToolManager.HANDSTATE.TOOL:     // 手里有工具,先放下工具,再拿起工具或者材料
                if (isTool)
                {
                    tm.UnloadTool();
                    tm.EquipTool(itemOnGround);
                }
                else
                {
                    tm.UnloadTool();
                    tm.EquipMaterial(itemOnGround);
                }
                break;

            case ToolManager.HANDSTATE.MATERIAL: // 手里有材料,先放下材料,再拿起工具或者材料
                if (isTool)                      // Todo : 判断手里材料类型
                {
                    tm.UnloadMaterial();
                    tm.EquipTool(itemOnGround);
                }
                else
                {
                    if (tm.itemInHand.name == itemOnGround.name)     // 如果是同种材料则堆叠
                    {
                        tm.PileMaterial(itemOnGround);
                    }
                    else     // 如果是不同种材料,则先放下材料,再拿起材料
                    {
                        tm.UnloadMaterial();
                        tm.EquipMaterial(itemOnGround);
                    }
                }
                break;

            default:
                break;
            }
        }
        else // 方格内的无工具或材料,即空地,可以放东西
        {
            switch (tm.handState)// 角色的手的状态
            {
            case ToolManager.HANDSTATE.EMPTY:     // 手里没有东西,什么事也不做
                Debug.Log("Nothing to pick up");
                break;

            case ToolManager.HANDSTATE.TOOL:     // 放下工具
                tm.UnloadTool();
                break;

            case ToolManager.HANDSTATE.MATERIAL:     // 放下材料
                Transform mat = tm.rightHand.transform.GetChild(0);
                if (mat.name == "Wood")
                {
                    Transform wood = tm.GetWood();
                    if (!gameManager.BuildBridge(wood))
                    {
                        tm.UnloadMaterial();
                    }
                    else
                    {
                        tm.LessenMatNum();
                    }
                }
                else
                {
                    tm.UnloadMaterial();
                }
                break;

            case ToolManager.HANDSTATE.RAIL:
                Transform rail = tm.GetRail();
                if (!gameManager.PutRail(rail.gameObject))
                {
                    tm.UnloadMaterial();
                }
                else
                {
                    tm.LessenMatNum();
                }
                break;

            default:
                break;
            }
        }
    }