ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【Unity】コピペでできる。アラーム機能の作り方

目次

 

はじめに

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のフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。