2

Как бы то ни было, я не могу понять смысл событий в моей программе. У меня есть два компонента. Один называется 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; 

ответ

0

В качестве продолжения моего вопроса мне удалось решить эту проблему, переместив код с 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); 
} 
1

Да, вполне возможно, что EnemyAI обращается enemyWeapon, прежде чем он назначен. 1. Попробуйте переместить код из метода EnemyWeaponSwitching Start() в метод Awake(). Или 2. Попробуйте изменить порядок выполнения или ваши скрипты.

+0

Привет, да я понял это, но забыл обновить свой ответ. Спасибо хоть! Upvoted. – MattGarnett

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