先创建一个新的Unity工程。默认场景包含一个基于 (0, 1, -10) 、俯视Z轴的相机。为了获得和场景视图相机相似的视角,选择相机,然后从菜单中选择GameObject / Align View to Selected。
我们需要一个对象结构来代表时钟,从GameObject / Create Empty创建一个空游戏对象,命名为Clock。为它创建三个子对象,分别命名为Hours, Minutes,以及 Seconds,确保它们都在(0,0,0)位置。
我们用简单的方块来表示时钟的指针。通过GameObject / Create Other / Cube为每一个指针创建子cube。时针的位置是(0, 1, 0),大小(0.5, 2, 0.5)。分针的位置是(0, 1.5, 0) ,大小(0.25, 3, 0.25)。秒针的位置 (0, 2, 0) ,大小(0.1, 4, 0.1)。
using UnityEngine;
using System;
public class ClockAnimator : MonoBehaviour
{
/// <summary>
/// 各个指针度数
/// </summary>
private const float
hoursToDegrees = 360f / 12f,
minutesToDegrees = 360f / 60f,
secondsToDegrees = 360f / 60f;
public Transform hours, minutes, seconds;
/// <summary>
/// 是否持续转动
/// </summary>
public bool analog;
void Update()
{
if (analog)
{
//每帧都会返回。格式为:11:13:31.2692810
TimeSpan timespan = DateTime.Now.TimeOfDay;
//返回表示的小时数,乘上每个单位的读书即为旋转角度 因为UNITY使用左手坐标系,所以需要绕Z轴负半轴旋转
hours.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalHours * -hoursToDegrees);
minutes.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalMinutes * -minutesToDegrees);
seconds.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalSeconds * -secondsToDegrees);
}
else
{
//每秒返回一次。格式为:1/25/2016 11:12:25 AM
DateTime time = DateTime.Now;
hours.localRotation = Quaternion.Euler(0f, 0f, time.Hour * -hoursToDegrees);
minutes.localRotation = Quaternion.Euler(0f, 0f, time.Minute * -minutesToDegrees);
seconds.localRotation = Quaternion.Euler(0f, 0f, time.Second * -secondsToDegrees);
}
}
}