えにあです。
島津さんUnity2D脱出ゲーム開発入門をやっていきます。 前回は41 までやりましたので、No42~進めていきます。
No42. 戻るボタンの実装
ロッカー画面、バケツ画面まで進んだ後に、下矢印ボタンを押したら元の画面に戻るようにします。
変数の追加
現在選択されているパネルを見て、戻り先を分岐させる必要がある。 まず、パネルをenumで表現する
enum Panel { Panel0, Panel1, Panel2, Panel3 }
次に、現在選択されているパネルを格納するための変数を用意する
// 現在表示されているパネル Panel currentPanel;
OnBackArrowの実装
public void OnBackArrow() { switch(currentPanel) { case Panel.Panel2: transform.localPosition = new Vector2(0, 0); break; case Panel.Panel3: transform.localPosition = new Vector2(-1000, 0); break; } }
OnBackArrowの関連付け
BackArrowのOnClickにOnBackArrowを関連付ける。
いつものごとく、PanelParentオブジェクトの、PanelChangeスクリプトの、OnBackArrowファンクションという紐づけ方。
currentPanelの初期値も設定していないし、選択時に更新もしていないのでこのままでは動かないだろう。この後修正されるはず。
バグ修正
以下の感じで、矢印が押されるたびにPanelを更新していく。 これで動くはず。 初期値がnullなのが微妙だが、まぁ動く。
public void OnRightArrow() { currentPanel = Panel.Panel1; transform.localPosition = new Vector2(-1000, 0); } public void OnLeftArrow(){ currentPanel = Panel.Panel0; transform.localPosition = new Vector2(0, 0); } public void OnLocker0() { currentPanel = Panel.Panel2; transform.localPosition = new Vector2(0, 1500); } public void OnBucket() { currentPanel = Panel.Panel3; transform.localPosition = new Vector2(-1000, 1500); }
No43. 矢印の表示非表示
初期画面ではこれ以上左にいけないので、左ボタンを出さないといった制御を行う。
Arrow用の変数定義と割り当て
以下のように、Arrowの状態を格納するための変数を定義する。 これらに対してsetActive(true/false)することで、表示状態を変えられる。
public GameObject rightArrow; public GameObject leftArrow; public GameObject backArrow;
publicにすることで、Unityエディタから見えるようになる。 こんな感じでインスタンスを割り当てる。
矢印が押されるごとに状態の変更
右矢印が押されたら、一度全部の矢印を非表示にして、左矢印だけを表示する。 同じようにすべて関数を更新していく。
明らかに冗長なコードである。どこかで直すのであろう。
public void OnRightArrow() { currentPanel = Panel.Panel1; transform.localPosition = new Vector2(-1000, 0); rightArrow.SetActive(false); leftArrow.SetActive(false); backArrow.SetActive(false); leftArrow.SetActive(true); }
初期表示のバグを直す
今までの修正では、矢印を押したタイミングで表示非表示を切り替えているので、 初期表示では矢印が3つ表示されてしまっている。
Start関数の中で表示を切り替えることで、初期表示を修正できる。
private void Start() { currentPanel = Panel.Panel0; rightArrow.SetActive(false); leftArrow.SetActive(false); backArrow.SetActive(false); rightArrow.SetActive(true); }
No.44 矢印の修正
毎回同じロジックを書いているところを修正していく。
HideArrowsの作成
先ほどのコードで、一度すべての矢印を表示にする処理がかなり冗長だったので、以下の関数を新たに作って呼び出すように変更していく。
void HideArrows() { rightArrow.SetActive(false); leftArrow.SetActive(false); backArrow.SetActive(false); }
No.45 画面移動の修正
まだまだソースが冗長なので直していきます。
ソースの共通化
指定されたパネルを表示する処理を一か所に寄せます。
void ShowPanel(Panel panel) { switch(panel) { case Panel.Panel0: currentPanel = Panel.Panel0; transform.localPosition = new Vector2(0, 0); HideArrows(); rightArrow.SetActive(true); break; case Panel.Panel1: currentPanel = Panel.Panel1; transform.localPosition = new Vector2(-1000, 0); HideArrows(); leftArrow.SetActive(true); break; case Panel.Panel2: currentPanel = Panel.Panel2; transform.localPosition = new Vector2(0, 1500); HideArrows(); backArrow.SetActive(true); break; case Panel.Panel3: currentPanel = Panel.Panel3; transform.localPosition = new Vector2(-1000, 1500); HideArrows(); backArrow.SetActive(true); break; } }
こうすると、左矢印を押された時の処理は以下のようになります。 他の矢印が押された場合も同様です。
public void OnLeftArrow(){ ShowPanel(Panel.Panel0); }
さらなる共通化
HideArrowsはすべてで共通なのでメソッドの一番上に持ってくる。 currentパネルの設定は、引数で渡された値を使う。
こんな感じになる。
void ShowPanel(Panel panel) { HideArrows(); currentPanel = panel; switch(panel) { case Panel.Panel0: transform.localPosition = new Vector2(0, 0); rightArrow.SetActive(true); break; case Panel.Panel1: transform.localPosition = new Vector2(-1000, 0); HideArrows(); leftArrow.SetActive(true); break; case Panel.Panel2: transform.localPosition = new Vector2(0, 1500); HideArrows(); backArrow.SetActive(true); break; case Panel.Panel3: transform.localPosition = new Vector2(-1000, 1500); backArrow.SetActive(true); break; } }
No46 おわりに
ここは特になし
まとめ
今回でNo46まで終了しました。 セクション6終了です。 次回はセクション7 No47~進めていきます