TapTapTap!!!(25)~プレイ画面をAndroid 上の画面に納める~

TapTapTap!!!(24)~テスト用アプリをダウンロードして実機で動かす~ ではこのアップロードした「TapTapTap!!!」を実機にダウンロードし動作するか確認を行った結果、散々な結果だった。内容については前回を参照にしてほしい。今回は前回の動作結果を元にアプリの修正(画面幅調整)を行う。

まずは、前回の結果のみをお見せすると以下の状態である。

アプリスタート画面
  1. 表示が画面内に収まっていない
  2. ボタンの表示が小さい
  3. 文字の表示が小さい

これらを順に改良していく。

1.表示を画面内に収める

まずは Unity 内に3:2にするという設定があったため、これを用いてボタンやライフ文字の位置を調整した。

3:2の画面に合わせる

同様に Unity の設定内に16:10ものもあったのでこちらも表示してみたが、思ったとおり、枠や位置にずれが起きてしまう。

16:10の画面に合わせる

そのため、取れる手段として考えられるものは以下の2通りだろう。

  1. 画面を3:2または16:10のいずれかに合わせて黒く塗りつぶす
  2. 画面の表示を3:2または16:10のいずれかに合わせて引き伸ばす

「TapTapTap!!!」では縦横非は重要とならないため、2 の引き伸ばす手段をを用いて画面サイズを調整していきたいと思う。

2.画面サイズを引き伸ばす

画面サイズを引き伸ばす方法として、シューティングゲームのチュートリアルの中に記載があったのでこれを参考していきたいと思う。項目としてはモバイル編 (共通)の複数の画面解像度に対応するが参考となる。こちらはスクリプトで画面調整を行うというものである。

実際のサンプルのスクリプトを参考に実装を行ってみた結果が以下のとおりである。うまく枠内に収まっていることが確認できる。

ウィンドウの変形

スクリプトの全容は以下の通り。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using UnityEngine;
using UnityEngine.UI;

public class MaxLevel : MonoBehaviour
{
    /// <summary>
    /// 最高レベル表示用テキスト
    /// </summary>
    public Text maxLevel;
    /// <summary>
    /// 最高レベル用テキスト
    /// </summary>
    private string maxText = "最高レベル:";
    /// <summary>
    /// ライフ表示バー
    /// </summary>
    [SerializeField]
    private GameObject LifeWindow;

    void Start()
    {
        FindObjectOfType<LifeViewer>().Init();
        // Google Play Games を有効化
        GooglePlayGames.PlayGamesPlatform.Activate();
        // Google Play Games へのログイン
        Social.localUser.Authenticate((bool success) =>
        {

        });
        Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1));
        Transform windowTrans = LifeWindow.transform;
        Vector3 size = new Vector3(max.x * 2, windowTrans.localScale.y, windowTrans.localScale.z);
        LifeWindow.transform.localScale = size;

        if (PlayerPrefs.HasKey("PlayerData"))
        {
            int level = PlayerPrefs.GetInt("PlayerData");
            maxLevel.text = maxText + level.ToString();
        }
        else
        {
            maxLevel.text = maxText + "-";
        }
    }
}

サンプルのスクリプトをやや応用して、ビューポートからサイズを取得し表示バーのサイズを更新するというものである。

3.各解像度に合わせたゲームを作るにあたって

各解像度に合わせてゲームを作るのであれば予め、文字や枠は割合でデータを保持したほうがよいと思われる。というか、そうでなければオンリーワン(1個の機種)に限定したものができてしまうことが容易に想像できた。本格的に作るゲームではそのあたりもしっかり設計しておく必要がありそう。

%d人のブロガーが「いいね」をつけました。