アトリエ殺人水上機

やりたいことをやった備忘録です。

Unityでストラックアウトを作る(5)タイム・スコア実装

sheeplane.hatenablog.com

この記事からの続きです。

今回のゲームはタイムアタック的な奴にしたいので、

タイム・スコアの実装を実施してゲームにしていきたいと思います。

目次

5、タイム・スコア実装

 5-1、タイムを実装する

 5-2、スコアを実装する

5、タイム・スコア実装

基本的に今回の記事はひよこ本を使用した記述が多いです。というか全部です。

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

 

記事中に何度も登場していますが、基本的なゲームの要素はこれに全部乗っている感じがします。 

5-1、タイムを実装する

・時間を計測するスクリプトを作成する

ひよこ本にすべてが書いてあるといって過言ではありません。

スクリプトを作成して、次のような処理を実装しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Timer : MonoBehaviour {

    public static float time;//経過時間のための変数宣言
 
// Use this for initialization
void Start () {
        time = 0;//時間初期値
}

// Update is called once per frame
void Update () {
        if (C_Target.clear == false){//クリア変数がfalseの時
            time += Time.deltaTime;//時間が経過する
                }
        int t = Mathf.FloorToInt(time);//整数に変換
        Text uiText = GetComponent<Text>();//textに挿入
        uiText.text = "さいそくをねらえ:" + t + "秒";//text内書き換え
}
}

簡単に説明をすると、前回の記事で実装したクリア判定がfalseになっている間、時間が経過する仕組みになっています。

・時間を表記するUIを作る

スクリプトを作成しましたので、次は時間経過を表示するUIを作っていきます。

GameObject>UI>Textからテキストを表示することが出来ます。

テキストはかなりややこしい仕組みになっていて弄ると画面から消し飛ぶケースが多いのですが、Rect Transformに注意すると大分マシになりました。

f:id:sheeplane:20180613230528p:plain

タブ中左上にある四角形のなにかは、画面のどこを原点とするか決めることが出来ます。

一番上の段のXYZは原典からの位置を示しています。

次の段はテキストが収まる領域が示されています。この領域に対してフォントがデカいと表示されなくなります。

以上に気を配りながら、テキストの配置(左/中央/右など)に気を配るとテキストが行方不明になることは少なくなります。私の設定はこんな感じです。

f:id:sheeplane:20180613230717p:plain

※フォントが標準から変更されていますが、これはWebGLの問題で変更したものです。この件については後の記事で説明します。

表示はこんな感じになります。

f:id:sheeplane:20180613230758p:plain

・UIにスクリプトを設定する

UIにスクリプトを設定します。実際に動かすと時を刻み始めるはずです。そして、的をすべて撃ち落とすと時間が止まるようになります。次はこの時間をスコアとして別に表記していきます。

f:id:sheeplane:20180613231029p:plain

 時を刻んでいます。

5-2、スコアを実装する。

こちらもほぼほぼひよこ本の丸コピーです。

・スコアを表示するスクリプトを作る

下みたいなプログラムを書きます。

using UnityEngine;
using UnityEngine.UI;//UI用
using UnityEngine.SceneManagement;//シーン変更用

public class GameResult : MonoBehaviour {

    public Text resultTime;//リザルトタイム
    public GameObject resultUI;//リザルトUI 

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
        if (C_Target.clear) {//もしTargetのclear変数がTrueだったら
            resultUI.SetActive(true);//Resultを表示
            int result = Mathf.FloorToInt(Timer.time);//整数に直す
            resultTime.text = "けっか:" + result + "秒";//結果の表記
        }
}
}

具体的に変更しているのはハイスコアの部分を丸々削っているところです。

・スコアを表示するUIを作成する

上記の要領でスコア表記用のUIを作成します。説明が雑。

f:id:sheeplane:20180613231315p:plain

f:id:sheeplane:20180613231420p:plain

気分でテキスト(今回の場合は"ゲームしゅうりょう!")を入れるといいと思います。

・UIにスクリプトを設定

作成したスコア用UIにスクリプトを設定します。設定し終わった後、Inspectorタブの名前の横についてるチェックボックスを外して不可視にしておきましょう。

f:id:sheeplane:20180613231705p:plain

赤枠の部分です。

f:id:sheeplane:20180613231813p:plain

こんなかんじになります。

 

以上でタイム・スコアは実装できたと思います。次回はリトライ、タイトル画面、音を付けていきます。