【问题标题】:Add highlight color feature to SpriteRenderer向 SpriteRenderer 添加高亮颜色功能
【发布时间】:2018-08-29 02:44:07
【问题描述】:

我有一个用于 android 手机的 2D 统一项目,有一个我在其上添加按钮脚本的精灵 现在我想在上面使用颜色。

当我点击它时改变颜色 但颜色没有改变,我不想用编程来做 我尝试了很多东西,但仍然无法正常工作 我以前很幸运地修复了它,但现在我无法再次修复它 有人知道我错过了什么吗?

【问题讨论】:

  • 我怀疑您手动创建了按钮并做错了什么。 1.删​​除您当前的按钮。 2.通过转到GameObject-->UI--->Button来创建新按钮。 3.现在,更改高亮颜色。一切都应该正常。
  • @programmer 是的,我想手动创建,主要是我正在创建一个 android 项目,所以我想将我的游戏对象创建为按钮,所以我可以通过触摸屏单击它。现在,当我想触摸它时,游戏对象(我的 btn)的颜色会发生变化。我以前运气好,但没能再做一次。
  • 这是一个 UI、2D 还是 3D 游戏对象?它是什么类型很重要。发布 GameObject 的“Inspector”选项卡屏幕截图,显示用于在 GameObject 上显示纹理的组件
  • 它是 2D(sprite)(一张 png 图片),但将其更改为 UI 但仍然无法正常工作..prntscr.com/knxieu prntscr.com/knxixu

标签: c# unity3d


【解决方案1】:

正如警告中所说,您需要指定一个图形才能使用色调。尝试在此处放入包含您的按钮精灵的 Image 组件。

【讨论】:

  • 我知道,但不能把我的精灵放在那里(但我可以把文字放在那里),但我只想改变我的精灵颜色。我已经将材质或图层更改为 UI,但仍无法将其放在那里
  • 这个按钮上有Image 组件吗? (如果不添加)并将其 sprite 设置为您的按钮 sprite,然后将该 Image 组件放在目标图形字段中
  • 这应该可以。你确定这个按钮只附加了这个精灵而没有其他精灵。你也可以尝试增加colorMultiplier
【解决方案2】:

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

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

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

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


如果您更喜欢使用SpriteRenderer

从附加了SpriteRenderer的游戏对象中删除任何UI组件,例如ImageRawImageButton,然后手动创建一个高亮代码。突出显示功能仅内置在 Button 组件中。 不能Button 组件与SpriteRenderer 一起使用。如果您喜欢使用SpriteRenderer,则必须自己制作。

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

这是一个简单的脚本来执行此操作(使用SpriteRenderer 组件附加到游戏对象):

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);
    }
}

【讨论】:

  • 一开始我没有添加图片组件,有人说添加了,所以我添加了测试。现在让我试试你的方法,但我更喜欢使用检查器突出显示颜色变化。我记得我创建了一些精灵并向其中添加了 btn 组件,它的突出显示效果很好。所以我想也许我这次错过了什么
  • “我记得我创建了一些精灵并添加了 btn 组件,它的突出显示效果很好。” 这不是真的。如果它有效,那么您看到的图像只是由 Canvas 下的 Image 组件显示的图像,而不是由 SpriteRenderer 组件显示的图像。我已经修改了答案中的简单脚本,还添加了单击更改颜色。您也可以在编辑器中修改颜色。只需使用 SpriteRenderer 组件将其附加到 GameObject。确保它有一个 2D 对撞机。
  • 只是另一个任务,而不是onpointerenter,onpointerexit,onpointerclick,我们可以为移动触摸设备使用任何东西吗?没关系,只是想知道是否有任何触摸方法
  • 不。这适用于桌面和移动设备。其他类似的 API 需要为桌面和移动设备编写不同的代码,这很糟糕且难以管理。
  • 好的,我问是因为它在移动设备的按下模式下有点小错误。还是谢谢
猜你喜欢
  • 2021-05-07
  • 2023-02-24
  • 2013-08-18
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多