Подсветка соседних шестиугольников при наведении курсора - PullRequest
0 голосов
/ 13 мая 2018

В течение прошедшего дня я пытался перенести свою игру 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 Ответ

0 голосов
/ 13 мая 2018

Исправлено, выделив и не выделив фрагмент кода, где я изменяю свойство / переменную .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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...