Я разрабатываю игровой сервер, и в настоящее время мне нужно, чтобы зрители были в зоне, однако я боюсь, что тот, который я использую, действительно уродлив и «медленный» «но я еще не испытывал никаких показов производительности, поскольку я тестирую его локально не на реальном сервере.Получить данные из массива X, Y, Z в пределах заданного радиуса
Это мой GetSpectators Функция:
public void GetSpectators(ref HashSet<Player> Players, Coordinate_t coordinate, bool MultiFloor = false)
{
for (int x = coordinate.X - 11; x != coordinate.X + 11; x++)
{
for (int y = coordinate.Y - 11; y != coordinate.Y + 11; y++)
{
if (MultiFloor)
{
for (int z = coordinate.Z - 2; z != coordinate.Z + 2; z++)
{
Tile tile = GetTile(x, y, z);
if (tile != null)
{
foreach (Player p in tile.Creatures)
{
Players.Add(p);
}
}
}
}
else
{
Tile tile = GetTile(x, y, coordinate.Z);
if (tile != null)
{
foreach (Player p in tile.Creatures)
{
Players.Add(p);
}
}
}
}
}
}
Я этот класс Map, который держит этот другой словарь с классом плитки, каждая плитка представлена с X, Y и координаты Z, каждая плитка содержит список этот класс называется Player, у некоторых плит есть игроки, которых нет.
мне нужен хороший способ, а не уродливые, чтобы получить например:
Все игроки в пределах х = 100, Y = 100, Z = 7 в радиусе 11, например.
Не отвечаю на ваш вопрос: вам не нужно передавать 'Players'' ref', так как вы не назначаете новый экземпляр HashSet для 'Игроков' внутри метода. –
kennyzx
Кроме того, 'Игроки' должны быть' игроки', а 'MultiFloor' должен быть' multiFloor'. – Jedidja