У вас есть несколько вариантов получения холста.
Первый
Получить холст напрямую (если коллайдер на объекте root), например:
public void UnitSelection ()
{
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, Mathf.Infinity))
{
if (hit.collider.tag == "Unit Player 1")
{
Canvas canv = hit.collider.GetComponentInChildren<Canvas>(true);
canv.gameObject.SetActive(true);
//or you can change only canvas state like this canv.enabled = true;
}
}
}
Второй:
Или вы можете прикрепить скрипт к своему модулю и изменить внутреннее состояние холста: Часть скрипта бота:
public class Bot : MonoBehaviour
{
[SerializeField] private GameObject canvasObject;
public void ChangeStateCanvas(bool state)
{
canvasObject.SetActive(state);
}
}
Скрипт с изменением состояния холста:
public void UnitSelection ()
{
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, Mathf.Infinity))
{
if (hit.collider.tag == "Unit Player 1")
{
hit.collider.GetComponent<Bot>().ChangeStateCanvas(true);
}
}
}