#要素
・ボタンを押す、離す判定
・ボタンを押したままの状態(Hold)の処理
・スコアのテキスト変換、表示
・何秒毎に数値を増やす
#スクリプト
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の代わり)
あとは上記のスクリプト通り(Update
のif(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文に書き足す
if (buttonDownFlag && count < 100)