2016-03-11 9 views
0

У меня есть система инвентаризации, и когда я взял элемент, в который он попал, но я не уверен, что я изменил, потому что элемент больше не подбирается. Я пытаюсь все, что могу, но теперь единственный раз, когда я могу добавить элемент в свой инвентарь, - это функция запуска, где она была инициализирована.Подбор предметов в Unity

Вот код прилагается к плееру

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

public class BasePlayer : MonoBehaviour { 

private List<BaseStat> _playerStats = new List<BaseStat>(); 

private List<BaseItem> _playerInventory = new List<BaseItem>(); 

void Start() { 

BaseItem _item = new BaseItem(); 
BaseItem _weapon = new BaseItem(); 

_weapon.ItemType = BaseItem.ItemTypes.WEAPON; 

BaseItem _potion = new BaseItem(); 

_potion.WeaponType = BaseItem.WeaponTypes.BOW; 
_potion.ItemType = BaseItem.ItemTypes.POTION; 

_playerInventory.Add (_item); 
_playerInventory.Add (_weapon); 
_playerInventory.Add (_potion); 
} 

public List<BaseItem> ReturnPlayerInventory() { 
return _playerInventory; 
} 
} 

Вот код прилагается к пункту

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

public class Avalon : MonoBehaviour { 

private List<BaseItem> playerInventory = new List<BaseItem>(); 

public GameObject Sword; 

void Start() { 
BasePlayer basePlayerScript = GameObject.FindGameObjectWithTag ("Player").GetComponent<BasePlayer>(); 
playerInventory = basePlayerScript.ReturnPlayerInventory(); 
} 


void OnTriggerEnter2D(Collider2D col) { 
if (col.CompareTag ("Player")) { 
GreatSwordAvalon(); 
Destroy (Sword.gameObject); 

} 
} 

public void GreatSwordAvalon() { 

BaseItem _avalon = new BaseItem(); 
_avalon.ItemName = "GreatSword of Avalon"; 
_avalon.ItemDescription = "Strongest sword in the game"; 
_avalon.ItemType = BaseItem.ItemTypes.WEAPON; 
_avalon.ItemValue = 999999; 
_avalon.ItemStats.Add (new BaseStrength()); 
_avalon.WeaponType = BaseItem.WeaponTypes.SWORD; 
playerInventory.Add (_avalon); 
} 

} 

Любая помощь очень ценится

+0

Вы пытались отложить отладку, чтобы узнать, идет ли речь о вашей функции GreatSwordAvalon? Входит ли он в if (col.comparetag («Player»))? Попытайтесь выяснить, где он не работал, как ожидалось. – Matriac

+0

@Matriac Я попробовал, что на GreatSwordAvalon и OnTriggerEnter2D функция вызывается. Я даже попытался сделать GetKeyDown, чтобы увидеть, работает ли это, и он вызван, но не добавляет в инвентарь. По какой-то причине он добавляет только через функцию запуска. – a7x963

+0

Вы уверены, что ваша переменная _playerInventory не равна нулю? После добавления меча, вы видели в нем новый предмет? Возможно, проблема связана с правильным списком, и вы получаете только копию по какой-то причине – Matriac

ответ

1

я в конечном итоге решить эту проблему сам , В моем сценарии Window Inventory у меня есть функция AddItemsFromInventory, которая проверяет все в инвентаре игрока и добавляет его в окно инвентаря.

Проблема заключалась в том, что у меня был вызов функции в начале вместо обновления, поэтому она постоянно проверяет, а не только в начале.

Смежные вопросы