中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Unity3D如何實現仿真時鐘

發布時間:2023-02-01 09:55:15 來源:億速云 閱讀:122 作者:iii 欄目:開發技術

本篇內容介紹了“基于Unity3D如何實現仿真時鐘”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

時鐘小工具開發

1、搭建UI

新建一個Image,命名為Image_Clock(名字隨意),作為時針和分針的父節點,設置寬高為512:

基于Unity3D如何實現仿真時鐘

在Image_Clock節點下新建Image_Hour和Image_Minute,設置寬高為512:

基于Unity3D如何實現仿真時鐘

在它們的節點下分別新建一個Image,設置適合的寬高,位置放到表盤中心:

基于Unity3D如何實現仿真時鐘

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如何實現仿真時鐘

運行后結果:

基于Unity3D如何實現仿真時鐘

“基于Unity3D如何實現仿真時鐘”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛多县| 尚义县| 灌阳县| 古丈县| 中山市| 库尔勒市| 通海县| 潜江市| 厦门市| 温泉县| 宣汉县| 阳城县| 赤水市| 麦盖提县| 宜兴市| 师宗县| 竹北市| 安泽县| 台州市| 莒南县| 洪江市| 六盘水市| 巴楚县| 巴塘县| 江孜县| 宾阳县| 清远市| 山西省| 洛川县| 祁阳县| 赞皇县| 偃师市| 崇信县| 隆回县| 博客| 云阳县| 宁城县| 平南县| 华亭县| 沛县| 炎陵县|