2016-06-22 5 views
0

上記のように、何らかのイベント(クリックまたは数秒後)が発生したときにImageButtonのイメージを変更したいと思います。何かをしたときにImageButtonのイメージを永久に変更する

void OnclkMe(GameObject go) 
{ 
    go.GetComponentInChildren<UISprite>().spriteName = "NumCard_01"; 
} 

私はボタンをクリックすると、これはよく仕事のように見えますが、mousepointがボタンの外に移動したときに変更された画像が最初の画像に再変更されました。

私はDebug.Log funcを使ってspriteNameをテストし、スプライトが自動的に再変更されたことを確認しました。

イベントの一部が永続的に発生した場合、どのようにImageButtonのイメージを変更できますか?

+0

atlastに「NumCard_01」が存在することを確認してください。また、大文字と小文字が区別されます。これが新しいプロジェクトの場合は、NGUIを使用しないでください。新しいUnity UIを使用する必要があります。例外は、ゲーム全体がすでにNGUIで作成されている場合です。 – Programmer

+0

アトラスにNumCard_01が存在します。私は開発期間を短縮したいのでNGUIを使用していました....しかし...これが私の不在に戻ってきたのですか?私のプロジェクトはまだ初期段階です。 –

+0

それはそうです。多くの人がUnityのuGUIを採用すれば、いつでも中止することができます。私は「Daikon Forge」を使っていました。素晴らしいですが、出てきた直後にUnityのUIに切り替えました。数ヶ月後、「Daikon Forge」は廃止され、更新されなくなりました。実際、人々がそれを買うのを止めれば、出版社がそれを更新し続けるための時間と資源がなくなります。 – Programmer

答えて

1

新しいプロジェクトでは、Unityの新しいUIシステムであるuGUIを使用する必要があります。

Button.onClick.AddListener(() => callbackFunction())でボタンイベントに登録することができ、Button.image.sprite = newSprite;を使用してボタンの画像内のスプライトを変更できます。スクリプトの上部にusing UnityEngine.UI;を含める必要があります。

public Button button1; 
public Button button2; 

public Sprite newSprite; 

void OnEnable() 
{ 
    //Register Button Events 
    button1.onClick.AddListener(() => buttonCallBack(button1)); 
    button2.onClick.AddListener(() => buttonCallBack(button2)); 
} 

private void buttonCallBack(Button buttonPressed) 
{ 
    if (buttonPressed == button1) 
    { 
     //Your code for button 1 
     buttonPressed.image.sprite = newSprite; 
    } 

    if (buttonPressed == button2) 
    { 
     //Your code for button 2 
    } 
} 

void OnDisable() 
{ 
    //Un-Register Button Events 
    button1.onClick.RemoveAllListeners(); 
    button2.onClick.RemoveAllListeners(); 
} 
+0

イベントよりも「AddListener」匿名関数を実行するのにも同じ性能がありますか? – matiaslauriti

+0

@ P0lT10nパフォーマンスが優れているため、いつでもUnityでイベントを使用する方が良いでしょう。 'AddListener'はボタンを使ってイベントを作るのを容易にするために作られています。ボタンを200万回/秒でクリックしないので、「AddListener」を使用するとパフォーマンスが低下しません。 – Programmer

関連する問題