ほぼ0からのunityゲーム制作雑記【29日目】バトルモードを選択し、バトルに反映する
■シーンをまたいで値を引き継ぎたい
前回は、バトル画面のUIを少し変えてみました。昨日の記事はこちら。
今回は、以前作成したバトルモード選択画面でモードを選択し、実際のバトルに反映させたいと思います。
■バトル画面に飛ぶ前に
自分の遊びたいバトルモードを選択した状態でエンターキーを押すことで、まずはこのモードでいいかという確認画面を出したいと思いました。何となくエンターを押してしまったときの救済措置です。
エンターキーを押したときに確認のメッセージを出した後でもう一度エンターキーを押すことでバトル開始、スペースキーでバトルモード説明に戻るようにします。
こんなときはgoto文。一回目のエンターキーの後でスペースキーを押したとき、現在選択中のモードに飛ぶようにしました。
しかし、ゲームモードで確認してみると、表示がおかしい。エンターを押した一瞬だけ確認のメッセージが出るのですが、すぐに勝手に元のモード説明文に切り替わってしまう。何故だ。
冷静になってスクリプトを見直すと、現在選択中のモード説明文が常に上書きされるようになっていました。すぐに、何かキーを押したときだけ文章が切り替わるようにかえてやります。各モードのときにその処理を書いたので非常に美しくないスクリプトになっていますが、直すのはいつかまたということで。
なんとか無事に確認の文章が表示されるようになりました。
■選択したモードを引き継ぎたい
さっそく、確認後エンターを押したとき、バトル画面に遷移するようにスクリプトを書きこみます。
うごかしてみました。確認の文章をすっ飛ばしてバトルが始まりました。
それもそのはず。IF文で「エンターキーを押したら」の条件の中にさらに「エンターキーを押したら」バトル画面に遷移するような命令を書いてしまっていたのです。慌ててフラグを作って問題の命令を修正しました。
今度はうまくいきました。さて、ここからが選択したモードの引継ぎになります。
バトルモード選択画面ではINT型で現在選択中のモードを0~2の値で管理しています。それをそのままバトル関係のスクリプトに持っていけたらよさそうです。
ネットで調べたところ、使えそうなものがありました。staticな変数です。しかし、調べれば調べるほど、staticは軽い気持ちでほいほいつかってはいけないよ、という警告が目に入ります。確かにどこからでもアクセスできる変数は一回こけると皆を巻き込む気がします。
とはいうものの、現在のところは、他に手段が思い浮かばず、これまた後にいい手が浮かんだとき修正するのを前提に、staticに手を出します。その結果がこちら。
わかりやすいように、自分のゲージの上に現在のモードを表示しています。格闘モードではカウンター以外の攻撃方法が封じられているため、画面上側のバリアゲージもなくなっています。
■次の目標は?
せっかくなので、モードごとにUIを少しずつ変えていこうと思います。1個ずつ直していきます。