Изменение спрайта при наведении курсора

У меня есть спрайт, который действует как кнопка в главном меню моей игры. У него есть бокс-коллайдер, и я использую OnMouseDown() для регистрации нажатий кнопки.

Я хочу изменить спрайт, когда моя мышь наводит кнопку. Я знаю, что могу делать что-то, используя функцию OnMouseOver(), но как полностью переключаться между двумя спрайтами?


person Tom    schedule 23.10.2015    source источник


Ответы (3)


Вам не нужно использовать два спрайта и переключаться между ними. Просто используйте эффект, подобный этому:

void OnMouseOver()
{
    transform.GetComponent<SpriteRenderer>().sprite.color = "your new color for clicking effect";
    transform.GetComponent<SpriteRenderer>().sprite.localScale -= new Vector3(0.1f, 0.1f, 0.1f);
}

и вернуть весь этот процесс в OnMouseExit. Или, если вы все еще хотите изменить спрайт, вы можете изменить его так:

Sprite sprite;
Sprite highlightSprite;

void OnMouseOver()
{
    transform.GetComponent<SpriteRenderer>().sprite = highlightSprite;
}

void OnMouseExit()
{
    transform.GetComponent<SpriteRenderer>().sprite = sprite;
}

и измените обратно в OnMouseExit.

person Cenkisabi    schedule 24.10.2015
comment
Это хорошо работает. Но что, если бы у вас был синий спрайт, созданный, скажем, в фотошопе? Будет ли sprite.color по-прежнему менять цвет спрайта? - person Tom; 27.10.2015
comment
он меняется, но, например, когда вы устанавливаете красный цвет, я думаю, он становится синим + красным. не стал цвет именно вы поставили. - person Cenkisabi; 27.10.2015

поместите функции мыши в пустой родитель GameObject и сделайте его родительским для всех спрайтов, которые вы хотите, а затем просто включите/отключите их через родителя

person maksymiuk    schedule 23.10.2015

Другие варианты:

  • Вместо этого используйте кнопку пользовательского интерфейса мирового пространства (тогда вы можете использовать встроенный переход спрайтов и другие методы кнопок: http://docs.unity3d.com/Manual/script-SelectableTransition.html )
  • Добавьте общедоступную переменную Sprite и назначьте ей спрайт при наведении курсора мыши, затем в OnMouseOver() используйте это изображение спрайта в спрайте кнопки. (и вернуться к исходному спрайту при выходе из мыши)
  • Можно также использовать анимацию Mecanim, OnMouseOver() для переключения на другую анимацию (которая имеет только 1 кадр)
person mgear    schedule 23.10.2015