HIITトレーニング用のタイマーを自作する
2018年の抱負として体を鍛える事にしました。
効率のよい筋トレ方法を探した結果、HIITなるものを見つけました。
HIITとは
High Intensity Interval Training(高強度インターバルトレーニング)
の頭文字をとったもの。
例えばHIITで最も一般的なTABATAメソッドは
"20秒間高負荷な筋トレをして10秒休む"を8セット繰り返すトレーニングです。
8セットを
トレーニング時間はわずか4分ですが、脂肪燃焼効果はランニングの50分に相当するらしい・・・
ほんまかいな??
過去にお腹が6つに分かれる事を夢見て何度か筋トレにチャレンジしましたが、
バルクアップはできても脂肪は燃焼せず
AV男優みたいな体になるという結果しか得られませんでした。
そんなこともあり、今年の筋トレには脂肪燃焼効果が極めて高い(ほんまかいな?)HIITを採用。
早速インターバルトレーニング用のタイマーアプリを探しましたが
タイマーごときで有料だったり、
無料でも機能制限していたりと
ひどい世の中だぜという事で
勉強もかねてUnityで作ってみることにしました。
仕様はこんな感じ
-トレーニング時間が設定できる(デフォルト20秒)
-休憩時間が設定できる (デフォルト10秒)
-セット数を設定できる(デフォルト8回)
-セット間の休憩時間が設定できる(デフォルト60秒)
-タップするとタイマーが停止、再生する
-トレーニング<=>休憩遷移時にバイブが鳴る
-トレーニング内容を自分で設定できるモードがある
-トレーニング内容をランダムで決めてくれるモードがある
初めから全部の機能を盛り込むのは今の自分には難しいので
ひとまず以下の仕様で、ひな形となるプログラムを作ってみた。
-トレーニング中か休憩中かが表示される
-一定時間トレーニングでその後一定時間休憩
-トレーニング内容がランダムでセットされる
-次のトレーニング内容が表示される
単純な仕様だけど、実装するには結構な時間を要しました。
public class countTimer : MonoBehaviour { float counter = 0.0f; float dispCounter; int setNumOld = 0; int menuNum; bool isTraining = false; float trainTime = 10.0f; float restTime = 5.0f; int setNum = 0; bool oneTimeTraining = false; bool oneTimeRest = false; string[] state = {"Prepare","Training","Rest"}; string nowState; string[] nowTrain = {" "," "}; string[] menu = { "プッシュアップ", "ジャンピングランジ", "バーピージャンプ", "リバースプッシュアップ", "レッグレイズ", "ブリッジプッシュアップ", "スパイダーマンプッシュアップ", "スーパーマンエクステンション"}; // Use this for initialization void Start () { isTraining = true; for (int i = 0; i < 2; i++) { menuNum = Random.Range(0, menu.Length); nowTrain[i] = menu[menuNum]; } } // Update is called once per frame void Update () { counter += Time.deltaTime; dispCounter = (counter% (int)(trainTime + restTime)) % (int)trainTime; if ((counter % (int)(trainTime + restTime)) / (int)trainTime < 1) { isTraining = true; oneTimeRest = true; } else { isTraining = false; oneTimeTraining = true; } if (isTraining) { nowState = state[1]; if (oneTimeTraining) { menuNum = Random.Range(0, menu.Length); nowTrain[0] = nowTrain[1]; nowTrain[1] = menu[menuNum]; oneTimeTraining = false; } } else { nowState = state[2]; if (oneTimeRest) { nowTrain[0] = "Rest"; oneTimeRest = false; } } setNum = (int)counter / (int)(trainTime + restTime) + 1; GetComponent<Text>().text = nowState + "\n" + "Num: " + setNum.ToString() + "\n" + "Time: " + dispCounter.ToString("F2") + "\n" + "Now: " + nowTrain[0] + "\n" + "Next: " + nowTrain[1]; } }
ここから、シーンの変更とか
モード変更とか
時間の設定とか
おしゃれなUIとか
色々やることがある
作るの面倒なのでお金払おうかな・・・