UIを作ろう のバックアップ差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents
*はじめに [#k8bcc0ba]
[[アイテムの設置]]の続きになります。
ついに、このページでゲーム完成となります。
最後の工程はUI(User Interface)の追加です。
#br
*UIの設置 [#a7480bad]
#br
UIとは、プレイヤー(=User)とゲームとをつなぐ箇所(=Interface)という意味で、
ここでは、その仕組みのことを指します。
マップやガイド、スコア表示、体力ゲージ、ボタン、メッセージなどがこれに当たります。
#br
このゲームでは、
 ・ゲームシーンでの現在のタイムスコア(経過時間)のテキスト
 ・スコアシーンでの最終的なタイムスコアのテキスト
 ・スコアシーンでのコンテニューボタン
を作っていきます。
一つずつ実装していきましょう。
#br
**タイムスコア(ゲームシーン) [#i88cae95]
まずは、ゲームシーンでのタイムスコアのテキストを表示してみましょう。
#br
UIの設置はほかのGameObjectと同様にヒエラルキーを右クリックしてできます。
UI>Textを選択すると、
UI>Textを選択して名前を「Timer」とします。
これで、ヒエラルキーに「Canvas」と「EventSytem」が追加されて、
「Canvas」の中に「Timer」という名前でテキストUIができます。
画面のどこかに(たぶん画面中央)に「NewText」と文字が出てきてるかと思います。
#br
「Canvas」とは、
「EventSystem」とは、
#br
まずは、テキストUIの大きさや位置を調整します。
現在、このゲームのカメラは解像度が未固定で、ゲームのウィンドウの大きさに自動で調整されるようになっています。
しかし、キャンバスの初期状態では、UIはpixel固定であるためゲーム画面の大きさで表記に乱れが出てしまいます。
そこで、「Canvas」のインスペクタからCanvasScaler>UIScaleMode>ScaleWithScreensizeに設定を変更してあげることで、
カメラと同じようにウィンドウサイズに合わせてUIの大きさが変わるようにできます。
そして、「Timer」のインスペクタのRestTranformから(posX,posY,Width,height)、Textから(FontSize,Paragraph>Aligment)を変更します。
それぞれ「キャンパスに対する相対位置(x座標、y座標)」「UIの幅、高さ」「文字の大きさとUI内の位置」に当たります。
見やすい位置、大きさになるように調整してみましょう。(左から-60,-30,120,60,40,縦横中央揃えがキレイかも?)

次に、経過時間を出力する機能をスクリプトで書いていきます。
「Text」のインスペクタからAddCompornent>NewScriptを押して「Timer」という名前でスクリプトを追加します。
#br
#geshi(csharp,number){{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //<=UI関連の名前空間

public class MoveSheep : MonoBehaviour
{
    private Text Text = null; //<=「Text」コンポーネントを定義

    // Start is called before the first frame update
    void Start()
    {
        Text = this.GetComponent<Text>(); //<=「Text」コンポーネントを取得
    }

    // Update is called once per frame
    void Update()
    {
        float totalTime = Time.time; //<=ゲーム開始からの経過時間
        Text.text = totalTime.ToString() //<=「Text」コンポーネントの「text」を変更
    }
}
}}
#br
まず名前空間として、「UnityEngine.UI」を追加します。
「UnityEngine.UI」はUI関連を扱う名前空間で、UI関連の処理を行うときに使われます。
次に「Text」コンポーネントの定義・取得をして、
Update関数の中で、

#geshi(csharp,number){{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //<=UI関連の名前空間

public class MoveSheep : MonoBehaviour
{
    private Text Text = null; //<=「Text」コンポーネントを定義
    public float totalTime = 0f; //<=
    private int minutes = 0;
    private int seconds = 0;

    // Start is called before the first frame update
    void Start()
    {
        Text = this.GetComponent<Text>(); //<=「Text」コンポーネントを取得
    }

    // Update is called once per frame
    void Update()
    {
        totalTime += Time.deltaTime;
        minutes = (int)(totalTime / 60);
        seconds = (int)(totalTime % 60);
        Text.text = minutes.ToString("D2") + ":" + seconds.ToString("D2");
    }
}
}}