網站首頁 編程語言 正文
一、前言
今天實現一個時鐘工具,其實在之前已經完成了一個簡單的時鐘工具:【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對象上,將時針和分針對象拖進去:
運行后結果:
原文鏈接:https://blog.csdn.net/q764424567/article/details/128797083
相關推薦
- 2022-06-21 使用Apache?Hudi?加速傳統的批處理模式的方法_Linux
- 2022-12-08 Matlab實現獲取文件夾下所有指定后綴的文件_C 語言
- 2022-06-20 C語言超全面define預處理指令的使用說明_C 語言
- 2022-08-18 詳解如何從Matlab中導出清晰的結果圖片_C 語言
- 2022-03-05 Android中CountDownTimer類詳解_Android
- 2023-03-29 Python之二維正態分布采樣置信橢圓繪制_python
- 2022-07-17 C++深入講解namespace與string關鍵字的使用_C 語言
- 2023-01-12 解決Python報錯:SyntaxError:?invalid?character?‘,‘?(U+F
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支