Найти в Дзене
IT Step by step

Хотите сделать курсор в вашей игре на Unity уникальным и менять его иконку, когда мышь наводится на разные объекты?

1. Замена курсора на свою картинку по умолчанию Подготовьте изображение курсора (лучше PNG с прозрачным фоном), импортируйте в проект и в инспекторе установите Texture Type → Cursor. Создайте скрипт: public class CursorManager : MonoBehaviour { public Texture2D defaultCursor; public Vector2 hotspot = Vector2.zero; void Start() { SetDefaultCursor(); } public void SetDefaultCursor() { Cursor.SetCursor(defaultCursor, hotspot, CursorMode.Auto); } public void ResetCursor() { Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); } } Добавьте этот скрипт на любой объект в сцене и в инспекторе назначьте defaultCursor. 2. Смена курсора при наведении на объект Чтобы менять курсор при наведении на конкретный объект, используйте интерфейсы Unity IPointerEnterHandler и IPointerExitHandler из пространства имён UnityEngine.EventSystems. Пример скрипта для объекта: using UnityEngine; using UnityEngine.EventSystems; public class CursorChangerOnHover : MonoBehaviour, IPointerEnterHandler,

1. Замена курсора на свою картинку по умолчанию

Подготовьте изображение курсора (лучше PNG с прозрачным фоном), импортируйте в проект и в инспекторе установите Texture Type → Cursor.

Создайте скрипт:

public class CursorManager : MonoBehaviour
{
public Texture2D defaultCursor;
public Vector2 hotspot = Vector2.zero;
void Start()
{
SetDefaultCursor();
}
public void SetDefaultCursor()
{
Cursor.SetCursor(defaultCursor, hotspot, CursorMode.Auto);
}
public void ResetCursor()
{
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
}
}

Добавьте этот скрипт на любой объект в сцене и в инспекторе назначьте defaultCursor.

2. Смена курсора при наведении на объект

Чтобы менять курсор при наведении на конкретный объект, используйте интерфейсы Unity IPointerEnterHandler и IPointerExitHandler из пространства имён UnityEngine.EventSystems.

Пример скрипта для объекта:

using UnityEngine;
using UnityEngine.EventSystems;
public class CursorChangerOnHover : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public Texture2D hoverCursor;
public Vector2 hotspot = Vector2.zero;
public void OnPointerEnter(PointerEventData eventData)
{
Cursor.SetCursor(hoverCursor, hotspot, CursorMode.Auto);
}
public void OnPointerExit(PointerEventData eventData)
{
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); // Возвращаем стандартный курсор
}
}

Важно: Для работы этих интерфейсов объект должен иметь компонент Collider и сцена должна содержать EventSystem (обычно создаётся автоматически при добавлении UI).

3. Альтернативный способ с использованием Raycast (для 3D объектов)

Если вы не используете UI, а хотите менять курсор при наведении на 3D объекты, можно делать Raycast из позиции мыши:

using UnityEngine;
public class CursorRaycastChanger : MonoBehaviour
{
public Texture2D defaultCursor;
public Texture2D hoverCursor;
public Vector2 hotspot = Vector2.zero;
void Start()
{
Cursor.SetCursor(defaultCursor, hotspot, CursorMode.Auto);
}
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.CompareTag("HoverTarget"))
{
Cursor.SetCursor(hoverCursor, hotspot, CursorMode.Auto);
return;
}
}
Cursor.SetCursor(defaultCursor, hotspot, CursorMode.Auto);
}
}

Не забудьте назначить тег HoverTarget объектам, при наведении на которые курсор должен меняться.

Советы

✨Используйте маленькие изображения (например, 32×32 px) с прозрачным фоном.

✨Настройте hotspot - точку прицеливания курсора (обычно верхний левый угол или центр).

✨Следите, чтобы не было частых вызовов SetCursor без необходимости - это может влиять на производительность.

Официальная документация Cursor.SetCursor:

https://docs.unity3d.com/ScriptReference/Cursor.SetCursor.html

Сделайте управление курсором в игре удобным и стильным! Если возникнут вопросы - пишите в комментариях. ⬇️