Подсветка соседних шестиугольников при наведении мыши
За прошедший день я пытался перенести мою игру love2D в единство, и на данный момент я столкнулся с одной главной проблемой: я не могу воспроизвести выделение соседей.
Проблема в том, что: если я перейду от одного шестиугольника к другому, и если шестиугольник, на который я пошел, делит соседей из предыдущего шестиугольника, эти соседи не будут выделены.
Вот мой код для выделения соседей:
foreach(Tile tile in hex.neighbours){
tile.GetComponent<Renderer>().material.color=tile.data.Elements[tile.data.Element];
if (on){ // are we highlighting?
print("Highlighting..");
if(tile.GetComponent<Renderer>().material.color==tile.data.Elements[tile.data.Element] ){
//if the color of the neighbors is the same as it's element's color(meaning it hasn't been highlighted yet), highlight it.
print("changing color!");
tile.GetComponent<Renderer>().material.color=tile.GetComponent<Renderer>().material.color+new Color32(20,20,20,0);
}
}
else{
//unhightlighting
if(tile.GetComponent<Renderer>().material.color!=tile.data.Elements[tile.data.Element]){
//if the color of the neighbors isn't the same as it's element's color(meaning it's highlighted), unhighlight it.
tile.GetComponent<Renderer>().material.color=tile.data.Elements[tile.data.Element];
}
}
}
Вот как я проверяю, должен ли я выделять или не выделять:
foreach(KeyValuePair<GameObject,Hex> h in HexData){
if (hovering==null && h.Value.hovering){
h.Value.hovering=false;
//if we're not hovering over anything and a hexagon still has it's neighbors highlighted, unhighlight it's neighbors
if (h.Value.neighborsHighlighted==true){
highlightNeighbors(false,h.Value);
h.Value.neighborsHighlighted=false;
}
}
if(!h.Value.hovering && h.Value.neighborsHighlighted){
{
//if a hexagon isn't being hovered over, but it's neighbors are still hightlighed, unhighlight them.
highlightNeighbors(false,h.Value);
h.Value.neighborsHighlighted=false;
};
}
if (h.Value.hovering && h.Value.neighborsHighlighted==false){
//if we're hovering over a hexagon and it's neighbors aren't highlighted, highlight them
highlightNeighbors(true,h.Value);
h.Value.neighborsHighlighted=true;
}
}
1 ответ
Исправлено это путем выделения и отмены выделения в части кода, где я изменяю свойство / переменную.hovering
if(Physics.Raycast(ray, out hit))
{
if (hit.collider.name.Contains("Hex"))
{
hovering=hit.collider.gameObject;
foreach(KeyValuePair<GameObject,Hex> h in HexData){
if (h.Key==hovering){
highlightNeighbors(true,h.Value);
h.Value.hovering=true;
}
else if(h.Key!=hovering && h.Value.hovering==true){
highlightNeighbors(false,h.Value);
h.Value.hovering=false;
}
}
}
}
else{
if (hovering){
hovering=null;
}
}