読者です 読者をやめる 読者になる 読者になる

developer_RYO’s blog

スマホアプリやPCゲーム、音楽やイラストを自由気ままに作っている人の技術ログです

Unityでのゲーム開発メモ 曲の演奏時間に対して進捗を表すプログレスバー

C# ゲーム開発 Unity

f:id:developer_RYO:20160102230346g:plain


gif画像にある通りの、プログレスバーを作成しました。
音ゲーの曲の進捗を表現するのに作成しましたが、ほかのゲームでも応用できそうなので、公開しておきます。

プログレスバーの作り方については、検索してみると他の方が記事にされていました。
Unityのリファレンスにもいくつかヒントが記載されています。
docs.unity3d.com

fillAmount Image.type が Image.Type.Filled に設定されている時に表示されている Image の数
fillMethod どの fill タイプのメソッドを使用するか
fillOrigin Fill プロセスの原点位置をコントロールします。各 fill メソッド毎に違う結果をもたらすことを意味します。

ここら辺をインスペクターでいじればプログレスバーは作成可能です。

■曲の長さについては、AudioClipの変数lengthで取得します。


画像オブジェクトにつけたスクリプト

//画面上部に表示するタイムゲージを表示します。
//曲の長さと、現在の経過時間より、パーセンテージを取得し、表示。
using UnityEngine;
using UnityEngine.UI;

public class BarTimer : MonoBehaviour
{
    //タイマーと、再生する曲を入れる。

    [SerializeField]
    private Timer timer;
    [SerializeField]
    private AudioClip music;

    private float musicLength;
    private Image image;

    void Start () {
        //曲の長さを取得
        musicLength = music.length;
        //画像を格納
        image = this.GetComponent<Image>();
    }

	// Update is called once per frame
	void Update () {
        //画像のFillAmountを更新し続ける。
        image.fillAmount = 1 - (timer.Now / musicLength);
    }
}

タイマーのスクリプト

//////////////////////////////////////////
//ゲームオブジェクトをタイマーにするスクリプトです。

using UnityEngine;

public class Timer : MonoBehaviour {

	/////////////////////////////////////////

	//タイマー
	private float timer;

	//タイマーを進めるかどうかを決める変数
	public bool timerRun = false;

	//タイマーをリセットする。
	public void ResetTimer(){timer = 0;}

	//タイマーを進める
	public void AddTimer(){timer +=  Time.deltaTime;}

	//プロパティで値を変えられるようにする。
	//変数をpublicにしないのは、インスペクター上で変えられないようにしたいから
	public float Now{get{return timer;}}

	///////////////////////////////////////
	//初期化
	void Start()
	{
		//タイマーの初期化
		timer = 0;
	}
	////////////////////////////////////////
	//アップデート
	void Update()
	{
		//タイマーを進めるかどうか
		if(timerRun == false) return;

		//タイマーを進める
		AddTimer();
	}
}