Unity3D C#按钮精灵交换 - 在运行时附加图像

时间:2017-02-15 12:41:03

标签: c# button unity3d sprite

当我的&#34;英雄选择菜单&#34; <我> 创建按钮正在创建。这些按钮将获取相关图像/精灵,具体取决于&#34; Hero&#34;他们将代表。

我有以下方法,但我不明白我必须将精灵应用到哪个变量

Button _thisButton;
Sprite  _normalSprite;
Sprite _highlightSprite;

protected override void DoStateTransition (SelectionState state, bool instant){
    switch (state) {
    case Selectable.SelectionState.Normal:
        _thisButton.image = _normalSprite;    //.image is not correct
        Debug.Log("statenormalasd");
        break;
    case Selectable.SelectionState.Highlighted:
        _thisButton.image = _normalSprite;    //.image is not correct
//...
    }

状态肯定在起作用,我通过Debug.Log(...);

确认了它

问题是:如果不是.image,必须更改哪个值?

提前致谢, Csharpest

2 个答案:

答案 0 :(得分:5)

您正在尝试将精灵附加到按钮组件。精灵位于Image组件中。看看这个!

GameObject buttonGameObject;
Sprite newSprite;

void Start() {
    buttonGameObject.GetComponent<Image>().sprite = newSprite;   
}

但是为了修复你的代码,你可能会做类似的事情:

Button _thisButton;
Sprite  _normalSprite;
Sprite _highlightSprite;

protected override void DoStateTransition (SelectionState state, bool instant){
    switch (state) {
    case Selectable.SelectionState.Normal:
        _thisButton.GetComponent<Image>().sprite = _normalSprite;   
        Debug.Log("statenormalasd");
        break;
    case Selectable.SelectionState.Highlighted:
        _thisButton.GetComponent<Image>().sprite = _normalSprite;    
    }

答案 1 :(得分:2)

如果你想在脚本中更改按钮spriteswap sprite,你必须使用spriteState,你可以这样做;

Button _thisButton;
Sprite  _normalSprite;
Sprite _highlightSprite;

void ChangeSprites(){
  // _thisButton.transition = Selectable.Transition.SpriteSwap;
  var ss = _thisButton.spriteState;
  _thisButton.image.sprite = _normalSprite;
  //ss.disabledSprite = _disabledSprite;
  ss.highlightedSprite = _highlightSprite;
  //ss.pressedSprite = _pressedSprie;
  _thisButton.spriteState = ss;
}

如果您使用普通按钮并选择SpriteSwap,Unity会自动交换按钮,如果您需要更改转换选项,则取消注释该函数的第一行。