基于Unity3D实现仿真时钟详解

 更新时间:2023年01月30日 16:58:44   作者:恬静的小魔龙  
这篇文章主要为大家详细介绍了如何利用Unity3D模拟实现一个简单是时钟效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、前言

今天实现一个时钟工具,其实在之前已经完成了一个简单的时钟工具:【Unity3D应用案例系列】时钟、钟表小组件开发

那么,今天的这个小工具跟之前的有啥区别呢?

之前的时钟,是模拟真实时间时针分针秒针的旋转,比如:

可以当个时钟看。

二、时钟小工具开发

今天实现一个可以设置旋转到指定的时间下的表盘,简单说就是时钟定时。

2-1、搭建UI

新建一个Image,命名为Image_Clock(名字随意),作为时针和分针的父节点,设置宽高为512:

在Image_Clock节点下新建Image_Hour和Image_Minute,设置宽高为512:

在它们的节点下分别新建一个Image,设置适合的宽高,位置放到表盘中心:

2-2、实现脚本

新建脚本命名SimClock.cs,双击打开脚本编辑代码:

using UnityEngine;
using System.Collections;
using System;
using UniRx;

public class SimClock : MonoBehaviour
{
    /// <summary>
    /// 时针
    /// </summary>
    [SerializeField]
    private Transform HourHands;

    /// <summary>
    /// 分针
    /// </summary>
    [SerializeField]
    private Transform MinuteHands;

    /// <summary>
    /// 时针的角度
    /// </summary>
    private Quaternion HourHandsAngle;

    /// <summary>
    /// 分针的角度
    /// </summary>
    private Quaternion MinuteHandsAngle;

    /// <summary>
    /// 是否初始化了
    /// </summary>
    private bool isInit = false;

    /// <summary>
    /// 是否停止了
    /// </summary>
    private bool isStopClock = true;

    /// <summary>
    /// 初始化
    /// </summary>
    private void Init()
    {
        HourHandsAngle = HourHands.rotation;
        MinuteHandsAngle = MinuteHands.rotation;
    }

    private void Start()
    {
        //设置分钟 和完成的秒数
        SetTime(300, 6, () => { Debug.Log("完成"); });
    }

    /// <summary>
    /// 恢复角度
    /// </summary>
    private void RecoverAngles()
    {
        HourHands.localEulerAngles = Vector3.zero;
        MinuteHands.localEulerAngles = Vector3.zero;
    }

    /// <summary>
    /// 设置时间
    /// </summary>
    /// <param name="minute">设置分钟数</param>
    /// <param name="seconds">完成秒数</param>
    /// <param name="onComplete">委托函数</param>
    public void SetTime(float minute, float seconds, Action onComplete)
    {
        if (isInit == false)
            Init();

        if (isStopClock == false) return;

        isStopClock = false;
        RecoverAngles();

        // 角度 = 分钟 / 60秒转动周数 * 360度
        float angles = minute / 60 * 360;
        // 转动的角度 = 角度 / 转动秒数 * 0.1秒转动的角度
        float interval = angles / seconds * 0.1f;
        float count = 0;
        IDisposable dispose = null;

        dispose = Observable.Interval(TimeSpan.FromSeconds(0.1f)).Subscribe(param => {
            MinuteHands.Rotate(Vector3.back, interval);
            HourHands.Rotate(Vector3.back, (interval / 360) * (360 / 12));
            count += interval;
            if (count >= angles)
            {
                isStopClock = true;
                onComplete();
                dispose.Dispose();
            }
        });
    }
}

注意:因为脚本用到了UniRx插件,所以需要导入插件,在文章开始提到的资源包中已经有插件了。当然,也可以去https://github.com/neuecc/UniRx/releases下载,然后导入到项目中。

将脚本附到Hiearchy视图的Image_Clock对象上,将时针和分针对象拖进去:

运行后结果:

以上就是基于Unity3D实现仿真时钟详解的详细内容,更多关于Unity3D时钟的资料请关注脚本之家其它相关文章!

相关文章

  • C# 命名空间(Namespace)相关知识总结

    C# 命名空间(Namespace)相关知识总结

    这篇文章主要介绍了C# 命名空间(Namespace)的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以参考下
    2020-06-06
  • .Net Core以windows服务方式部署

    .Net Core以windows服务方式部署

    这篇文章介绍了.Net Core以windows服务方式部署,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • C#多线程系列之线程通知

    C#多线程系列之线程通知

    本文详细讲解了C#多线程中的线程通知,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#实现封装常用Redis工具类的示例代码

    C#实现封装常用Redis工具类的示例代码

    这篇文章主要为大家详细介绍了C#实现封装常用Redis工具类的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • c# 服务器上传木马监控代码(包含可疑文件)

    c# 服务器上传木马监控代码(包含可疑文件)

    c# 监控服务器上传木马(包含可疑文件)
    2010-05-05
  • Unity制作游戏自定义按键详解

    Unity制作游戏自定义按键详解

    这篇文章主要介绍了在Unity中如何实现游戏自定义按键,文中的示例代码讲解详细,对我们学习Unity有一定帮助,感兴趣的可以跟随小编学习一下
    2022-01-01
  • C#使用iTextSharp从PDF文档获取内容的方法

    C#使用iTextSharp从PDF文档获取内容的方法

    这篇文章主要介绍了C#使用iTextSharp从PDF文档获取内容的方法,涉及C#基于iTextSharp操作pdf文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#中ListView控件实现窗体代码

    C#中ListView控件实现窗体代码

    这篇文章主要介绍了C#中ListView控件实现窗体的核心代码,非常不错,具有参考借鉴价值,对c#listview相关知识感兴趣的朋友一起学习吧
    2016-08-08
  • C#编写控制台程序纸牌游戏

    C#编写控制台程序纸牌游戏

    这篇文章主要为大家详细介绍了C#编写控制台程序纸牌游戏,适合C#初学者,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • C#常用的命名规则汇总

    C#常用的命名规则汇总

    这篇文章主要介绍了C#常用的命名规则,较为详细的汇总了包括类、变量、方法、属性等的命名规则,具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-11-11

最新评论