我想把从我的游戏商店购买的物品,比如装饰品,在我买完后去库存。

我已经创建了一个商店系统的购买按钮和东西,但我不知道如何使库存收到的项目。这些是我为商店和存货准备的脚本:
车间系统
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ShopManager : MonoBehaviour
{
public int[,] shopItems = new int[9, 9];
public float coins;
public Text CoinsTXT;
void Start()
{
CoinsTXT.text = "" + coins.ToString();
//ID's
shopItems[1, 1] = 1;
shopItems[1, 2] = 2;
shopItems[1, 3] = 3;
shopItems[1, 4] = 4;
shopItems[1, 5] = 5;
shopItems[1, 6] = 6;
shopItems[1, 7] = 7;
shopItems[1, 8] = 8;
//Price
shopItems[2, 1] = 10;
shopItems[2, 2] = 20;
shopItems[2, 3] = 30;
shopItems[2, 4] = 40;
shopItems[2, 5] = 50;
shopItems[2, 6] = 65;
shopItems[2, 7] = 110;
shopItems[2, 8] = 150;
}
public void Buy()
{
GameObject ButtonRef = GameObject.FindGameObjectWithTag("Event").GetComponent<EventSystem>().currentSelectedGameObject;
if (coins >= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID])
{
coins -= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID];
CoinsTXT.text = "Coins:" + coins.ToString();
}
}
}库存系统
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inventory {
private List<Item> itemList;
public Inventory()
{
itemList = new List<Item>();
Debug.Log("Inventory");
}
public void AddItem(Item item)
{
itemList.Add(item);
}
}我应该添加什么使它收到购买的物品?
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEvents : MonoBehaviour
{
public static GameEvents gameEvents;
private void Awake()
{
gameEvents = this;
}
public event Action<int> onItemPurchase;
public void ItemPurchaseMade(Item int)
{
if (onItemPurchase != null)
{
onItemPurchase(int);
}
}
}我发现了这些错误:
Assets\GameEvents.cs(17,39):错误CS1001:预期标识符
Assets\GameEvents.cs(17,39):错误CS1003:语法错误,',‘预期
Assets\GameEvents.cs(17,42):错误CS1001:预期标识符
Assets\GameEvents.cs(21,28):错误CS1525:无效表达式术语'int‘
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEvents : MonoBehaviour
{
public static GameEvents gameEvents;
private void Awake()
{
gameEvents = this;
}
public event Action<int> onItemPurchase;
public void ItemPurchaseMade(int itemId)
{
if (onItemPurchase != null)
{
onItemPurchase(itemId);
}
}
}以下是我在编辑itemId后遇到的错误:
Assets\Scripts\GameEvents.cs(6,14):error CS0101:名称空间“”已经包含“GameEvents”的定义
Assets\Scripts\GameEvents.cs(15,25):错误CS0246:无法找到类型或名称空间名称'Item‘(您是缺少使用指令还是程序集引用?)
Assets\Scripts\GameEvents.cs(17,34):错误CS0246:无法找到类型或命名空间名称'Item‘(您是缺少使用指令还是程序集引用?)
Assets\Scripts\Inventory.cs(20,25):错误CS0246:无法找到类型或名称空间名称'Item‘(您是缺少使用指令还是程序集引用?)
Assets\Scripts\GameEvents.cs(10,18):error CS0111: Type 'GameEvents‘已经用相同的参数类型定义了一个名为’GameEvents‘的成员
Assets\Scripts\Inventory.cs(8,18):错误CS0246:无法找到类型或名称空间名称'Item‘(您是缺少一个使用指令还是程序集引用?)?
发布于 2022-08-14 22:24:35
您可以使用事件使您的脚本“通信”独立。
首先,你需要游戏事件。确保场景中的游戏对象上有脚本,
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEvents : MonoBehaviour
{
public static GameEvents gameEvents;
private void Awake()
{
gameEvents = this;
}
public event Action<Item> onItemPurchase;
public void ItemPurchaseMade(Item item)
{
if(onItemPurchase != null)
{
onItemPurchase(item);
}
}
}然后将触发器包含在购买方法中:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ShopManager : MonoBehaviour
{
public int[,] shopItems = new int[9, 9];
public float coins;
public Text CoinsTXT;
void Start()
{
CoinsTXT.text = "" + coins.ToString();
//ID's
shopItems[1, 1] = 1;
shopItems[1, 2] = 2;
shopItems[1, 3] = 3;
shopItems[1, 4] = 4;
shopItems[1, 5] = 5;
shopItems[1, 6] = 6;
shopItems[1, 7] = 7;
shopItems[1, 8] = 8;
//Price
shopItems[2, 1] = 10;
shopItems[2, 2] = 20;
shopItems[2, 3] = 30;
shopItems[2, 4] = 40;
shopItems[2, 5] = 50;
shopItems[2, 6] = 65;
shopItems[2, 7] = 110;
shopItems[2, 8] = 150;
}
public void Buy()
{
GameObject ButtonRef = GameObject.FindGameObjectWithTag("Event").GetComponent<EventSystem>().currentSelectedGameObject;
if (coins >= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID])
{
coins -= shopItems[2, ButtonRef.GetComponent<ButtonInfo>().ItemID];
CoinsTXT.text = "Coins:" + coins.ToString();
Item yourItem = Item() //get your Item from ID
GameEvents.gameEvents.ItemPurchaseMade(yourItem);
}
}
}然后听一听你的库存课上的事件:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inventory {
private List<Item> itemList;
public Inventory()
{
GameEvents.gameEvents.onItemPurchase += AddItem;
itemList = new List<Item>();
Debug.Log("Inventory");
}
public void AddItem(Item item)
{
itemList.Add(item);
}
}目前还不清楚您从哪里从他们的is获得该项目。所以我才把那部分忘了。作为另一种选择,您可以通过事件传递itemId,并在库存类中获取项目。
https://stackoverflow.com/questions/73337654
复制相似问题