Сорян, что с запозданием, я вижу примерно такой алгоритм работы (пишу прям в браузере, могут быть ошибки):
using UnityEngine;
//Скрипт, контролирующий ввод. Например можно повесить на камеру
public class InputManager: MonoBehaviour
{
// ссылка на скрипт, контролирующий UI юнита
public UnitUIController unitUI;
// юнит, выделенный последний раз
private Unit selectedUnit;
void Start()
{
unitUI.gameObject.SetActive(false);
}
void Update()
{
// ловим клик левой кнопкой мыши
if(Input.GetMouseButtonDown(0))
{
// рейкаст из точки клика
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
Unit unit = null;
if (Physics.Raycast(ray, out hit, float.MaxValue))
{
// если кликнули по юниту, то должен быть компонент Unit
// иначе функция поиска вернет null
unit = hit.collider.gameObject.GetComponentInParent<Unit>();
}
// обработка клика (нашли или не нашли юнита)
OnMouseClicked(unit);
}
}
void OnMouseClicked(Unit unit)
{
// если кликнули в пустоту или по тому же юниту, скрываем UI
if(unit == null || unit == selectedUnit)
{
selectedUnit = null;
HideUI();
}
else
{
// кликнули по новому юниту
selectedUnit = unit;
ShowOrUpdateUI(unit);
}
}
// Скрываем интерфейс
void HideUI()
{
unitUI.gameObject.SetActive(false);
}
// отображаем или обновляем интерфейс
void ShowOrUpdateUI(Unit unit)
{
unitUI.gameObject.SetActive(true);
unitUI.UpdateUI(unit);
}
}
using UnityEngine;
using UnityEngine.UI;
//Скрипт, обновляющий UI на экране, в зависимости от того, какой юнит выбран.
// повесить на корневой объект диалога, отображаемого по клику на юнита
public class UnitUIController: MonoBehaviour
{
public Text unitName;
private void Uint unit;
public void UpdateUI(Unit unit)
{
// сохраняем ссылку на выделенного юнита, для которого показывается UI, чтобы потом выполнять его функции
this.unit = unit;
// отображаем имя выделенного юнита
unitName.text = unit.displayName;
// и другие свойства юнита
}
}
using UnityEngine;
// скрипт юнита (должен висеть на каждом юните)
public class Unit: MonoBehaviour
{
public string displayName;
// другая логика и параметры юнита
}