違うカードを選択したら、選択していたカードを元の状態に戻す
という処理を実装したいです。
一回マウスオーバーなどすると、ちゃんと指定通りになります。
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;
}
}