代码实现ugui制作背包,要求1.打开背包 随机生成4个不重复的数据 2. 打开背包以后 有3个按钮 一个增加按钮 一个减 少按钮 一个整理按钮 增加按钮:随机往我们的背包增加一个我们不存在的物体, 减少按钮:随机减少一个我们的物体 整理按钮 : 对物体的买入价格由高到低排序,如果买入价格相同 ,对ID由低到高排序 3.我们点击我们的物品,会弹窗一个物体TIpS,有物品的详细信息,4.读取text文档中的物品信息
时间: 2023-12-10 19:42:01 浏览: 202
以下是一份简单的代码示例,演示如何使用Unity的UGUI制作一个背包系统。
首先,我们需要创建一个UI Canvas并添加一些UI元素,例如按钮、滚动区域和物品图标。我们还需要创建一个UI面板用于显示物品TIpS。在这个面板中,我们可以添加一些文本元素来显示物品的详细信息。
接下来,我们需要编写一些脚本来控制UI元素的行为。以下是一个简单的示例:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Inventory : MonoBehaviour
{
public GameObject itemPrefab;
public Transform inventoryPanel;
public Transform dropPanel;
public GameObject tipsPanel;
public Text tipsName;
public Text tipsPrice;
public Text tipsDesc;
private List<GameObject> items = new List<GameObject>();
private List<Item> itemList = new List<Item>();
void Start()
{
ReadItemsFromFile(); // 从文件中读取物品信息
GenerateItems(4); // 随机生成4个不重复的物品
}
void GenerateItems(int count)
{
// 随机生成count个不重复的物品
for (int i = 0; i < count; i++)
{
int index = Random.Range(0, itemList.Count);
while (items.Contains(itemList[index].prefab))
{
index = Random.Range(0, itemList.Count);
}
GameObject item = Instantiate(itemList[index].prefab, inventoryPanel);
item.GetComponent<ItemUI>().SetItem(itemList[index]);
items.Add(item);
}
}
public void AddItem()
{
// 随机增加一个不存在的物品
int index = Random.Range(0, itemList.Count);
while (items.Contains(itemList[index].prefab))
{
index = Random.Range(0, itemList.Count);
}
GameObject item = Instantiate(itemList[index].prefab, inventoryPanel);
item.GetComponent<ItemUI>().SetItem(itemList[index]);
items.Add(item);
}
public void RemoveItem()
{
// 随机删除一个物品
if (items.Count > 0)
{
int index = Random.Range(0, items.Count);
Destroy(items[index]);
items.RemoveAt(index);
}
}
public void SortItems()
{
// 对物品进行排序
items.Sort((a, b) =>
{
Item itemA = a.GetComponent<ItemUI>().item;
Item itemB = b.GetComponent<ItemUI>().item;
if (itemA.price != itemB.price)
{
return itemB.price.CompareTo(itemA.price);
}
else
{
return itemA.id.CompareTo(itemB.id);
}
});
for (int i = 0; i < items.Count; i++)
{
items[i].transform.SetSiblingIndex(i);
}
}
public void ShowTips(Item item)
{
// 显示物品TIpS面板
tipsPanel.SetActive(true);
tipsName.text = item.name;
tipsPrice.text = "Price: " + item.price;
tipsDesc.text = item.desc;
}
public void HideTips()
{
// 隐藏物品TIpS面板
tipsPanel.SetActive(false);
}
void ReadItemsFromFile()
{
// 从文件中读取物品信息
TextAsset textAsset = Resources.Load<TextAsset>("Items");
string[] lines = textAsset.text.Split('\n');
foreach (string line in lines)
{
if (line.Trim() == "") continue;
string[] fields = line.Split(',');
int id = int.Parse(fields[0]);
string name = fields[1];
int price = int.Parse(fields[2]);
string desc = fields[3];
GameObject prefab = Resources.Load<GameObject>("Items/" + fields[4]);
Item item = new Item(id, name, price, desc, prefab);
itemList.Add(item);
}
}
}
public class ItemUI : MonoBehaviour
{
public Image icon;
public Text nameText;
public Text countText;
public Item item;
public void SetItem(Item item)
{
// 设置物品信息
this.item = item;
icon.sprite = item.prefab.GetComponent<SpriteRenderer>().sprite;
nameText.text = item.name;
countText.text = "x " + item.count;
}
public void ShowTips()
{
// 显示物品TIpS
Inventory inventory = FindObjectOfType<Inventory>();
inventory.ShowTips(item);
}
public void HideTips()
{
// 隐藏物品TIpS
Inventory inventory = FindObjectOfType<Inventory>();
inventory.HideTips();
}
}
public class Item
{
public int id;
public string name;
public int price;
public string desc;
public GameObject prefab;
public int count;
public Item(int id, string name, int price, string desc, GameObject prefab)
{
this.id = id;
this.name = name;
this.price = price;
this.desc = desc;
this.prefab = prefab;
this.count = 1;
}
}
```
在这个示例中,我们使用了一个Inventory类来管理整个背包系统。该类包含了一些公共方法,例如生成物品、增加物品、删除物品和排序物品。我们还创建了一个Item类来表示每个物品的信息。每个物品都是一个包含SpriteRenderer组件的GameObject。
我们还创建了一个ItemUI类,用于控制物品在UI面板中的显示。该类包含了一个ShowTips()方法,用于在点击物品时显示物品TIpS面板。我们还添加了一个HideTips()方法,用于在鼠标移开物品时隐藏TIpS面板。
最后,在ReadItemsFromFile()方法中,我们从文本文件中读取物品信息。该文件包含每个物品的ID、名称、价格、描述和预制件名称。我们可以使用Resources.Load()方法加载预制件,并将其作为Item类的属性之一。
这只是一个简单的示例,您可以根据自己的需求修改代码。希望这可以帮助您开始制作自己的背包系统!
阅读全文