Единство, ссылающееся на все изображения в сцене вместо одного

#c# #unity3d

#c# #unity3d

Вопрос:

Я пытаюсь изменить цвет изображения при наведении на него курсора мыши. Он запускается PointerEnter , когда я навожу на него курсор и PointerExit когда моя мышь уходит.

Вместо изменения цвета только того изображения, над которым я нависаю, он изменяет цвет каждого изображения в сцене. Кто-нибудь может помочь?

Вот мой код:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class click : MonoBehaviour {

    void Start(){
        
    }

    void Update(){
        
    }
    
    public void PointerEnter(){
        gameObject.GetComponent<Image>().material.color=new Color(1,1,0);
    }
    
    public void PointerExit(){
        gameObject.GetComponent<Image>().material.color=new Color(1,1,1);
    }

}
  

Ответ №1:

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

Вам нужно изменить цвет изображения, просто удалите материал в ваших строках.

 gameObject.GetComponent<Image>().color=new Color(1,1,0);
  

Компонент Button имеет настройки перехода, в которых вы можете устанавливать цвета для состояния, возможно, вам не нужен дополнительный код.

Ответ №2:

Unity имеет 2 предварительно запрограммированные функции, называемые OnMouseOver() and OnMouseExit() . Который вы можете использовать, чтобы увидеть, ввела ли мышь ваш Image .

Вам нужно будет добавить этот фрагмент кода к каждому Image , который вы хотите Color изменить при наведении курсора мыши, и убедиться, что вы получаете .Color компонент вместо .material.color компонента.

Пример:

 public class OnMouseOverExample : MonoBehaviour
{
    void OnMouseOver() {
        // Executes when you Hover over this GameObject with the Mouse
        gameObject.GetComponent<Image>().color = new Color(1f, 1f, 0f);
    }

    void OnMouseExit() {
        // Executes when you no longer Hover over this GameObject with the Mouse
        gameObject.GetComponent<Image>().color = new Color(1f, 1f, 1f);
    }
}
  

Если вы хотите изменить компоненты пользовательского Color интерфейса, вы также можете использовать Button компонент. Который уже имеет встроенную функциональность, вы можете использовать для подкрашивания Color вашего изображения.