Проблема
FindGameObjectWithTag
, которая равна afaik GameObject.FindWithTag
в новых версиях, не находит объекты, которые неактивны!
Возвращает один тег active GameObject
.Возвращает null
, если не было найдено GameObject
.
Поэтому после установки значения SetActive(false)
вы не сможете найти его снова, используя любой из вариантов Find
.
Кроме того, вы создаете новую локальную переменную с именем panel
каждый раз, скрывая уже существующую panel
вместо того, чтобы использовать уже имеющуюся.
Solution
Так что вместо этогополучить ссылку, пока объект активен и только один раз, и использовать ее позже:
public class EquipmentSlot : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler/*, IPointerDownHandler, IPointerUpHandler*/
{
// if you referenced this in the Inspector e.g. via drag & drop
// you could completely skip the Find in the start method
public GameObject panel;
void Start()
{
panel = GameObject.FindGameObjectWithTag("panel");
}
public void OnPointerEnter(PointerEventData eventData)
{
panel.SetActive(false);
}
public void OnPointerExit(PointerEventData eventData)
{
panel.SetActive(true);
}
}
(Конечно, если объект был уничтожен, это все равно даст вам исключение.)