向SpriteRenderer添加突出显示颜色功能

时间:2018-08-28 17:18:44

标签: c# unity3d

我有一个用于Android手机的2D统一项目,有一个精灵,我在上面添加了按钮脚本 现在我要在上面使用色彩。

单击时更改颜色 但是颜色没有改变,我不想通过编程来实现 我已经尝试了很多东西,但仍然无法正常工作 我以前很幸运地解决了这个问题,但是现在我再也解决不了了 有人知道我在想什么吗?

here is my properties

2 个答案:

答案 0 :(得分:2)

如警告中所述,您需要指定图形才能使用颜色。尝试在此处放入具有按钮精灵的Image组件。

答案 1 :(得分:1)

基于comment中的屏幕截图,您正在混合SpriteRenderer和UI系统(ImageRawImageButton)。不要这样做。

阅读this以了解两者之间的区别。一旦确定要使用哪一个,就可以执行以下操作。

如果您决定使用UI来显示Sprite,请执行以下操作:

通过转到GameObject-> UI ---> Button创建新按钮。


如果您喜欢使用SpriteRenderer

从附加了Image的GameObject中删除任何UI组件,例如RawImageButtonSpriteRenderer,然后手动创建突出显示代码。高亮功能仅内置于Button组件中。 不能Button组件与SpriteRenderer 一起使用。如果您想使用SpriteRenderer,则必须自己制作。

这很容易。使用EventSystem。突出显示时更改OnPointerEnter中的颜色,退出指针时更改为OnPointerExit中的默认颜色。

这是一个简单的脚本(使用SpriteRenderer组件附加到GameObject):

public class SpriteDetector : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
    public Color normalColor = Color.white;
    public Color highlightedColor = Color.yellow;
    public Color pressedColor = Color.blue;

    SpriteRenderer sp;

    void Start()
    {
        sp = GetComponent<SpriteRenderer>();

        addPhysics2DRaycaster();
    }

    void addPhysics2DRaycaster()
    {
        Physics2DRaycaster physicsRaycaster = GameObject.FindObjectOfType<Physics2DRaycaster>();
        if (physicsRaycaster == null)
        {
            Camera.main.gameObject.AddComponent<Physics2DRaycaster>();
        }
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        sp.color = highlightedColor;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        sp.color = normalColor;
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        sp.color = pressedColor;
        Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);
    }
}