首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作从商店系统收到采购物品的库存。

制作从商店系统收到采购物品的库存。
EN

Stack Overflow用户
提问于 2022-08-12 17:10:43
回答 1查看 232关注 0票数 -13

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

我已经创建了一个商店系统的购买按钮和东西,但我不知道如何使库存收到的项目。这些是我为商店和存货准备的脚本:

车间系统

代码语言:javascript
复制
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();
        }


    }
}

库存系统

代码语言:javascript
复制
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);
    }
}

我应该添加什么使它收到购买的物品?

代码语言:javascript
复制
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‘

代码语言:javascript
复制
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‘(您是缺少一个使用指令还是程序集引用?)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-14 22:24:35

您可以使用事件使您的脚本“通信”独立。

首先,你需要游戏事件。确保场景中的游戏对象上有脚本,

代码语言:javascript
复制
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);
        }
    }
}

然后将触发器包含在购买方法中:

代码语言:javascript
复制
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);
        }


    }
}

然后听一听你的库存课上的事件:

代码语言:javascript
复制
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,并在库存类中获取项目。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73337654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档