У меня есть список list_of_targetable, в который я создаю вражеские экземпляры. Во время игры в инспекторе я вижу, что экземпляры правильно появляются и правильно помещаются в список.
Когда я пытаюсь сослаться на эти экземпляры, из одного и того же сценария они, похоже, не существуют, и list.Count
возвращает 0
. Кроме того, я звоню TargetEnemySlot1
через кнопку, так долго после Start
, когда враги инициализируются.
Что дает?
public class Targeting : MonoBehaviour
{
public List<Combatant> current_targets;
public List<Combatant> list_of_targetable;
public void TargetEnemySlot1()
{
Debug.Log(list_of_targetable.Count);
current_targets.Add(list_of_targetable[0]);
current_targets[0].is_target = true;
current_targets[0].targeting_panel.SetActive(false);
}
}
Вещи, которые напрямую взаимодействуют со списками:
public class AbAttack : MonoBehaviour, IAbility
{
public Targeting targeting_for_attack;
public int block_attack_damage = 10;
public int block_attack_repeats = 2;
public bool needs_targets = true;
public bool targets_allies = false;
public bool targets_enemies = true;
public int number_of_targets = 1;
public void Use()
{
if (needs_targets == true)
{
if (targets_enemies == true)
{
foreach (Combatant enemy in targeting_for_attack.list_of_targetable)
{
enemy.targeting_panel.SetActive(true);
}
}
}
}
public void Enact()
{
foreach (Combatant enemy in targeting_for_attack.current_targets)
{
for (int i = 0; i < block_attack_repeats; i++)
{
enemy.health = enemy.health - block_attack_damage;
}
}
}
}
public class EnemySpawner : MonoBehaviour
{
public List<Combatant> CombatantList = new List<Combatant>();
public List<Combatant> CombatantInWaitingList = new List<Combatant>();
public List<Combatant> CombatantInCombatList = new List<Combatant>();
Inventory inventory;
public List <GameObject> targeting_panel;
public Targeting targeting_panel_targeting;
public Sprite icon1;
// Start is called before the first frame update
void Start()
{
inventory = Inventory.instance;
DrainList();
SpawnList();
}
public void DrainList()
{
List<Combatant> ToRemoveList = new List<Combatant>();
foreach (Combatant item in CombatantInWaitingList)
{
if (CombatantInCombatList.Count <= 3)
{
CombatantInCombatList.Add(item);
ToRemoveList.Add(item);
}
}
foreach (Combatant item in ToRemoveList)
{
CombatantInWaitingList.Remove(item);
}
}
public void SpawnList()
{
List<Combatant> ToRemoveList = new List <Combatant>();
foreach (Combatant item in CombatantInCombatList)
{
if (Inventory.instance.items1.Count == 0)
{
Combatant data1 = Combatant.CreateInstance("spider", icon1, targeting_panel[0]);
Inventory.instance.items1.Add(data1);
targeting_panel_targeting.list_of_targetable.Add(data1);
ToRemoveList.Add(item);
}
if (Inventory.instance.items1.Count == 1)
{
Combatant data1 = Combatant.CreateInstance("spider", icon1, targeting_panel[1]);
Inventory.instance.items1.Add(data1);
targeting_panel_targeting.list_of_targetable.Add(data1);
ToRemoveList.Add(item);
}
if (Inventory.instance.items1.Count == 2)
{
Combatant data1 = Combatant.CreateInstance("spider", icon1, targeting_panel[2]);
Inventory.instance.items1.Add(data1);
targeting_panel_targeting.list_of_targetable.Add(data1);
ToRemoveList.Add(item);
}
}
foreach (Combatant item in ToRemoveList)
{
// Add new combataant at that list location FIRST
CombatantInCombatList.Remove(item);
}
}
}
Инспектор IN GAME с экземплярами, созданными правильно:
http://prntscr.com/o629xb