目次
はじめに
Unityを使ったアラーム機能の実装例です。
読みやすさ重視で書いているのであしからず。
解説
<処理内容>
ユーザーが設定した時間データをDateTimeに変換して現在時刻と比較するシンプルな作りです。
①以下のスクリプトAlarmFunctionをコピペしてください。
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;public class AlarmFunction : MonoBehaviour
{
[Header("セット時間表示用のTextを設定")]
[SerializeField]
private Text alarmText;[Header("ユーザー入力用のInputFieldを設定")]
[SerializeField]
private InputField yearinputField;
[SerializeField]
private InputField monthinputField;
[SerializeField]
private InputField dayinputField;
[SerializeField]
private InputField hourinputField;
[SerializeField]
private InputField minuteinputField;[Header("アラームをセットするボタンを設定")]
[SerializeField]
private Button setButton;
[Header("アラームを停止するボタンを設定")]
[SerializeField]
private Button stopButton;[Header("アラームの音源を設定")]
[SerializeField]
private AudioClip alarmSound;
[Header("アラームの再生対象を設定")]
[SerializeField]
private AudioSource audioSource;[Header("時刻確認間隔(値が小さいと高負荷)")]
[SerializeField, Range(0.01f, 1f)]
private float checkInterval=0.5f;private DateTime alarmtime;
private int year,month,hour,day,minute;
private string convertString;
private void Init() //初期化
{
//イベントディスパッチャの登録
yearinputField.onValueChanged.AddListener(ChangeYearText);
monthinputField.onValueChanged.AddListener(ChangeMonthText);
dayinputField.onValueChanged.AddListener(ChangeDayText);
hourinputField.onValueChanged.AddListener(ChangeHourText);
minuteinputField.onValueChanged.AddListener(ChangeMinuteText);
setButton.onClick.AddListener(SetAlarmOnClick);
stopButton.onClick.AddListener(StopAlarmOnClick);
//音源の設定
audioSource.clip = alarmSound;
}
void Start()
{
Init();
}
public void SetAlarmOnClick()
{
//入力からDataTimeの作成
convertString= year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + "00";
alarmtime = DateTime.Parse(convertString);
//設定された時刻の表示
alarmText.text = convertString;
//チェック用コルーチン実行
StartCoroutine("CheckTime");
}
private IEnumerator CheckTime()
{
while (true)
{
//現在時刻が設定時間以上なら抜ける
yield return new WaitForSeconds(checkInterval);
if (DateTime.Now >= alarmtime)
{
audioSource.Play();
yield break;
}
}}
public void StopAlarmOnClick()
{
audioSource.Stop();
}
public void ChangeYearText(string text)
{
year = int.Parse(text);
}
public void ChangeMonthText(string text)
{
month = int.Parse(text);
}
public void ChangeDayText(string text)
{
day = int.Parse(text);
}
public void ChangeHourText(string text)
{
hour = int.Parse(text);
}
public void ChangeMinuteText(string text)
{
minute = int.Parse(text);
}
}
②空のオブジェクトに作成したスクリプトをアタッチしてください。
③UIを作成して1つのText5つのInputFieldと2つのButtonを用意して名前とデザインを設定します。
④インスペクターに作成したUI項目を設定します。
⑤オーディオ周りの用意
AudioSourceコンポーネント追加してPlayOnAwakeのチェックをはずします。音量も調整しておきましょう。
適当に音源を用意してClipに登録しておきましょう。
インスペクターに登録しておきましょう。
⑥Intervalの設定
ジャストな時間に再生してほしいときはIntervalを小さくすると良いですが負荷がかかります。だいたいでいい場合は大きくしてください。
今回は0.5秒おきに確認するようにします。
実行してアラームをセットしてみましょう。
指定の時間に設定した音源が流れたら完成です。
※音量に注意してくださいね!
最後に
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。