網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、前言
今天實(shí)現(xiàn)一個(gè)時(shí)鐘工具,其實(shí)在之前已經(jīng)完成了一個(gè)簡(jiǎn)單的時(shí)鐘工具:【Unity3D應(yīng)用案例系列】時(shí)鐘、鐘表小組件開(kāi)發(fā)。
那么,今天的這個(gè)小工具跟之前的有啥區(qū)別呢?
之前的時(shí)鐘,是模擬真實(shí)時(shí)間時(shí)針?lè)轴樏脶樀男D(zhuǎn),比如:
可以當(dāng)個(gè)時(shí)鐘看。
二、時(shí)鐘小工具開(kāi)發(fā)
今天實(shí)現(xiàn)一個(gè)可以設(shè)置旋轉(zhuǎn)到指定的時(shí)間下的表盤(pán),簡(jiǎn)單說(shuō)就是時(shí)鐘定時(shí)。
2-1、搭建UI
新建一個(gè)Image,命名為Image_Clock(名字隨意),作為時(shí)針和分針的父節(jié)點(diǎn),設(shè)置寬高為512:
在Image_Clock節(jié)點(diǎn)下新建Image_Hour和Image_Minute,設(shè)置寬高為512:
在它們的節(jié)點(diǎn)下分別新建一個(gè)Image,設(shè)置適合的寬高,位置放到表盤(pán)中心:
2-2、實(shí)現(xiàn)腳本
新建腳本命名SimClock.cs,雙擊打開(kāi)腳本編輯代碼:
using UnityEngine;
using System.Collections;
using System;
using UniRx;
public class SimClock : MonoBehaviour
{
/// <summary>
/// 時(shí)針
/// </summary>
[SerializeField]
private Transform HourHands;
/// <summary>
/// 分針
/// </summary>
[SerializeField]
private Transform MinuteHands;
/// <summary>
/// 時(shí)針的角度
/// </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()
{
//設(shè)置分鐘 和完成的秒數(shù)
SetTime(300, 6, () => { Debug.Log("完成"); });
}
/// <summary>
/// 恢復(fù)角度
/// </summary>
private void RecoverAngles()
{
HourHands.localEulerAngles = Vector3.zero;
MinuteHands.localEulerAngles = Vector3.zero;
}
/// <summary>
/// 設(shè)置時(shí)間
/// </summary>
/// <param name="minute">設(shè)置分鐘數(shù)</param>
/// <param name="seconds">完成秒數(shù)</param>
/// <param name="onComplete">委托函數(shù)</param>
public void SetTime(float minute, float seconds, Action onComplete)
{
if (isInit == false)
Init();
if (isStopClock == false) return;
isStopClock = false;
RecoverAngles();
// 角度 = 分鐘 / 60秒轉(zhuǎn)動(dòng)周數(shù) * 360度
float angles = minute / 60 * 360;
// 轉(zhuǎn)動(dòng)的角度 = 角度 / 轉(zhuǎn)動(dòng)秒數(shù) * 0.1秒轉(zhuǎn)動(dòng)的角度
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();
}
});
}
}
注意:因?yàn)槟_本用到了UniRx插件,所以需要導(dǎo)入插件,在文章開(kāi)始提到的資源包中已經(jīng)有插件了。當(dāng)然,也可以去https://github.com/neuecc/UniRx/releases下載,然后導(dǎo)入到項(xiàng)目中。
將腳本附到Hiearchy視圖的Image_Clock對(duì)象上,將時(shí)針和分針對(duì)象拖進(jìn)去:
運(yùn)行后結(jié)果:
原文鏈接:https://blog.csdn.net/q764424567/article/details/128797083
相關(guān)推薦
- 2022-05-24 調(diào)用無(wú)文檔說(shuō)明的?Web?API過(guò)程描述_相關(guān)技巧
- 2022-09-13 C++中的偽隨機(jī)數(shù)_C 語(yǔ)言
- 2022-06-20 Go語(yǔ)言實(shí)現(xiàn)切片增刪改查的示例代碼_Golang
- 2022-06-08 自定義Dubbo反序列化
- 2023-04-03 Input系統(tǒng)截?cái)嗖呗缘姆治雠c應(yīng)用詳解_Android
- 2022-08-19 python中的函數(shù)嵌套和嵌套調(diào)用_python
- 2022-04-25 淺談Golang?Slice切片如何擴(kuò)容的實(shí)現(xiàn)_Golang
- 2022-10-01 Docker部署單頁(yè)應(yīng)用的詳細(xì)操作_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支