NGUIのButtonで選択状態を色で表す【UUJ】

質問:
カード一覧からクリックしたカードの説明がラベルに表示され、ボタンの色を選択状態の色に変え、
違うカードを選択したら、選択していたカードを元の状態に戻す
という処理を実装したいです。
プログラムを書いてみたのですが、違うカードを選んだ時に色が戻らず、
一回マウスオーバーなどすると、ちゃんと指定通りになります。
isEnabledも試したのですが、falseにしてtrueにしても
二回目に反応しないようになったので断念しました

public void cardserect(){//カードがクリックされる度に呼ばれる
if(UICamera.selectedObject.tag==”card”){
for(int j=0;j<cardbool.Length;j++) {//フラグを調べる
if(cardbool[j]) {//選択フラグが立っていたら
cardbool[j]=false;//フラグをfalseに
card_serect[j].GetComponent<UIButton>().defaultColor=Color.white;
//ボタンの色を白に戻す。ここがうまくいきません 
}
}
 int i=int.Parse(UICamera.selectedObject.name);
 if(card_serect[i]==null)card_serect[i]=UICamera.selectedObject;
card_effect_text.text=cardef[i];//カードの効果を表示
cardbool[i]=true;//カードのフラグを配列に保存
card_serect[i].GetComponent<UIButton>().defaultColor=Color.gray;
//選択されたらカードの色をgrayに、ここは動作します
}
}


NGUIは毎回描画を更新しているわけではありません。

「ボタンが押された」などのイベントがあったときに更新されます。
ですから、今回のようなコードだと、ボタンの色を戻すときに
card_serect[j].SetState(UIButtonColor.State.Normal, true);
として「強制的にボタンの状態を通常状態に戻す」というイベントを送ってあげればいいです。
(下の方は押されたというイベントが来ているので動作しています)


NGUIはイベントがあったときに更新されるんですね、勉強になりました。

ただ実はState変えるというのは自分でも試したのですが、
それでもボタンの色がマウスをカードに載せて、離すまで変わりません……


自己解決しましたので、一応載せておきます
UIButtonは使わずに、UIEventTrigger(OnClick/Tap)を使い、
色はGetComponentでUISpriteを取得する事で、無事期待通りの動作を確認しました
プログラムも載せておきます
public void cardserect(){
if(UICamera.selectedObject.tag==”card”){
  for(int j=0;j<cardbool.Length;j++) {
   if(cardbool[j]) 
{
  cardbool[j]=false;
Debug.Log(“call”);
card_serect[j].GetComponent<UISprite>().color=Color.white;
break;
}
}
 card_serect_num=int.Parse(UICamera.selectedObject.name);
if(card_serect[card_serect_num] ==null) card_serect[card_serect_num]=UICamera.selectedObject;
card_effect_text.text=cardef[card_serect_num];
card_attack_text.text=attackPower[card_serect_num].ToString();
cardbool[card_serect_num]=true;
card_serect[card_serect_num].GetComponent<UISprite>().color=Color.gray;
}
}

Comments

comments

スポンサーリンク
336*280px
336*280px

フォローする

スポンサーリンク
336*280px