利用MVC来做背包系统

来源:互联网 发布:截面数据是什么 编辑:程序博客网 时间:2024/06/18 11:35

MVC至少要建立四个文件脚步

M脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
public class BagModle {
    //MVC格式  modle纯数据格式 不需要继承monoBehaviour
    // Use this for initialization
    private static BagModle _instance;
    private BagModle()
    {
        readJson();
    }
    public static BagModle Instance()
    {
        if (_instance == null)
        {
         return    _instance = new BagModle();
        }
        return _instance;
    }
    //一般来说配置表的内容是不进行增删改查  所以ItemInfo不进行修改
    public struct ItemInfo
    {
        public string id;//物品id
        public string name;//物品名称
        public string icon;//物品图片
    }
    public struct BagInfo
    {
        public string id;//背包项id
        public int count;//背包中物品数量
        public string itemId;//物品id
        public ItemInfo itemInfo;//物品信息
    }
    //利用字典存储
    Dictionary<string, ItemInfo> itemDit = new Dictionary<string, ItemInfo>();
    List<BagInfo> bagList = new List<BagInfo>();
    void readJson()
    {
        TextAsset textFile = Resources.Load("bagitem", typeof(TextAsset))as TextAsset;
        JsonData obj = JsonMapper.ToObject(textFile.ToString());
        Debug.Log("来吧");
        for(int i = 0; i < obj.Count; i++)
        {
            
            ItemInfo info = new ItemInfo();
            info.id = obj[i]["id"].ToString();
            info.name = obj[i]["name"].ToString();
            info.icon = obj[i]["icon"].ToString();
            Debug.Log(info.icon);
            itemDit.Add(info.id,info);
        }
    }
    public ItemInfo GetItemInfoById(string id)
    {
        return itemDit[id];
    }
    public void addInfoToBag(string id,int count,string Itemid)
    {
        BagInfo bagInfo = new BagInfo();
        
        
        bagInfo.id = id;//将配置表中的id赋给baginfo
        bagInfo.count = count;//将count 值赋给info的count
        bagInfo.itemId = Itemid;
        bagInfo.itemInfo = GetItemInfoById(Itemid);//通过itemid找到对应iteminfo信息
        bagList.Add(bagInfo);//将info添加到list中
    }
    public void RemoveFromBag(int index)
    {
        bagList.Remove(bagList[index]);
    }
    public List<BagInfo> GetBagList()
    {
        return bagList;
    }
}

C脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class BagController : MonoBehaviour {


    public BagView bagView;
    BagModle bm;
void Start () {
        bm = BagModle.Instance();
        bm.addInfoToBag("1",5, "1001");
        bm.addInfoToBag("2",12, "1002");
        bm.addInfoToBag("3",3, "1003");
        UpdateView();
    }

// Update is called once per frame
void Update () {
        
}
    void UpdateView()
    {
        List<BagModle.BagInfo> list = new List<BagModle.BagInfo>();
        list = bm.GetBagList();
        
        bagView.Refresh(list);
    }
    
    void removeItem(int index)
    {
        bagView.Clear();
        bm.RemoveFromBag(index);
        UpdateView();
       
     } 
}


ItemView脚ben

:using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ItemView : MonoBehaviour {


    // Use this for initialization
    public Image m_icon;
    public Text m_name;
    public Text m_count;
void Start () {

}

// Update is called once per frame
void Update () {

}
    public void RefreshItem(BagModle.BagInfo bagInfo)
    {
        BagModle.ItemInfo info = bagInfo.itemInfo;
        Sprite tempType = new Sprite();
        m_icon.sprite = Resources.Load(info.icon,tempType.GetType())as Sprite;
        m_name.text = info.name;
        m_count.text = bagInfo.count+"";
        this.transform.GetComponent<Button>().onClick.AddListener(
            delegate ()
            {
                this.OnRemoveSelected(this.gameObject);
            }
            );
    }
    void OnRemoveSelected(GameObject sender)
    {
        string name = sender.name;
        int index = int.Parse(name);
        SendMessageUpwards("removeItem",index);
    }
    public void Write()
    {
        Debug.Log("测试SendMessage");


    }
}


背包 BagView 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class BagView : MonoBehaviour {


// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
    public void Refresh(List<BagModle.BagInfo> list)
    {
        for(int i = 0; i < list.Count; i++)
        {
            GameObject go =(GameObject)Instantiate(Resources.Load<GameObject>("Item"));
            go.name = i+"";
            go.transform.SetParent(this.transform);
            go.GetComponent<ItemView>().RefreshItem(list[i]);
        }
    }
   public void Clear()
    {
        int count = this.transform.childCount;
        for(int i = 0; i < count; i++)
        {
            Destroy(this.transform.GetChild(i).gameObject);
            
        }
    }
}