UnityUnityメモ

Unityで学ぶ!カウントアップタイマーとタイムアタックゲームの作り方

Unity

はじめに

こんにちは!今回は、Unityを使ってUIテキストを用いたカウントアップタイマーを作成します。また、3つのアイテム(ボール)を取るとタイマーが止まる仕組みを実装していきます。初心者の方でも分かりやすく説明していくので、一緒にやってみましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!

1.Unityプロジェクトの準備

ステップ1:新しいプロジェクトを作成

まず、Unityを起動して3Dプロジェクトを開きます。

UIテキストの追加

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「UI」→「Text(Legacy)」を選びます。
  2. Canvasが自動的に作成され、その中にTextオブジェクトが追加されます。
  3. Textオブジェクトを「TimeText」に名前変更します。
  4. インスペクター(Inspector)ウィンドウで、Textコンポーネントのテキストフィールドを空にし、フォントサイズを適当な大きさに設定します。

床を作成する

  • ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」→「Plane」を選びます。
  • 位置やサイズはそのままでも大丈夫です!



2.ボールの追加

次にプレイヤーが拾うためのボールを作成します

Sphereを作成する

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」→「Sphere」を選びます。
  2. インスペクター画面から「SphereCollider」のIstriggerの項目にチェックを入れます。

タグを設定する

  1. インスペクターウィンドウの上部にあるタグドロップダウンから「Add Tag…」を選びます。
  2. 新しいタグ「Item」を追加してから、それをボールに設定します。

ボールを複製する

  • このボールを「Ball1」と名前変更し、プロジェクトビューで複製して、「Ball2」「Ball3」としてシーンに配置します。
  • 各ボールの位置を適当に変更して、プレイヤーが取りやすいように床の上に配置します。



3.プレイヤーを作成する

次に、操作するプレイヤーとなるオブジェクト(Cube)を配置していきます。

Cubeを作成する

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」→「Cube」を選びます。
  2. 名前を「Player」などに変更するとわかりやすいです
  3. 位置が床の上になるように調整します。

物理特性を追加する

  1. Inspectorパネルで「Add Component」>から「Rigidbody」を検索して、キューブにRigidbodyコンポーネントを追加します。
  2. freezeRotationにチェックを入れて、転がっていかないように、回転を固定しておきます。

タグを設定する

  1. ヒエラルキーでPlayerオブジェクトを選択します。
  2. インスペクターウィンドウの上部にあるタグドロップダウンから「Player」を選びます。



ステップ3:スクリプトの作成

次に、プレイヤーの移動とタイマーを制御するスクリプトを作成します。

  1. プロジェクトビューで右クリックし、「Create」→「C# Script」を選びます。
  2. 名前を「PlayerMove」と名付けます。
  3. スクリプトをダブルクリックで開いて、以下のコードを入力します:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerMove : MonoBehaviour
{
    public float speed = 10.0f;
    private Rigidbody rb;
    private int count;
    public float time;
    public Text TimeText;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        time = 0.0f;
    }

    void Update()
    {
        var moveX = Input.GetAxis("Horizontal") * speed;
        var moveZ = Input.GetAxis("Vertical") * speed;
        rb.AddForce(moveX, 0.5f, moveZ);

        //3個のアイテムを取れていない間は実行
        if (count < 3)
        {
            time += Time.deltaTime;
            TimeText.text = time.ToString("F2");
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Item"))
        {
            other.gameObject.SetActive(false);
            count++;
        }
    }
}



ステップ4:スクリプトの設定

  1. PlayerオブジェクトにPlayerMoveスクリプトをドラッグ&ドロップでアタッチします。
  2. PlayerMoveスクリプトのTimeTextフィールドに「TimeText」オブジェクトをドラッグ&ドロップして割り当てます。



テストプレイ

これで、プレイヤーがボールを3つ取るとタイマーが停止するカウントアップタイマーが完成しました!ゲームを実行して、動作を確認してみましょう。



よくある質問(FAQ)

Q
タイマーが動かないんだけど、どうしたらいい?
A

PlayerMoveスクリプトが正しくアタッチされているか、TimeTextフィールドに正しいオブジェクトが設定されているか確認してみてください。

Q
プレイヤーがボールを取ってもタイマーが止まらないんだけど?
A

Ballオブジェクトに「Item」タグが正しく設定されているか確認してください。また、Playerオブジェクトに「Player」タグを付けることも忘れずに。

Q
ボールを取るとエラーが出るんだけど、どうすればいい?
A

OnTriggerEnterメソッドが正しく動作しているか確認してください。ボールとプレイヤーのColliderが正しく設定されているかもチェックしてみてください。