TapTapTap!!!(28)~実機での不具合を修正する~
TapTapTap!!!(27)~アプリをバージョンアップし、動作を確認する~ では修正が正常に行われたか確認するため、Google Play コンソールからアプリのバージョンアップを行った。しかしながら、メインのボタンが表示されずに何もできず終了してしまった。そのため、今回はその原因調査と修正を行っていく。
1.Unity 上で動作検証する
Unity 上での動作確認は上部の再生ボタンから行うことができる。
再生ボタンをクリックして、実行して何度か試行した結果以下のような現象が起こった。
問題がわかりました。画面外にボタンが生成されています。公開する前に気づけというところもあると思うが、こういうことは往々にして起こるものなんだろう。
2.ボタンの生成範囲を修正する
まずはボタンの生成範囲を可視化したいと思う。分かりづらいと思うが、実際に可視化したところかなり大きな範囲にボタンを出現する設定になっていることがわかる。
これは前回 Cavas の変更をしたことによる影響と思われる。 Canvas の変更に合わせてスクリプトにも変更を加える必要がある。今回の確認では [Game Object] > [UI] > [Image] を生成し、「ButtonManager」イメージサイズを現在使っているボタン表示範囲に設定している。
[cce_csharp]/// <summary> /// ボタンの表示範囲 /// </summary> [SerializeField] private Image image; /// <summary> /// ゲーム開始時の処理。画面サイズの取得を行う。 /// </summary> void Start() { panelHeight = panel.GetComponent<Image>().transform.lossyScale.y; screenWidth = (Screen.width - 100) - (Screen.width - 100) / 2; screenHeight = (Screen.height - 100) - (Screen.height - 100) / 2; image.GetComponent<RectTransform>().localScale = new Vector3(screenWidth * 2, screenHeight * 2, 0); levelText.text = constLevelText + level.ToString(); }[/cce_csharp]
その他にもいろいろ試行錯誤した結果が、結局 「canvas のサイズを取得してその中で表示する」というシンプルなものに落ち着いた。スクリプトの変更は以下の通り。
/// <summary> /// ゲーム開始時の処理。画面サイズの取得を行う。 /// </summary> [cce_csharp]void Start() { Vector3 panelLossyScale = panel.GetComponent<RectTransform>().sizeDelta; Vector3 deltaSize = canvas.GetComponent<RectTransform>().sizeDelta; panelHeight = deltaSize.y + panelLossyScale.y; screenWidth = deltaSize.x / 2 - 100; screenHeight = deltaSize.y / 2 - 100; levelText.text = constLevelText + level.ToString(); }[/cce_csharp]
四苦八苦ししていたのがバカバカしいが、シンプルに終わることがスクリプトを組む中で一番重要なことだし満足している。
3.実機での動作検証をする
前回と同様にアプリをビルドして、Google Play コンソールにアップロードし実機で確認してみると以下の用にうまく表示することができた。
これはベータ版公開まで、後少しといったところだ。