У меня есть Inventory: MonoBehaviour, который загружает некоторые фиктивные данные в Start (), включая переменную selectedWeapon, которая установлена и может быть прочитана.
Допустим, я хочу получить доступ к этой переменной, когда я настраиваю другой MonoBehaviour в той же сцене.
Есть ли хороший способ убедиться, что переменная установлена при попытке доступа к ней? Я стремлюсь сделать это в Start () или какой-нибудь начальной функции, желательно только один раз.
Мое временное решение состоит в том, чтобы использовать функцию Update () в экземпляре, который хочет получить доступ к «selectedWeapon» из инвентаря и неоднократно пытается установить свою собственную переменную, пока она не установлена.
/// This is only an example, illustrating my problem.
public class Inventory : MonoBehaviour
{
[SerializeField]
private WeaponItem m_SelectedWeapon = null;
.
.
.
void Start()
{
m_SelectedWeapon = MockDatabase.GetSelectedWeapon();
}
.
.
.
public WeaponItem GetSelectedWeapon()
{
return m_SelectedWeapon;
}
}
//--------------------------------------------------------------------
public class Actor : MonoBehaviour
{
private WeaponItem m_SelectedWeapon = null;
public Inventory inventory;
.
.
.
void Start()
{
// Would like to set up things here
// but this can let m_SelectedWeapon be null
// since it may be null in Inventory
m_SelectedWeapon = inventory.GetSelectedWeapon();
}
void Update()
{
// If not yet set, load from inventory
if(m_SelectedWeapon == null)
m_SelectedWeapon = inventory.GetSelectedWeapon();
}
.
.
.
}
Временное решение кажется неустойчивым, так как проверки в обновлении, безусловно, будут расти в моем проекте.