2017-02-15 17 views
2

私は私の "ヒーローセレクションメニュー"が作成されているときにボタンを作成中です。これらのボタンは、に関連する画像/スプライトを表示します。これらのボタンは、それらが表す「ヒーロー」に応じて表示されます。Unity3D C#ボタンスプライトスワップ - 実行時に画像を添付

私は以下のメソッドを持っていますが、の変数はにスプライトを適用する必要があります。

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

答えて

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

確かに。まあそれはちょっと厄介です:D。ありがとうございます^^ 3分であなたの答えを受け入れることができます。 – Csharpest

+0

ええ、私は実際にを "_thisButtonImage = _thisButton.GetComponent ();"フィールドにキャッシュしています。 void Start()。次に、私は単に "_thisButtonImage.sprite = _normalSprite;"と呼んでいます。状態が変わるたびにGetComponentを呼び出すよりもパフォーマンスが良いと思います。これは本当ですか? – Csharpest

+0

確かに、本当です! – Maakep

2

スクリプトでボタンspriteswapスプライトを変更したい場合は、spriteStateを使用しなければならないが、あなたのような何かを行うことができますこの;あなたが関数の最初の行のコメントを解除し、その後の移行オプションを変更する必要がある場合は、通常のボタンを使用してSpriteSwapを選択している場合

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

Unityは自動的にボタンでスワップします。

+0

O、それはすてきです! – Maakep

+0

Aha!これがspriteStateの使用方法です。ありがとう、私は "DoStateTransition(...)"の上書きを使用するものの代わりにあなたのバージョンを使用することを検討します。私はあなたのパフォーマンスがより良いと思う、実行時にスプライトをボタンコンポーネントに付け加えます。 – Csharpest

関連する問題