На основе снимков экрана в вашем комментарии вы смешиваете SpriteRenderer
и систему пользовательского интерфейса (Image
, RawImage
, Button
). Не делайте этого.
Прочитайте это , чтобы понять разницу между ними. Как только вы решите, какой из них использовать, вы можете сделать следующее ниже.
Если вы решили использовать пользовательский интерфейс для отображения Sprite, сделайте следующее:
Создайте новую кнопку, перейдя в GameObject -> UI ---> Button.
Если вы предпочитаете использовать SpriteRenderer
:
Удалите все компоненты пользовательского интерфейса, такие как Image
, RawImage
, Button
из GameObject, к которому прикреплен SpriteRenderer
, а затем вручную создайте код выделения. Функция подсветки встроена только в компонент Button
. Вы не можете использовать компонент Button
с SpriteRenderer
. Вы должны сделать свой собственный, если вы предпочитаете использовать SpriteRenderer
.
Это легко. Используйте EventSystem . Измените цвет в OnPointerEnter
при выделении и верните его цвет по умолчанию в OnPointerExit
при выходе из указателя.
Вот простой скрипт для этого (присоединение к GameObject с компонентом SpriteRenderer
):
public class SpriteDetector : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
public Color normalColor = Color.white;
public Color highlightedColor = Color.yellow;
public Color pressedColor = Color.blue;
SpriteRenderer sp;
void Start()
{
sp = GetComponent<SpriteRenderer>();
addPhysics2DRaycaster();
}
void addPhysics2DRaycaster()
{
Physics2DRaycaster physicsRaycaster = GameObject.FindObjectOfType<Physics2DRaycaster>();
if (physicsRaycaster == null)
{
Camera.main.gameObject.AddComponent<Physics2DRaycaster>();
}
}
public void OnPointerEnter(PointerEventData eventData)
{
sp.color = highlightedColor;
}
public void OnPointerExit(PointerEventData eventData)
{
sp.color = normalColor;
}
public void OnPointerClick(PointerEventData eventData)
{
sp.color = pressedColor;
Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);
}
}