目前我似乎无法理解我的计划中的事件。我有两个组成部分。一个名为EnemyMeleeSwitching
,一个名为EnemyAI
。
EnemyMeleeSwitching
,其运行时脚本与EnemyAI
包含在同一父级别中,从列表中选择一个随机Weapon
(对象)并分配{{1}对象变量为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
答案 0 :(得分:1)
是的,EnemyAI有可能在分配之前访问敌方武器。 1.尝试从Awake()方法中的EnemyWeaponSwitching Start()方法移动代码。 要么 2.尝试更改执行顺序或脚本。
答案 1 :(得分: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);
}