Изменить значок курсора при наведении курсора мыши на кнопку

Я разрабатываю игру, в которой мне нужно изменить значок курсора, когда курсор указывает на кнопку, и возвращается в нормальное состояние, когда не указывает на кнопку. До сих пор я делал это, но ничего хорошего, никаких предложений, в которых я ошибаюсь? Я прикрепляю этот скрипт к кнопке...

using UnityEngine;
using System.Collections;

public class cursor : MonoBehaviour {

  Vector2 mouse;
  int w =32;
  int h=32;
  public Texture2D cursor1;
  // Use this for initialization
  void Start () {
    Cursor.visible = true;
  }

  // Update is called once per frame
  void Update () {
    mouse = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
  }
  void OnMouseOver()
  {
    Cursor.SetCursor (cursor1, Vector2.zero, CursorMode.Auto);
  }
  void OnMouseExit()
  {
    Cursor.SetCursor (null,Vector2.zero,CursorMode.Auto);
  }
}
0
источник поделиться
2 ответа

Для изменения значка системы или любых взаимодействий на основе ввода вам необходимо использовать Event Trigger для UI-системы (это легко реализовать).

Сначала измените функции Mouse over и Mouse Exit для публики. Добавьте систему событий к вашим кнопкам, которые вы хотите изменить курсором при наведении, добавив component-> Trigger Event → Добавить новый тип события ->

Здесь есть несколько событий, которые вы можете выбрать, но вам нужно только на Enter и Pointer Exit

Итак, выберите свой указатель Enter & Pointer Exit → Click ' + sign → Перетащите указатель курсора в обоих местах и выберите соответствующую функцию из сценариев и выполните свою программу.

enter image description here

Другой способ - реализовать функции системы событий в вашем скрипте курсора и поместить его на объект кнопки, но я думаю, что первый метод чист и прост в реализации. Событие Trigger Scripted Implementation 1

Примечание. Ваша старая мышь будет работать с объектами в 3D-мире, у которых есть коллайдеры, а не как пользовательский интерфейс, поэтому ваш скрипт курсора не работает для кнопок, поскольку кнопки находятся в пространстве пользовательского интерфейса. Хотя вы можете заставить их работать в пользовательском интерфейсе, используя 3D/2D-коллайдеры, но вам придется идти с raycasters, который является немного длинным методом для реализации. Я предпочел бы пойти с простыми, если не потребуется

Информация о событиях

Надеюсь, это решает вашу проблему.

+2
источник

Вы проверили эту ссылку на Unity Doc:

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

Вы настроили текстуру в инспекторе, как необходимо?

Текстура для курсора или null для установки курсора по умолчанию. Обратите внимание, что текстуру необходимо импортировать с помощью функции "Чтение/запись" в импортере текстуры (или с использованием значений по умолчанию "Курсор"), чтобы использоваться в качестве курсора.

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос