zoukankan      html  css  js  c++  java
  • unity背包系统(摘抄)

    新的背包系统包括:

    1、一个用于表示背包系统的按钮:

    该按钮上添加了EventListener事件,该事件经过改写,可用于实现点击一次展示,点击第二次消失的效果。

    代码比较简单,主要是在EventListener本身的事件代码上进行了一定的修改:


    public GameObject item;
    public GameObject tip;
    public int count = 0;

    其中Item用于表示监听的物体,tip表示受到监听后发生动作的物体,count用于计数,以便于实现点击两次后tip物体消失的效果。

    具体的点击代码如下所示,比较简单,不再进行解释:


    void ButtonClick(GameObject button)
    {
    count++;
    if(count==1)
    tip.SetActive(true);
    if (count == 2) {
    tip.SetActive(false);
    count = 0;
    }
    2、物品的显示:

    因为此处涉及到与后台端数据的传输,所以我在这里暂且先将物品的信息用一个TXT文件保存起来:

    这些信息分别对应 物品的id 物品的名称 物品的图片表示 (暂且需要这么多,更多的信息以后丰富内容的时候进行添加)

    为了读取TXT文件中物品的信息,我们需要创建一个空物体,并在该物体上挂上读取的脚本:

    我们需要把TXT的文件读取到一个String中,根据‘ ’和‘,’来分割字符串,取得相应的物品信息,保存到之后我们需要在点击物品是显示的Dictionary中去。

    具体代码如下,比较简单:

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

    public class ObjectsInfo : MonoBehaviour
    {

    public static ObjectsInfo _instance;
    public TextAsset objectsInfoListText;

    private Dictionary<int, ObjectInfo> objectInfoDictionary =
    new Dictionary<int, ObjectInfo>();

    void Awake()
    {
    _instance = this;
    ReadInfo();
    }

    public ObjectInfo GetObjectInfoById(int key)
    {
    ObjectInfo info = new ObjectInfo();
    objectInfoDictionary.TryGetValue(key, out info);
    return info;
    }
    private void ReadInfo()
    {
    string text = objectsInfoListText.text;
    string[] strArray = text.Split(' ');
    foreach (string str in strArray)
    {
    string[] proArray = str.Split(',');

    ObjectInfo info = new ObjectInfo();

    int id = int.Parse(proArray[0]);
    string name = proArray[1];
    string iconName = proArray[2];
    string typeStr = proArray[3];

    info.id = id;
    info.name = name;
    info.iconName = iconName;
    //添加到字典上,id为key,方便根据id查找
    objectInfoDictionary.Add(id, info);
    }
    }
    }

    //id,名称,icon名称,类型
    public class ObjectInfo
    {
    public int id;
    public string name;
    public string iconName;

    }


    要让背包内的物品正确显示出来,还需要对物品添加一个SetId的方法,对于每个物品来说,id对应的图片是不同的,最后进行使用时对应的效果也是不同的。

    public void SetId(int id)
    {
    ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id);
    sprite.spriteName = info.iconName;
    this.id = id;
    }


    除此之外,物品和其他不同,还需要相应拖拽事件,这里比较简单,为物品添加一个 Box Collider,然后让物品对应的脚本继承于Unity原生的拖拽事件即可。

    3、一个用于表示背包的Sprite:


    加入一个Sprite,然后对Sprite进行图片添加的操作。

    此处需要注意的是,如果在NGUI中想要添加自己的图片背景,和在Unity原生的添加是不一样的。此处需要自己创建一个图集Atlas。

    点选你需要的图片,点击右键,选择NGUI->Open Atlas Maker,会弹出以下对话框:

    加入你需要的图片后点击画面中的“添加/更新”按钮即可。这样可以被用于Sprite组件的属于你自己的图集就建立好了。之后只需要在对应的Sprite组件的 UI Sprite面板中,点击Atlas,选择图集,在点击Sprite,就可以了。

    4、背包中的格子Cell:

    首先分析一下,可以发现,背包需要一个Sprite,但背包中还有许多网格,所以在背包中创建一系列的Sprite,用于表示物品存放的格子。如图中的Cell。

    为了方便起见,这里可以将Cell进行Prefab的处理。

    所谓的Prefab,就是将一个你自己定义好的资源打包,以便下次使用的时候,可以直接从资源文件里拖出来使用。有点类似于图形学里的显示列表(不知道这么比喻对不对)。

    操作也非常简单,对你需要进行Prefab处理的资源点击右键,选择Create -> Prefab即可。

    因为背包系统中,背包本身面板需要存放一些Cell,也就格子,格子中再存放物体。所以对于背包面板来说,需要对格子Cell进行管理。需要创建一个List用于存放格子。为了方便格子的管理,最好在面板中给格子进行编号,如图,从Cell01开始编号。

    格子还需要对物体有一定的管理作用,在格子中定义变量id为物品的编号,num为物品的数量,添加一个Label用于在物品的右下角显示该物品的数量。

    using UnityEngine;
    using System.Collections;

    public class InventoryItemGrid : MonoBehaviour {

    public int id = 0;
    public int num = 0;
    private ObjectInfo info = null;
    private UILabel numLabel;

    void Start()
    {
    numLabel = this.GetComponentInChildren<UILabel>();
    }

    public void SetId(int id, int num = 1)
    {
    this.id = id;
    info = ObjectsInfo._instance.GetObjectInfoById(id);
    InventoryItem item = this.GetComponentInChildren<InventoryItem>();
    this.num = num;
    numLabel.text = this.num.ToString();
    numLabel.enabled = true;

    item.SetId(id);
    }

    public void PlusNum(int num = 1)
    {
    this.num += num;
    numLabel.text = this.num.ToString();
    }
    public void ClearInfo()
    {
    id = 0;
    num = 0;
    info = null;
    numLabel.enabled = false;
    }
    }


    至此我们对背包系统进行了拆分,分成了按钮、物品、背包面板和格子几部分。并初步实现了每一部分的功能,下面我们将要把这些分离开的功能整合到一起,实现一个完整的背包系统。

  • 相关阅读:
    10-22 训练 T2 plate
    C语言I博客作业03
    c语言I博客作业02
    数学的数字
    javascript 递归
    WEB 动画的一些实现方式
    javascript 中Object一些高效的操作方法
    javascript 中Array一些高效的操作方法
    mac os 的一些命令
    javascript 继承
  • 原文地址:https://www.cnblogs.com/hpu001/p/9925724.html
Copyright © 2011-2022 走看看