c#Unity使用不同实例共享脚本

时间:2018-01-08 02:50:01

标签: c# unity3d unity5

问题是我有一个土豆类,当我通过库存使用它时,它应该使用马铃薯,只有马铃薯。相反,它将游戏中的每一个马铃薯都取下来,有没有办法让所有的马铃薯都拥有自己的代码实例呢?

public class Food : Item {
    public float healthHealedOnUse;
    public int uses;
}//name ect is in the Item base class

我用于库存的代码:

    public void UseItem(){
    if (item != null) {
        if (item is Food) {
            Debug.Log ("using "+item.name);
            PHH.Heal (((Food)item).healthHealedOnUse);
            ((Food)item).uses--;
            if(((Food)item).uses < 1){
                ClearSlot();
            }
        } else {
            item.Use ();
        }

影响所有的土豆,而不仅仅是我点击的土豆。

添加到广告资源

public List<Item> items = new List<Item>();
public bool add(Item item){
    if (items.Count >= space) {
        Debug.Log ("Inventory Full");
        return false;
    } else {
        items.Add (item);
        onItemChangedCallback.Invoke ();
        return true;
    }
}

玩家拾取项目脚本

void PickUp(){
    Debug.Log ("Picking up " + item.name+"!");
    bool wasPickedUp = Inventory.instance.add (item);
    //Debug.Log(wasPickedUp);
    if (wasPickedUp == true) {
        Destroy (gameObject);
    }

将代码添加到广告资源广告位

public void AddItem(Item newItem){
    item = newItem;
    icon.sprite = item.icon;
    icon.enabled = true;
    removeButton.interactable = true;
}

我如何在库存广告位中显示商品

Inventory inventory;
public GameObject Inventoryui;
public Transform itemsParent;
InventorySlot[] slots;
void Start () {
    Inventoryui.SetActive (false);
    inventory = Inventory.instance;
    inventory.onItemChangedCallback += UpdateUI;
    slots = itemsParent.GetComponentsInChildren<InventorySlot> ();
}

public void ToggleInventory(){

    Inventoryui.SetActive (!Inventoryui.activeSelf);
}
void UpdateUI(){
    Debug.Log ("Updating UI");
    for (int i = 0; i < slots.Length; i++) {
        if (i < inventory.items.Count) {
            slots [i].AddItem (inventory.items [i]);
        } else {
            slots [i].ClearSlot ();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

...将其作为可编辑物品

您的&#34;每个参考都是相同的&#34;问题

您需要:

  1. 克隆可编写脚本的项目并将其添加到播放器的广告资源
  2. 将可编写脚本的项目视为描述项目内容的单例,并创建一个&#34; ItemStack&#34;以类似Minecraft的方式(只有一个Potato对象,但是所有的土豆堆都是ItemStack的一个实例,其中包含对理想化的马铃薯实例的引用。)