Вот код создания карты:
Код: Выделить всё
// 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);
}
}
Есть ли способ изолировать значение словаря из его входов? Я хотел бы установить работоспособность в экземпляре, а затем, когда оно будет присвоено словарю, значение в словаре не будет связано с экземпляром, чтобы при изменении значения в словаре экземпляр оставался в покое.РЕДАКТИРОВАНИЕ:
Чтобы прояснить, что я имею в виду, вот несколько фотографий:
При запуске игры
Это значение, которое я установил для здоровье травы.
После нажатия кнопки трава
Что я конкретно хочу, так это установить начальное здоровье (среди других переменных) для травы в экземпляре объекта. Затем код назначит эти переменные словарю, как он это делает. Однако я хочу, чтобы он действовал таким образом, чтобы, когда я нажимаю на блок, изменялось только состояние этого блока. Прямо сейчас он меняет состояние ВСЕХ блоков этого типа, когда я нажимаю ЛЮБОЙ блок этого типа. Итак, что делает код, так это обращается к экземпляру, который я установил в качестве значения в словаре, и меняет введенное мной число для здоровья и отбрасывает его на единицу. Желаемое поведение заключается в том, что как только я назначу работоспособность словарю, если я изменю работоспособность для определенного ключа, все остальное останется без изменений.
Вот код TileData для тех, которые спросил:
Код: Выделить всё
using UnityEngine;
using UnityEngine.Tilemaps;
using System;
using System.Collections.Generic;
[CreateAssetMenu]
public class TileData : ScriptableObject
{
public TileBase tile;
[SerializeField]
public int health;
}
Чтобы прояснить, зачем нужен словарь, мне нужна простота использования x. здоровье, x.damage и т. д.
Если есть более простой способ сделать это, я открыт для него или для исправления моего уже существующего кода (предпочтительно). Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... assigns-it
Мобильная версия