从另一个组件访问运行时分配的对象?
Accessing a runtime assigned Object from another component?
就目前而言,我似乎无法理解程序中的事件。我有两个组成部分。一个叫 EnemyMeleeSwitching
一个叫 EnemyAI
.
EnemyMeleeSwitching
,谁的脚本在运行时包含在与 EnemyAI
相同的父级别中,从列表中随机选择一个 Weapon
(对象)并分配给 enemyWeapon
对象变量 Weapon
.
现在我的印象是从我的 EnemyAI
脚本访问 EnemyMeleeSwitching
组件并进一步访问 Weapon
组件应该允许我访问 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;
是的,EnemyAI 可能在分配 enemyWeapon 之前访问它。 1. 尝试将代码从 EnemyWeaponSwitching Start() 方法移到 Awake() 方法中。
要么
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);
}
就目前而言,我似乎无法理解程序中的事件。我有两个组成部分。一个叫 EnemyMeleeSwitching
一个叫 EnemyAI
.
EnemyMeleeSwitching
,谁的脚本在运行时包含在与 EnemyAI
相同的父级别中,从列表中随机选择一个 Weapon
(对象)并分配给 enemyWeapon
对象变量 Weapon
.
现在我的印象是从我的 EnemyAI
脚本访问 EnemyMeleeSwitching
组件并进一步访问 Weapon
组件应该允许我访问 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;
是的,EnemyAI 可能在分配 enemyWeapon 之前访问它。 1. 尝试将代码从 EnemyWeaponSwitching Start() 方法移到 Awake() 方法中。 要么 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);
}