Как вы изолируете значение словаря от переменной, которая ее присваивает?C#

Место общения программистов C#
Ответить
Anonymous
 Как вы изолируете значение словаря от переменной, которая ее присваивает?

Сообщение Anonymous »

Я создаю процедурно генерируемый мир, используя тайловые карты. Для каждой плитки есть данные плитки (в данном случае здоровье), которые я хочу иметь возможность изменить. Данные базового тайла определяются с помощью объекта, поддерживающего скрипты. Я настроил словарь, который принимает положение ячейки и данные плитки. Однако когда я пытаюсь изменить данные для этой ячейки, это меняет значение данных в экземпляре данных плитки, а не в словаре.
Вот код создания карты:

Код: Выделить всё

// Makes the map and assigns the data to tileInfo, done in Start()
tileInfo = new Dictionary();
tilemap = GetComponent();
gameObject.transform.position = new Vector3(-mapsizex / 2, -mapsizey / 2, 0);

for (int x = 0; x < mapsizex; x++)
{
for (int y = 0; y < mapsizey; y++)
{
tilemap.SetTile(new Vector3Int(x, y, 0), tileMain);
tileInfo.Add(new Vector3Int(x, y, 0), tileMainData);
}
}
// I add other blocks in a different snippet of code, but it does the same thing
< /code>
И вот код, который меняет значения: < /p>
// Runs when you click a tile, in Update()
void HitTile(Tile brokentile, TileData brokentiledata, Vector3Int cellPosition)
{
TileBase crnttile = tilemap.GetTile(cellPosition);
if (tileInfo[cellPosition].health > 1)
{
tileInfo[cellPosition].health -= 1;
}
else
{
tilemap.SetTile(cellPosition, brokentile);
tileInfo.Remove(cellPosition);
tileInfo.Add(cellPosition, brokentiledata);
}
}
Я предполагал, что изменение значения словаря [cell].health изменит его для плитки, на которую вы щелкаете, однако оно изменяется в реальном экземпляре объекта. Моя теория заключается в том, что, поскольку я назначаю данные плитки из экземпляра в словарь, когда я меняю значение в словаре, оно отслеживается обратно в экземпляр.
Есть ли способ изолировать значение словаря из его входов? Я хотел бы установить работоспособность в экземпляре, а затем, когда он будет назначен словарю, значение в словаре не будет связано с экземпляром, чтобы при изменении значения в словаре экземпляр оставался в покое.

Подробнее здесь: https://stackoverflow.com/questions/793 ... assigns-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»