您好,登錄后才能下訂單哦!
本篇內容介紹了“基于Unity3D如何實現仿真時鐘”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
新建一個Image,命名為Image_Clock(名字隨意),作為時針和分針的父節點,設置寬高為512:
在Image_Clock節點下新建Image_Hour和Image_Minute,設置寬高為512:
在它們的節點下分別新建一個Image,設置適合的寬高,位置放到表盤中心:
新建腳本命名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如何實現仿真時鐘”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。