[英]Unity3D C# Button sprite swap - attach images at runtime
我正在创建“英雄选择菜单”时创建按钮。 这些按钮将根据它们所代表的“英雄”获得相关的图像/精灵。
我有以下方法,但我不明白我必须将精灵应用到哪个变量。
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
您正在尝试将精灵附加到按钮组件。 精灵位于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;
}
如果你想在脚本中更改按钮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会自动交换按钮,如果您需要更改转换选项,则取消注释该函数的第一行。
您可以通过在运行时更改图像组件的 sprite 属性来实现。
button1.GetComponent<Image>().sprite = sprite;
完整的演示代码:
using UnityEngine;
using UnityEngine.UI;
public class SpriteChangeDemo : MonoBehaviour
{
public Button button1;
public Sprite sprite1, sprite2;
void Start()
{
ChangeSprite(sprite1);
ChangeSprite(sprite2);
}
public void ChangeSprite(Sprite sprite) {
button1.GetComponent<Image>().sprite = sprite;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.