Unityのスプライトを使ってアナログ時計を作った。
DateTime.Nowとtransform.eulerAnglesを使った。
時計の見た目を作る
画像の準備
左から時計の枠、時針、分針、秒針。
時刻は省略した。
Sprite Editorでスライス
Sprite Mode -> Single
をMultipleに変更。
Sprite Editorを開き、とりあえずAutoでスライスしたあと微調整。
Pivotはそれぞれ,
枠 -> Center
時針 -> 0.5,0.04
分針 -> Bottom
秒針 -> Bottom
編集が終わったらApply。
#シーンの編集
それぞれのスプライトをSceneに配置。
以下のスクリプトを追加して、何かしらのオブジェクトにアタッチする。
using System; // DateTimeに必要
using System.Collections;
using UnityEngine;
public class clockController : MonoBehaviour {
public bool sec; // 秒針の有無
public bool secTick; // 秒針を秒ごとに動かすか
public GameObject hour;
public GameObject minute;
public GameObject second;
void Start ()
{
if (!sec)
Destroy(second); // 秒針を消す
}
void Update ()
{
DateTime dt = DateTime.Now;
hour.transform.eulerAngles = new Vector3(0,0,(float)dt.Hour/12*-360 + (float)dt.Minute/60*-30);
minute.transform.eulerAngles = new Vector3(0,0,(float)dt.Minute/60*-360);
if (sec)
{
if (secTick)
second.transform.eulerAngles = new Vector3(0,0,(float)dt.Second/60*-360);
else
second.transform.eulerAngles = new Vector3(0,0,(float)dt.Second/60*-360 + (float)dt.Millisecond/60/1000*-360);
}
}
}
アタッチしたオブジェクトのInspectorに配置したスプライトをドラッグ&ドロップする。
再生したら現在時刻を表示してくれるはずです!
*2017/05/09 gif画像を追加
スクリプトの解説
時間の取得
現在時刻はPCやデバイスに依存する。
using system;を追加し
DateTime.Nowで現在時刻を取得できる。
詳細はDateTime.Now プロパティ (System) - MSDN - Microsoft
回転
transform.eulerAngles = new Vector3(x,y,z);
x,y,z は360で1回転。InspectorのRotationと同じ値。