Я не уверен, если это поможет, но если у вас есть все изображения в сцене под брезентом, с этим нужно просто перетащить холст на сценарий и использовать
//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.ChangeColor(level-1,Color.green);
или вы можете сделать также
//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.RevertColor(level - 1);
Это сценарий:
//Keep it private but you still see it in inspector
//#Encapsulation :)
[SerializeField]
private Canvas _canvas;
private Image[] _images;
//keep the original colors in case you want to change back
private Color[] _origColors;
void Start() {
_images = GetComponentsInChildren<Image>();
_origColors = new Color[_images.Length];
for (int i = 0; i < _images.Length; i++)
{
_origColors[i] = _images[i].color;
}
}
//Reverts the color of the image back to the original
public void RevertToOriginal(int imageIndex)
{
_images[imageIndex].color = _origColors[imageIndex];
}
//Change to color to the coresponding index, starts from 0
public void ChangeColor(int imageIndex, Color color)
{
_images[imageIndex].color = color;
}
P.S Если вы хотите, чтобы это было видно только в конце, вы можете создать метод, в котором вы включаете = (true или false) для холста. Таким образом, вы держите его ложным до конца уровня, и вы делаете это правдой, когда хотите показать, а после каждого ответа вы вызываете ChangeColor в зависимости от результата. Для упрощения вы можете использовать:
NameOfScript variableName = FindObjectOfType<NameOfScript>();
и после того, что вы просто позвоните
variableName.ChangeColor(level - 1, Color.green);
Также не имеет значения, где вы положили сценарий. Я бы сделал своего рода менеджера (пустой GameObject) в сцене и поместил его туда.
Где прикреплять этот скрипт. в холсте или панели? – iappmaker
Пока вы устанавливаете объекты tutorialButton и levelButton у инспектора, на самом деле не имеет значения, где вы прикрепляете скрипт. Он не использует никаких свойств Gameobject, к которым прикреплен скрипт. (В моем случае у меня был скрипт, который обрабатывает всю логику игры, и он был прикреплен к пустым Gameobject, и этот фрагмент кода находился в функции Start(), поэтому при загрузке каждого уровня (сцены) он вызывался один раз и созданы кнопки, необходимые для уровня). – merterpam