[Unityでふつうのアプリを作ろう]ラーメンタイマー編

2020/10/16に公開

個人開発者の大波です。こんにちは!
寒くなってきたので、近頃はビールからウィスキーに移行しました。

さて、今回はUnityでラーメンタイマーを作ってみたので、その成果を共有しようと思います。
ソースコードはこちらです。

Min3Timer

今までUnityはほとんど触ったことがなかったので、入門書を一冊読んでそこからガッツで頑張りました^^

こんな感じのタイマーができました

ホントに普通のタイマーです。

最近のカップラーメンは5分かかるものや1分でよいものもあるので、タイマー設定を三種類から選べるようにしたのがこだわりです。

タイマーを開始すると、PauseボタンとStopボタンが表示されます。
今、書いていて思ったけれど、ラーメンタイマーだったら、Pauseってほとんど使わないんじゃないか><

どのように作ったか

Scripts配下のクラスたちはこんな構成にしました。

ラーメンタイマーのScripts

1) タイマー処理そのものを担当するクラス

AppTimerというスクリプトを用意してそこにコアとなるタイマー処理を一任しました。
今回、1番の収穫はJavascriptのSetTimerみたいな機能がC#にもあるんですということが分かった点でした。

https://github.com/z-ohnami/Min3Timer/blob/main/Assets/Scripts/AppTimer.cs#L29

timer.Elapsed += (System.Object source, ElapsedEventArgs e) => {
    elapsed += 1;
    StopIfNeeded();
};

シングルトンパターンで他のインスタンスから一意に参照するようにしています。

https://github.com/z-ohnami/Min3Timer/blob/main/Assets/Scripts/AppTimer.cs#L7

public static AppTimer GetInstance()
{
if (appTimer == null)
{
    appTimer = new AppTimer();
    return appTimer;
}
return appTimer;
}

AppTimerのインスタンスを呼び出すときはこんな感じでOK。

appTimer = AppTimer.GetInstance();

2) オブジェクトの表示を制御するクラス

ボタンやテキストなど、様々なUIを展開させていくわけですが、タイマーの状態に応じて表示制御をしていく必要があります。

各クラスごとにタイマーの状態から判断して表示制御をする、のもマイクロプラグラムっぽくてよいのですが、表示/非表示のパターンが同じものが多いので、表示制御を担当する「ObjectController」というクラスを用意しました。

そこに必要なUI部品をガシガシ紐つけていって、タイマーの状態に応じて表示の切り替えをするようにしています。
たとえば、タイマーを開始したら、StopボタンとPauseボタンを表示してStartボタンは表示させない、みたいなことをしています。

ObjectController

作っているものがゲームではないので、ObjectControllerという名前にしました。
多分、ゲームだったらGameObjectControllerみたいな名前にしたかもしれないですね。

3) その他 各UIを紐つけるクラス

残りのクラスはボタンやらテキストやらごとに用意して、それぞれ適当に紐付けをしているっている感じです。

しかし、Toggleなんかは複数設定しているので、もう少し効率の良いやり方だったり定番のやり方がありそうな印象です。

次回

今度はアニメーションか、データを永続化する方法を学んでいきたいと思っています。

近頃は、クロスプラットフォームでアプリを作るとなるとFlutterがお盛んな印象ですが、僕はUnityで作ってみるのも面白いんじゃないかと思っていて、Unity自体は実績がたくさんある開発環境だし、ゲーム以外のアプリだって作ってみていいんじゃないかと思っている次第です。

ここまで読んでいただき、ありがとうございました!
面白い、と思った方はいいね!やTwitterフォローをお願いします^^

Twitter

Discussion