今回は時計を作ったよ。時刻はパソコンのシステム時間からとりました。
朝のテレビの左上に出てくるやつみたいなイメージです。最近はテレビを持ってない方が増えてる気がしますが、子連れの家族はさすがにテレビ持ってるんでしょうかね。
ちなみに、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を切り替えて鳴らせるようにしていきます。一番ややこしめんどくさそう。
全体の流れと現在地はこれだ!
- BGM鳴らす
- ボタンを押すとBGMが鳴ったり止まったりするようにする
- ボタンを押すと複数のBGMを切り替えられるようにする
- 時間を表示できるようにする(今回)
- 時間によってBGMを切り替えて鳴らせるようにする(次回はここ)
- 時間によって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
タブのあるビュー……。
なるほど、なぜ私はいままでビューにあるタブにばかり気を取られていたのだろう。今後はタブのあるビューを見ていく所存です。ん?タブのないビューもあるのか?まあ……なんでもいいか……
