最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Unity3D實(shí)現(xiàn)仿真時(shí)鐘詳解

 更新時(shí)間:2023年01月30日 16:58:44   作者:恬靜的小魔龍  
這篇文章主要為大家詳細(xì)介紹了如何利用Unity3D模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單是時(shí)鐘效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、前言

今天實(shí)現(xiàn)一個(gè)時(shí)鐘工具,其實(shí)在之前已經(jīng)完成了一個(gè)簡(jiǎn)單的時(shí)鐘工具:【Unity3D應(yīng)用案例系列】時(shí)鐘、鐘表小組件開發(fā)。

那么,今天的這個(gè)小工具跟之前的有啥區(qū)別呢?

之前的時(shí)鐘,是模擬真實(shí)時(shí)間時(shí)針分針秒針的旋轉(zhuǎn),比如:

可以當(dāng)個(gè)時(shí)鐘看。

二、時(shí)鐘小工具開發(fā)

今天實(shí)現(xiàn)一個(gè)可以設(shè)置旋轉(zhuǎn)到指定的時(shí)間下的表盤,簡(jiǎn)單說就是時(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è)置適合的寬高,位置放到表盤中心:

2-2、實(shí)現(xiàn)腳本

新建腳本命名SimClock.cs,雙擊打開腳本編輯代碼:

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)入插件,在文章開始提到的資源包中已經(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é)果:

以上就是基于Unity3D實(shí)現(xiàn)仿真時(shí)鐘詳解的詳細(xì)內(nèi)容,更多關(guān)于Unity3D時(shí)鐘的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# 命名空間(Namespace)相關(guān)知識(shí)總結(jié)

    C# 命名空間(Namespace)相關(guān)知識(shí)總結(jié)

    這篇文章主要介紹了C# 命名空間(Namespace)的相關(guān)知識(shí),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06
  • .Net?Core以windows服務(wù)方式部署

    .Net?Core以windows服務(wù)方式部署

    這篇文章介紹了.Net?Core以windows服務(wù)方式部署,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#多線程系列之線程通知

    C#多線程系列之線程通知

    本文詳細(xì)講解了C#多線程中的線程通知,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C#實(shí)現(xiàn)封裝常用Redis工具類的示例代碼

    C#實(shí)現(xiàn)封裝常用Redis工具類的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)封裝常用Redis工具類的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • c# 服務(wù)器上傳木馬監(jiān)控代碼(包含可疑文件)

    c# 服務(wù)器上傳木馬監(jiān)控代碼(包含可疑文件)

    c# 監(jiān)控服務(wù)器上傳木馬(包含可疑文件)
    2010-05-05
  • Unity制作游戲自定義按鍵詳解

    Unity制作游戲自定義按鍵詳解

    這篇文章主要介紹了在Unity中如何實(shí)現(xiàn)游戲自定義按鍵,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Unity有一定幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-01-01
  • C#使用iTextSharp從PDF文檔獲取內(nèi)容的方法

    C#使用iTextSharp從PDF文檔獲取內(nèi)容的方法

    這篇文章主要介紹了C#使用iTextSharp從PDF文檔獲取內(nèi)容的方法,涉及C#基于iTextSharp操作pdf文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#中ListView控件實(shí)現(xiàn)窗體代碼

    C#中ListView控件實(shí)現(xiàn)窗體代碼

    這篇文章主要介紹了C#中ListView控件實(shí)現(xiàn)窗體的核心代碼,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)c#listview相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C#編寫控制臺(tái)程序紙牌游戲

    C#編寫控制臺(tái)程序紙牌游戲

    這篇文章主要為大家詳細(xì)介紹了C#編寫控制臺(tái)程序紙牌游戲,適合C#初學(xué)者,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C#常用的命名規(guī)則匯總

    C#常用的命名規(guī)則匯總

    這篇文章主要介紹了C#常用的命名規(guī)則,較為詳細(xì)的匯總了包括類、變量、方法、屬性等的命名規(guī)則,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

壤塘县| 关岭| 彩票| 新源县| 即墨市| 河池市| 监利县| 容城县| 休宁县| 安阳市| 唐海县| 灵璧县| 阿城市| 阜南县| 公主岭市| 奈曼旗| 黔东| 香港 | 彰化市| 闵行区| 阿巴嘎旗| 青铜峡市| 南涧| 东兰县| 永春县| 博兴县| 丰都县| 金华市| 渝中区| 五华县| 都匀市| 黑山县| 达州市| 东港市| 瑞昌市| 宣威市| 深州市| 遂平县| 满洲里市| 黎城县| 广饶县|