您的位置:首页 > 移动开发 > Unity3D

【Unity开发】实现简易时钟效果

2016-01-25 11:14 816 查看
先创建一个新的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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: