Когда вы создаете экземпляр GameObject, вы делаете копию из шаблона.Когда вы вызываете SetActive
, вы вызываете его для объектов шаблона, так что он, вероятно, применяется к префабу.
Вместо этого вы должны вызывать его для экземпляра объекта, поэтому вам нужен другой список для хранения каждого клона.
Кроме того, вы можете немного упростить код, назначив каждой кнопке индекс (когда он создается), представляющий ее позицию в списке и ссылку на сам список.
Таким образом, вы можетеустановите для обратного вызова OnClick
в Инспекторе собственный метод ButtonListButton
вместо создания OptionNClicked
для каждого.
public sealed class ButtonListControl : MonoBehaviour
{
private GameObject[] ApplianceList;
// Hide every button except the one with the given index
public void HideAllBut(int index)
{
for (int i = 0; i < ApplianceList.Length; i++)
{
ApplianceList[i].SetActive(i == index);
}
}
}
public sealed class ButtonListButton : MonoBehaviour
{
[SerializeField]
public int Index;
[SerializeField]
ButtonListControl List;
// This asks the list to hide every button except for this one
public void HideOthers()
{
List.HideAllBut(Index);
}
}