LoginSignup
1
0

More than 3 years have passed since last update.

【Unity】ボタンを押している間だけ数字を増やす

Last updated at Posted at 2021-04-26

完成形

count.gif

要素

・ボタンを押す、離す判定
・ボタンを押したままの状態(Hold)の処理
・スコアのテキスト変換、表示
・何秒毎に数値を増やす

スクリプト

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

public class CountScript : MonoBehaviour
{
    public Text countText;
    private int count = 0;
    private bool buttonDownFlag = false;
    private float timeleft = 0.04f;

    void Update()
    {
        if (buttonDownFlag) //buttonDownFlagがtrueの時
        {
            Debug.Log("Hold");

            timeleft -= Time.deltaTime;
            if (timeleft <= 0.0)
            {
                timeleft = 0.04f; //1秒間に+25したい=1/25秒毎に+1
                count++;
                countText.text = count.ToString();
            }
        }
    }

        //ボタンを押した時の処理
        public void OnButtonDown()
        {
            Debug.Log("Down");
            buttonDownFlag = true;
        }

        //ボタンを離した時の処理
        public void OnButtonUp()
        {
            Debug.Log("Up");
            buttonDownFlag = false;
        }
    }

細かい手順

1, UI設置

Unity上でTextとButtonを配置する

2, Buttonの設定をする

スクリプトを書き、Buttonにアタッチする
アタッチしたらButtonにEventTriggerをつけ、
PointerDown と PointerUp をつける。それぞれ関数を紐付ける
参考:https://sole-game-creater.com/unit-button-hold-it-down/

3, カウント設定

スクリプトの最初に「using UnityEngine.UI;」が無かったら書き足す
Unity上でHierarchyのTextオブジェクトをButtonに紐づいているスクリプトにアタッチしておく。(GetComponentの代わり)
あとは上記のスクリプト通り(Updateif(buttonDownFlag)の中)

ここでは1秒ごとに25足したい(4秒押し続けると100になるようにしたかった)ので、
1/25つまり0.04秒毎に+1をする処理にした。
なのでtimeleft = 1 にすると、1秒ごとに1増える普通のカウントになる。

つまづいたこと

初めてやったときにつまづいたこと。

PointerDownだけでHold判定になっていると思っていた

このEventTriggerで押し続けている処理になってると勘違いしてました。
実際はボタンを押した時だけの処理です。
押し続けているHold状態の処理をするためにFlagを使います
buttonDownFlagというものを用意して、ボタンを押したらtrue、離したらfalseにします。
そしてUpdateの中(=1フレーム毎に実行)でtrueの時の処理を書くことで、「押し続けている間処理をし続ける」ことができます

・1秒毎に+25をそのまま書いたら思ってたのと違った

よく考えたら当たり前だけど、完成形のように数字を増やしたかったのに1秒で+25をそのままスクリプトに書いたら25、50、75・・・と段々に切り替わる感じで表示されてしまった(だから0.04秒毎に1増えるという書き方をしている)

カウントする数値に上限を設けたい

Updateの中のif文に書き足す

CountScript.cs
 if (buttonDownFlag && count < 100)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0