基于Unity3D如何实现仿真时钟
短信预约 -IT技能 免费直播动态提醒
本篇内容介绍了“基于Unity3D如何实现仿真时钟”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
时钟小工具开发
1、搭建UI
新建一个Image,命名为Image_Clock(名字随意),作为时针和分针的父节点,设置宽高为512:
在Image_Clock节点下新建Image_Hour和Image_Minute,设置宽高为512:
在它们的节点下分别新建一个Image,设置适合的宽高,位置放到表盘中心:
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插件,所以需要导入插件。
将脚本附到Hiearchy视图的Image_Clock对象上,将时针和分针对象拖进去:
运行后结果:
“基于Unity3D如何实现仿真时钟”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341