Esempio n. 1
0
    //   // Use this for initialization
    //   void Start()
    //   {

    //   }

    // 储藏车厢存储材料
    public void StoreMat(Resmaterial material)
    {
        string MatName = material.name;

        if (MatName == "Wood")
        {   // 车厢已满则返回
            if (WoodStorage.Count == WoodCapacity)
            {
                return;
            }
            else if (WoodStorage.Count == 0)
            {   // 将当前资源块放到车厢底
                material.transform.parent           = gameObject.transform;
                material.transform.localPosition    = new Vector3(0, 0.7f, -0.25f);
                material.transform.localEulerAngles = Vector3.zero;
                material.transform.localScale       = new Vector3(1, 1, 0.5f);
                WoodStorage.Add(material);
            }
            else
            {   // 将当前资源块摞上去
                material.transform.parent           = gameObject.transform;
                material.transform.localPosition    = WoodStorage[WoodStorage.Count - 1].transform.localPosition + new Vector3(0, 0.2f, 0);
                material.transform.localEulerAngles = Vector3.zero;
                material.transform.localScale       = new Vector3(1, 1, 0.5f);
                WoodStorage.Add(material);
            }
        }
        else
        {   // 车厢已满则返回
            if (IronStorage.Count == IronCapacity)
            {
                return;
            }
            else if (IronStorage.Count == 0)
            {   // 将当前资源块放到车厢底
                material.transform.parent           = gameObject.transform;
                material.transform.localPosition    = new Vector3(0, 0.7f, 0.05f);
                material.transform.localEulerAngles = new Vector3(0, 0, 0);
                material.transform.localScale       = new Vector3(1, 1, 0.5f);
                IronStorage.Add(material);
            }
            else
            {   // 将当前资源块摞上去
                material.transform.parent           = gameObject.transform;
                material.transform.localPosition    = IronStorage[IronStorage.Count - 1].transform.localPosition + new Vector3(0, 0.2f, 0);
                material.transform.localEulerAngles = new Vector3(0, 0, 0);
                material.transform.localScale       = new Vector3(1, 1, 0.5f);
                IronStorage.Add(material);
            }
        }
    }
    /// <summary>
    /// 捡起相同的材料
    /// </summary>
    /// <param name="item">材料</param>
    /// <param name="n">手中已经有n个材料</param>
    public void EquipSameMaterial(GameObject itemOnGround, int n)
    {
        // handState = HANDSTATE.MATERIAL;
        // 设置父物件为右手
        itemInHand = rightHand.transform.GetChild(0).gameObject;
        itemOnGround.transform.SetParent(itemInHand.transform);
        Resmaterial res = itemInHand.GetComponent <Resmaterial>();

        // 手里材料的数量
        res.Size += itemOnGround.GetComponent <Resmaterial>().Size;

        // 关闭材料的碰撞框,不需要再检测
        itemOnGround.GetComponent <BoxCollider>().enabled = false;
        // 设置相对位置
        itemOnGround.transform.localPosition = new Vector3(0, 0.2f * n, 0);
        // 旋转为初始值
        itemOnGround.transform.localRotation = Quaternion.identity;
    }
    public void PileMaterial(GameObject itemOnGround)
    {
        // 手上物体的size
        Resmaterial rmInHand = itemInHand.GetComponent <Resmaterial>();

        // 获取地上的材料的脚本
        Resmaterial rmOnGround = itemOnGround.GetComponent <Resmaterial>();

        if (rmOnGround.Size + rmInHand.Size <= rmInHand.Capacity) // 如果总数不超过3,则可以堆叠
        {
            handState = HANDSTATE.EMPTY;


            // 获取手里的所有材料
            Resmaterial[] materials = rightHand.GetComponentsInChildren <Resmaterial>();

            for (int i = 0; i < materials.Length; i++)
            {
                // 成为地上材料的子物体
                materials[i].transform.SetParent(itemOnGround.transform);
                // 设置相对位置
                materials[i].transform.localPosition = new Vector3(0, 0.5f * rmOnGround.Size, 0);
                materials[i].transform.localRotation = Quaternion.identity;
                // 地上物体的size增加
                rmOnGround.Size++;
            }

            // 开启碰撞框
            itemInHand.transform.GetComponent <BoxCollider>().enabled = false;
            // 解绑itemInHand
            itemInHand = null;
        }
        else
        {
            UnloadMaterial();
            EquipMaterial(itemOnGround);
        }
    }