FC2ブログ
11 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 01

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】ボタンを押すと一定時間押せなくなるボタン。カウントダウンもつけてみたよ 

こんにちは。坂内っす。

今日はUnityでこんな感じの事をしたい時の方法。



ちょうど今作ってるゲームで「スキルを使用するとクールダウン中はスキルが再使用できない」的なことを作ってたので、紹介です。

まずは、CanvasにImageを置き、Buttonコンポーネントもつけます。
Imageの「Image Type」をFilledにして、「Fill Method」うぃRadial360にしておきます。



ついでに、残り時間を表示するTextも置いておきました。

んで、コードはこちら。
(いつも通り汚いコードですがあしからず)

[Script20181203.cs]
using UnityEngine;
using UnityEngine.UI;

public class Script20181203 : MonoBehaviour {
[SerializeField]
GameObject objButton; // Image+Buttonのオブジェクトをアサイン
[SerializeField]
Text lblText; // 残り時間を表示するTextオブジェクトをアサイン

Image imgButton;
Button btnButton;

// 何秒でボタンが再アクティブになるか
const int COUNT = 10;
int countTime;

// ただのタイマー
float timer;

private void Awake() {
imgButton = objButton.GetComponent<Image>();
btnButton = objButton.GetComponent<Button>();
}

/// <summary>
/// ボタンを押した時の処理
/// </summary>
public void OnClickButton() {
countTime = COUNT;
}

private void Update() {
timer += Time.deltaTime;
// 毎秒処理
if(timer > 1f) {
timer = 0f;
if(countTime > 0) {
countTime--;
lblText.text = countTime.ToString();
imgButton.fillAmount = 1 - (float)countTime / (float)COUNT;
btnButton.interactable = false;
} else {
lblText.text = "";
btnButton.interactable = true;
}
}
}
}


①ボタンを押した時にcountTimeをセット。
②Updateで1秒に1回、以下の処理をする。
 countTimeが0じゃない限り-1をして、秒数を表示。
 とともに、ImageのfillAmountを指定。
 また、カウント中はボタンのinteractableをFalseにすることで、ボタンを押せないように制御
 
やっているのはこれだけです。

これをベースに色々といじると面白いボタンとか作れそうですね!

ってことで、今日はここまで!あでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0