LoginSignup
6
5

More than 5 years have passed since last update.

Unityでアナログ時計を動かしてみる。

Last updated at Posted at 2017-04-17

Unityのスプライトを使ってアナログ時計を作った。
DateTime.Nowとtransform.eulerAnglesを使った。

時計の見た目を作る

画像の準備

Gimpで適当に描いた。
clock.png

左から時計の枠、時針、分針、秒針。

時刻は省略した。

Sprite Editorでスライス

Sprite Mode -> Single
をMultipleに変更。

Sprite Editorを開き、とりあえずAutoでスライスしたあと微調整。
Pivotはそれぞれ,
枠 -> Center
時針 -> 0.5,0.04
分針 -> Bottom
秒針 -> Bottom

編集が終わったらApply。

シーンの編集

それぞれのスプライトをSceneに配置。

以下のスクリプトを追加して、何かしらのオブジェクトにアタッチする。

clockController.cs
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に配置したスプライトをドラッグ&ドロップする。

再生したら現在時刻を表示してくれるはずです!
capdelay.gif
*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と同じ値。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5