現在時刻を表示したよ | Unity

今回は時計を作ったよ。時刻はパソコンのシステム時間からとりました。
朝のテレビの左上に出てくるやつみたいなイメージです。最近はテレビを持ってない方が増えてる気がしますが、子連れの家族はさすがにテレビ持ってるんでしょうかね。

ちなみに、9時~10時はこの音楽が流れる、9時~10時はこの音楽が流れる、みたいな音楽時計てきなやつを作っていまして、前回は複数曲をボタンで送れるようにしました。ここから時計を追加作成するので、プロジェクト開始時点とは異なる状態から始まってる感じです。

時間を表示するテキストオブジェクトを作る

ヒエラルキーのCanvasを右クリック→UI>Text – TextMeshPro をクリック、オブジェクト名をClockTextに変更。
できたら、ClockTextが表示される場所を変更します。ClockTextを選択した状態でインスペクターのRect Transformを確認。左上にあるなんか基準点みたいな四角いやつをクリックして、左上基準に設定。X座標を125、Y座標を-50にします。

こんな感じで、New Textが表示されます。

システム時間を取得・表示するスクリプトを書く

前回までScriptsフォルダを作らなかったので、フォルダから作りました。
プロジェクトのAssetsフォルダを右クリックして、作成→新規フォルダ→フォルダ名をScriptsに変更。
Scriptsフォルダ内で右クリックして、作成→MonoBehaviourScriptをクリックし、新規ファイルができたら名前を確定せず即座にClockに変更し、エンターキーなどで確定します。
間違って途中で確定しちゃったらMonoBehaviourScript作成からやり直すのがいいらしい。しらんけど

これでOK。

(先日作ったBgmControllerがSoundsフォルダにいらしたので、こいつもこの後ついでにScriptsフォルダに移動しておきました。)

できたらClockをひらいて、中身を書いていきます。

using System;
using System.Collections;
using TMPro;
using UnityEngine;

public class Clock : MonoBehaviour
{
    [SerializeField] private TextMeshProUGUI timeText;
    private DateTime now;

    void Start()
    {
        if (!timeText) timeText = GetComponent<TextMeshProUGUI>(); // コンポーネント取得
        StartCoroutine(UpdateClock());  // UpdateClock開始
    }

    IEnumerator UpdateClock()
    {
        while (true)
        {
            now = DateTime.Now;                     // 現在時刻取得
            timeText.text = now.ToString("HH:mm");  // 表示を更新
            yield return new WaitForSeconds(1f);    // 1秒待機してもっかい
        }
    }

}

書けたらちゃんと上書き保存。

スクリプトとテキストオブジェクトを紐づけ(アタッチ)

ClockTextオブジェクトとClockスクリプトを紐づけします。この紐づけの作業のことなんて言えばいいの?アタッチ?たぶん、アタッチします。
ヒエラルキーでClockTextを選択した状態で、インスペクターの一番下にあるAdd Compornentをクリックして、Clockを検索&クリックします。

ヒエラルキーにClockが追加されているので、この中のTimeTextの枠にClockTextオブジェクトをドラッグ&ドロップします。

これで設定はOK。
シーンビューにはNew Textと表示されたままですが、ゲーム再生ボタンを押すと現在時刻が表示されます。(画像はゲームビューだけど)

わーい!できた!


でもこれサムネにしたら時間のところ見切れそうじゃないか?
……

やっぱ真ん中にしました。なんか再生時間みたいで気になるが……まあ……いいや……いつかいい感じになるでしょう

今回はここまで

次回は時間によってBGMを切り替えて鳴らせるようにしていきます。一番ややこしめんどくさそう。

全体の流れと現在地はこれだ!

  1. BGM鳴らす
  2. ボタンを押すとBGMが鳴ったり止まったりするようにする
  3. ボタンを押すと複数のBGMを切り替えられるようにする
  4. 時間を表示できるようにする(今回)
  5. 時間によってBGMを切り替えて鳴らせるようにする(次回はここ)
  6. 時間によってBGMを鳴らす機能のオンオフができるようにする

そういえば

今まで、ヒエラルキーのことはヒエラルキータブ、インスペクターのことはインスペクタータブと呼んでいたんだけど、よく考えるとシーンはシーンタブじゃなくてシーンビューと呼んでたかも。

じゃあ、ヒエラルキーもヒエラルキータブじゃなくてヒエラルキービューなのかな?そもそも私がシーンビューとかゲームビューとか言ってるのはどこ由来なんだ……?でもどうみてもタブついてるし、タブでいいのか……教えてUnityさん!

ビューのタブをドラッグして、ビューの Layout をカスタマイズできます。既存のウィンドウの Tab Area にタブをドロップすると、既存のタブの脇にタブが追加されます。また、Dock Zone にタブをドロップすることで、新しいウィンドウにビューを追加します。

https://docs.unity3d.com/ja/2022.3/Manual/CustomizingYourWorkspace.html

ビューのタブ……。

タブのあるビューで作業している場合は常に、「アクティブ」なタブ (フォーカスのあるタブ) の上に薄い青色のストライプが表示されます。

https://docs.unity3d.com/ja/2022.3/Manual/CustomizingYourWorkspace.html

タブのあるビュー……。

なるほど、なぜ私はいままでビューにあるタブにばかり気を取られていたのだろう。今後はタブのあるビューを見ていく所存です。ん?タブのないビューもあるのか?まあ……なんでもいいか……

 

  • 0
  • 0
  • 0

きやけ

いろんなものをちょっとずつかじって、結局よくわからない人です。ときどきなにかをつくります。

作者のページを見る

寄付について

「novalue」は、‟一人ひとりが自分らしく働ける社会”の実現を目指す、
就労継続支援B型事業所manabyCREATORSが運営するWebメディアです。

当メディアの運営は、活動に賛同してくださる寄付者様の協賛によって成り立っており、
広告記事の掲載先をお探しの企業様や寄付者様を随時、募集しております。

寄付についてのご案内