Заменить спрайт у дочернего объекта в Unity C#

477
26 февраля 2017, 06:54

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

В голову пришло только одно решение:

  • Создал кнопку ( Button )

  • Создал картинку ( Image ) как дочерний объект в Button

  • При наведении на кнопку навесил событие.

И вся проблема заключается в том, чтобы у дочернего объекта поменять спрайт. Пытаюсь поменять спрайт следующим образом:

if (this.transform.Find ("Image")) {
   Debug.Log ("OnHover");
   Image bImg = this.GetComponent<Image>();
   bImg.sprite = ButtonImageHover;
}

Но почему то спрайт не меняется, хотя в консоли при наведении на кнопку пробегает "OnHover" ...

Answer 1

VeryBadUser, тогда я бы сделал иначе.

операция Find может уменьшить производительность. А еще могут быть проблемы если на сцене несколько объектов по имени "Image". И тогда не факт что это будет дочерний объект.

GameObject.Find is useful for automatically connecting references to other objects at load time; for example, inside MonoBehaviour.Awake or MonoBehaviour.Start. For performance reasons, it is recommended to not use this function every frame. A common pattern is to assign a GameObject to a variable inside MonoBehaviour.Start, and use the variable in MonoBehaviour.Update.

    public class MyClass
    {
       public Image bImg;// Можно назначить через инспектор.
       void Awake()
       {
           bImg = transform.Find("/Image").GetComponent<Image>();// Или найти среди дочерних объектов. 
       }
       void F()
       {
          if (bImg  != null) {
            Debug.Log ("OnHover");     
            bImg.sprite = ButtonImageHover; 
            }
       }
    }
Answer 2

Это делается вообще без кода.

Используй элемент Button и выставь все что нужно в настройках инспектора

Answer 3

Спасибо Valera Kvip. Воспользовался вашим решением:

if (this.transform.Find ("Image")) {
   Debug.Log ("OnHover");   
   Image bImg = this.transform.Find ("Image").GetComponent<Image>();
   bImg.sprite = ButtonImageHover; 
}
READ ALSO
Проблема с групировкой данных

Проблема с групировкой данных

Уже несколько дней бьюсь с проблемой группировки данныхПо примерам сделать не получается, либо группировка вообще не выводиться ни как,...

344
Проблема с обновлением приложения

Проблема с обновлением приложения

Писал автообновляемое приложение на C#, проблема возникла в запуске уже обновленного приложения

279
проблема с движением кнопки c#

проблема с движением кнопки c#

У меня двигающаяся кнопка и 4 статичныеЭта двигающаяся кнопка не должна проходить сквозь другие

401