У меня есть список с моим классом, в котором хранятся два значения 'Position, PlayerType'
List<PlayerClass> playerClass = new List<PlayerClass>();
и я хочу создать спавн.
Мой код выглядит так
public Vector3 TransformPlayerPosition(PlayerType _myType)
{
Vector3 spawnposition = Vector3.zero;
for (int i = 0; i < playerClass.Count; i++)
{
if (playerClass[i].type == _myType)
{
spawnposition = playerClass[i].position;
}
}
return spawnposition;
}
если тип playerClass похож на '_myType' это работает, но каждый раз система выбирает одну и ту же позицию; / я хочу создать случайную систему для определенного типа, например
Random.Range(0, playerClass.Count, SPECIFIC TYPE);
Хорошо, я попытаюсь. Мой класс PlayerClass имеет две переменные Vector3 position; и перечисление с PlayerPrefab, SuperPlayerPrefab Система (TransformPlayerPosition) должна выбрать случайную позицию из определенного типа





Отфильтруйте свой список с помощью LINQ, затем возьмите случайный элемент из коллекции:
public Vector3 TransformPlayerPosition(PlayerType _myType)
{
var filteredPlayers = playerClass.Where(x => type == _myType).ToList();
if (!filteredPlayers.Any())
return Vector3.zero;
var rndPos = rnd.Next(filteredPlayers.Count());
return filteredPlayers[rndPos].position;
}
Вам нужно будет где-то создать экземпляр rnd вне метода.
Random rnd = new Random();
Да это лучше
О верно. Извините за эту ошибку, хахаха. Но до сих пор у меня нет новой должности prntscr.com/latl8k
Невозможно применить индексирование с помощью [] к выражению типа 'IEnumerable <EntitySpawner>'
Теперь все работает. Большое спасибо за то, что помогли мне сегодня :)
@iloveu, как новый участник сайта, я предлагаю вам прочитать Как работает принятие ответа
Этот код всегда будет извлекать последний мой тип, присутствующий в списке, потому что он зацикливается до конца. Однако даже если вы добавите перерыв внутри цикла, когда найдете совпадение, ваш код всегда будет возвращать первое совпадение. Вам нужно лучше объяснить, что такое случайное положение