Unityでのゲーム開発メモ 曲の演奏時間に対して進捗を表すプログレスバー
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(); } }