В настоящее время я работаю над небольшим проектом в Unity, чтобы протестировать некоторые новые функции, в первую очередь, новую систему ввода , и у меня возникли некоторые проблемы при работе со списками. Моя цель в этом проекте - создать скрипт, который создаст маленький курсор для каждого игрока, чтобы использовать его и перемещать с помощью соответствующих контроллеров.
В настоящее время я создаю и храню объекты в списке во время выполнения всякий раз, когда мой компьютер обнаруживает новый контроллер геймпада. У меня проблемы с поиском метода, который удаляет лишние объекты, которых нет в списке, то есть когда список уменьшается в размере, что в данном случае происходит, когда игрок отключает свой контроллер геймпада.
У меня были похожие проблемы в прошлых проектах, когда мне приходилось добавлять и удалять элементы из списка при попытке уничтожить указанные элементы на сцене.
Я пытался найти такой ответ, пытаясь достичь этого эффекта на нескольких сайтах (включая этот), но без преобладания.
Это мой текущий код, который я сейчас использую для добавления игроков при добавлении нового устройства.
public GameObject cursorPrefab;
public int amountOfPlayers = 4;
List<GameObject> currentPlayers = new List<GameObject>();
private void DynamicADP(){
if(Gamepad.all.Count > amountOfPlayers) return;
for(int i = 0; i < Gamepad.all.Count; i++){
if(currentPlayers[i] != null) continue;
Cursor obj = Instantiate(cursorPrefab).GetComponent<Cursor>();
obj.PlayerDevice = Gamepad.all[i];
currentPlayer.Add(obj.gameObject);
}
}
Редактировать: Хотя решение Kevins не совсем решило проблему, оно, тем не менее, помогло мне расширить мою точку зрения на этот вопрос, что в конечном итоге привело к решению того, что я хочу с этим фрагментом кода! Так что я приму ответ Кевина за это! Спасибо, Кевин!
Вот что я добавил, это очень просто.
private void DynamicADP(){
//Previous logic from the code snipper above
if(currentPlayers.Count > Gamepad.all.Count){
Destroy(currentPlayers.Count[currentPlayers.Count - 1]);
currentPlayers.RemoveAt(currentPlayers.Count - 1);
//Whenever there is a difference in size on both lists, remove the last
//object from both in-scene and from currentPlayers list.
}
}
}