Colinp
@Colinp
Учу C++

Как найти соседние объекты шестиугольного спрайта с круглым коллайдером?

64feeff55bb5d186331543.png
Есть объект который выполняет функцию игровой клетки, нужно найти её соседей (Центральной клетки, она и чуть светлее остальных). Так-же каждая клетка содержит в себе класс Team, который определяет её цвет. Нужно найти все ли клетки одного цвета граничат друг с другом.

Класс Hexagon (Игровая клетка)

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class hexagon : MonoBehaviour
{
    public Team _Team;

    public void SetTeam(Team team)
    {
        _Team.HexagonsCount -= 1;
        _Team = team;
    }
    private void SetTeamConfig()
    {
        gameObject.GetComponent<Renderer>().material.color = _Team.Color;
    }

    private void Start()
    {
        SetTeamConfig();
    }


    private void InfoPanelSetParam(string TextMeshProPath, string _text)
    {
        GameObject canvasObject = GameObject.Find("Canvas");

        if (canvasObject != null)
        {
            Transform teamTextTransform = canvasObject.transform.Find($"InfoPanel/{TextMeshProPath}");

            if (teamTextTransform != null)
            {
                TextMeshProUGUI TeamText = teamTextTransform.GetComponent<TextMeshProUGUI>();

                if (TeamText != null)
                {
                    TeamText.text = _text;
                }
            }
        }
    }

    private void OnMouseEnter()
    {
        Color NewColor = _Team.Color;
        NewColor.r += 0.1f;
        NewColor.g += 0.1f;
        NewColor.b += 0.1f;
        gameObject.GetComponent<Renderer>().material.color = NewColor;

        InfoPanelSetParam("TeamText",$"Team: {_Team.Name}");
    }
    private void OnMouseExit()
    {
        gameObject.GetComponent<Renderer>().material.color = _Team.Color;
    }
    
}


Класс Team (Класс команды, содержит в себе разные параметры...)

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class Team : MonoBehaviour
{
    public string Name;
    public string Description;
    public Color Color;
    public int Money;

    public int HexagonsCount = 1;
    public int UnitsCount = 0;
    public int FactoryCount = 0;
    public int EconomyCount = 0;

    [Range(0, 10)] public int ArmyPower;
    [Range(0, 10)] public int FactoryPower;
    [Range(0, 10)] public int EconomyPower;

    //private TeamUnit[] UnitsVector = new TeamUnit[0];

    public int GetUnitsCount() { return UnitsCount; }
    public int GetFactoryCount() {  return FactoryCount; }
    public int GetEconomyCount() {  return EconomyCount; }
    

    public void CalculateMoney()
    {
        int ArmyLoss = (UnitsCount * 2) - UnitsCount * ArmyPower;
        int FactoryProfit = FactoryCount * FactoryPower;
        int EconomyProfit = FactoryCount / 2 * EconomyCount * EconomyPower;

        Money += FactoryProfit + EconomyProfit - ArmyLoss;
    }

    //private void __AddUnit(TeamUnit newUnit)
    //{
    //    TeamUnit[] NewUnitsVector = new TeamUnit[UnitsVector.Length+1];
    //    for(int i = 0; i < UnitsVector.Length; i++)
    //    {
    //        NewUnitsVector[i] = UnitsVector[i];
    //    }
    //    NewUnitsVector[NewUnitsVector.Length] = newUnit;
    //    UnitsVector = NewUnitsVector;
    //}
    

}



Заранее спасибо. Так же хотел бы чтобы мой код подвергся критике и я улучшил его качество :)
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы