Доступ к назначенному объекту времени выполнения из другого компонента?
Я не вижу смысла в событиях моей программы. У меня есть два компонента. Один называется EnemyMeleeSwitching
и один называется EnemyAI
,
EnemyMeleeSwitching
, чей сценарий содержится на том же родительском уровне, что и EnemyAI
во время выполнения выбирает случайный Weapon
(объект) из списка и назначает enemyWeapon
переменная объекта как таковая Weapon
,
Теперь у меня сложилось впечатление, что доступ к EnemyMeleeSwitching
компонент и далее Weapon
компонент из моего EnemyAI
Скрипт должен позволить мне затем получить доступ enemyWeapon
Однако я получаю NullReferenceException
,
Это как-то связано с порядком исполнения? Мой EnemyAI
скрипт пытается получить доступ enemyWeapon
прежде чем он был назначен?
EnemyMeleeSwitching
Код ниже:
public class EnemyWeaponSwitching : MonoBehaviour
{
public Weapon enemyWeapon;
public Weapon weapon01;
public Weapon weapon02;
private List<Weapon> weapons = new List<Weapon>();
void Start()
{
weapons.Add(weapon01);
weapons.Add(weapon02);
enemyWeapon = weapons[Random.Range(0, weapons.Count)];
foreach (Weapon weapon in weapons)
{
weapon.SetActive(false);
}
enemyWeapon.SetActive(true);
}
}
EnemyAI
Код звонка ниже:
weapon = (Weapon)gameObject.GetComponent<EnemyWeaponSwitching>().enemyWeapon;
2 ответа
В продолжение моего вопроса мне удалось решить эту проблему, переместив код из Start()
к новой функции, которую я вызвал после установления ссылки на EnemyWeaponSwitching
, Это присвоило требуемую переменную объекта, прежде чем я затем вызвал ее в моем EnemyAI
код.
Новый код ниже:
(EnemyAI
)
weaponSwitching = gameObject.GetComponentInChildren<EnemyWeaponSwitching>();
weaponSwitching.GenerateWeapon();
attackRange = weaponSwitching.enemyWeapon.maxAttackRange;
(EnemyWeaponSwitching
)
public void GenerateWeapon()
{
weapons.Add(weapon01);
weapons.Add(weapon02);
enemyWeapon = weapons[Random.Range(0, weapons.Count)];
foreach (Weapon weapon in weapons)
{
weapon.SetActive(false);
}
enemyWeapon.SetActive(true);
}
Да, возможно, что EnemyAI получает доступ к вражескому оружию до его назначения. 1. Попробуйте переместить свой код из метода EnemyWeaponSwitching Start() в метод Awake(). Или 2. Попробуйте изменить порядок выполнения или ваши сценарии.