//список всех персонажей в сцене
public GameObject[] goArray;
//проходимся вначале ставим всем false
public void Awake()
{
foreach (var go in goArray)
{
go.GetComponent<Character>().isSelected = false;
}
}
//список для проверки, если вдруг нажали на одного персонажа, а затем на другого
//в таком случае все обнуляется, последнему выбранному ставится true
//этот лист очищается
public List<Character> selected;
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
var hit = Ray(); //возвращает RaycastHit
//если попали в персонажа
if (hit.collider.gameObject.tag == "Agent")
{
//скрипт Character на каждом персонаже вист.
//в нем в awake берется navMeshAgent, также находится bool isSelected
var _ch = hit.collider.gameObject.GetComponent<Character>();
_ch.isSelected = true;
selected.Add(_ch);
if (selected.Count > 1)
{
foreach (var goo in goArray)
{
goo.GetComponent<Character>().isSelected = false;
selected.Clear();
}
_ch.isSelected = true;
}
else return;
}
//если попали в землю
else if (hit.collider.gameObject.tag == "Ground")
{
foreach (var go in goArray)
{
if (go.GetComponent<Character>().isSelected == true)
{
go.GetComponent<Character>().agent.SetDestination(hit.point);
foreach (var goo in goArray)
{
goo.GetComponent<Character>().isSelected = false;
}
}
else
{
foreach (var goo in goArray)
{
goo.GetComponent<Character>().isSelected = false;
selected.Clear();
}
}
}
}
//если попали в никуда
else
{
foreach (var goo in goArray)
{
goo.GetComponent<Character>().isSelected = false;
selected.Clear();
}
}
}
}
Тоесть, логика такая, мы жмем один раз на какого-то персонажа, и каждое следущее нажатие задает ему место куда перемещаться?? (Если только мы не тыкнули на другого, персонажа и он выделился)