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
Сделайте управление курсором в игре удобным и стильным! Если возникнут вопросы - пишите в комментариях. ⬇️
#Unity #GameDev #Обучение
