Answer the question
In order to leave comments, you need to log in
How to select only 1 from several cells?
I make chess with Unity. Cell isolation problem.
The idea is this: when you click on a cell, it is highlighted in some color, and when you click it again, it returns to its original color. But if I selected one cell, and then clicked on another, another one is selected, and the first one does not return to its original color. I can't figure out how to implement it. Help me please.
Selection script code:
public class LightOn : MonoBehaviour
{
public GameObject lastChaged; // ранее выделенная фигура
// GameObject который в теории ссылается на предыдущую выделенную клетку
// и если изменить его цвет, то изменится и цвет предыдущей клетки
public Material matChange; // цвет выделения (зелёный)
Material myMat; // дефолтный цвет (чёрный / белый)
private void Start()
{
myMat = GetComponent<Renderer>().material; // узнаём изначальный цвет клетки
}
public void OnMouseUp() // нажимаем на клетку
{
if (myMat == GetComponent<Renderer>().material) // если цвет объекта чёрный или белый
{
if (lastChaged != null) // проверка выделялалсь ли до этого какая-то фигура
{
//lastChaged.ResetColor(); // меняем цвет последней фигуры на дефольный
lastChaged.GetComponent<Renderer>().material = myMat;
}
lastChaged = this.gameObject; // данная фигура стала прошлой
GetComponent<Renderer>().material = matChange; // выделяем данную фигуру
}
else // установка изначального цвета
{
ResetColor(); // сброс цвета выделенной кнопки
}
}
// сброс цвета
public void ResetColor()
{
GetComponent<Renderer>().material = myMat;
}
}
Answer the question
In order to leave comments, you need to log in
Let's try to try to explain the essence))
LightOn - the script hangs apparently on every cell.
and on each cell there is a field/link - public GameObject lastChaged.
and one cell knows nothing about another cell.
checking to see if something has been selected will check the lastChaged link local to the current cell and find nothing.
The "selector" of cells must be general, global.
some script that sends rays or receives events from
public void OnMouseUp() // click on the cell
or enter the global variable "currently selected".
so that any cell can know about it.
I hope the point is clear.
good luck)
WORKS! God bless you!!
Working code (suddenly someone needs it)
public class GlobalCS: MonoBehaviour
{
// глобальная переменная (запоминает последнюю изменённую клетку)
public static LightOn lastChangedSquare;
}
public class LightOn : MonoBehaviour
{
public Material matChange; // цвет выделения (зелёный)
Material myMat; // дефолтный цвет (чёрный / белый)
private void Start()
{
myMat = GetComponent<Renderer>().material; // узнаём изначальный цвет клетки
//lastChaged = this.gameObject;
}
public void OnMouseUp() // нажимаем на клетку
{
if (myMat == GetComponent<Renderer>().material) // если цвет объекта чёрный или белый
{
if (GlobalCS.lastChangedSquare != null) // проверка на наличие объекта
{
GlobalCS.lastChangedSquare.ResetColor(); // вызываем метод сброса цвета
}
GlobalCS.lastChangedSquare = this; // данная фигура стала прошлой
GetComponent<Renderer>().material = matChange; // выделяем данную фигуру
}
else // установка изначального цвета
{
ResetColor(); // сброс цвета выделенной кнопки
}
}
// сброс цвета
public void ResetColor()
{
GetComponent<Renderer>().material = myMat;
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question