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

unity study

Unityでサクッとモックを作れるようになることを目指して、基本的なテクニックを抑えていく過程を残すブログのつもりだったけど、今はただ自分のトラブルシューティングメモになってるブログ

数値をカウントアップする処理

数値をカウントアップしながらプレゼンテーションする、というのはよくある。
条件として下記の通り。
・一定時間ごとに特定の値ずつ増える。
・最大でもn秒でカウントアップ処理が終わってほしい。
・カウントアップする最小値を指定したい。
・カウントアップする値は、全体としてn秒に収まるように調整する。

var after = 9999;
var before = 111;
// 足し込む最小単位
var addMin = 10;
// 最小時間
var minSec = 0.1f;
// 最大所要時間
var maxSec = 5.0f;
// 所要時間
var revise = Mathf.Max(addMin, after - before);
var time = Mathf.Min(maxSec, revise / addMin * minSec);
// 1回あたりの足し込み量
var add = (long)System.Math.Floor(revise / (time / minSec));
Debug.Log("カウントアップ処理 " + before + " から " + after + " まで, " + minSec + " 秒間隔で " + time + " 秒かけて " + add + " ずつ増やしていく");

var cnt = 0;
Observable.Interval(TimeSpan.FromSeconds(minSec))
	.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(time)))
	.Subscribe(_ => {
		before = Math.Min(after, before + add * cnt++);
		Debug.Log(before);
	}, () => {
		// 端数の場合を考慮し、ストリーム終了時に最終値を出力
		Debug.Log(after);
	});

微妙にちょっとおかしいかも。

【追記】
もうちょい直した。

数値をカウントアップさせる時によくやる処理