Unity項目 - 簡單時鍾 Clock


項目展示


Github項目地址:簡單時鍾 Clock

制作流程

表盤繪制:

采用Aseprite 像素繪圖軟件繪制表盤及指針。本例鍾表素材大小 256x256,存儲格式為png,但發現導入Unity后較為失真,建議256+像素或調整Unity內相關參數。

代碼配置:

設置表盤、指針到合適位置,創建Clock.cs腳本掛載於表盤,編寫代碼:

public class Clock : MonoBehaviour
{
    //接收三個指針
    public GameObject hourHand;
    public GameObject minuteHand;
    public GameObject secondHand;

    //小時、分鍾、秒鍾
    private int h;
    private int m;
    private int s;

    void Update()
    {
        //讀取本地時間
        GetNowTime();

        //更新針軸旋轉:
        //Quaternion.AngleAxis(angle : float, axis : Vector3):繞 axis軸旋轉 angle角度,創建一個旋轉
        //其中繞 axis軸方向:左手拇指指向axis方向,四指所環繞的方向(類似左手螺旋定則)
        hourHand.transform.rotation = Quaternion.AngleAxis((30 * h + 0.5f * m + (30.0f / 3600.0f) * s), Vector3.back);
        minuteHand.transform.rotation = Quaternion.AngleAxis((6 * m + 0.1f * s), Vector3.back);
        secondHand.transform.rotation = Quaternion.AngleAxis((6 * s), Vector3.back);
    }

    //讀取本地時間信息
    private void GetNowTime()
    {
        //例如本地時間為 10:23:12
        h = DateTime.Now.Hour;        //h = 10
        m = DateTime.Now.Minute;    //m = 23
        s = DateTime.Now.Second;    //s = 12
    }
}

問題探討

  • Quaternion.AngleAxis (angle : float, axis : Vector3):以自身原點為基點,創建返回一個繞axis軸旋轉了angle角度旋轉的四元數
  • transform.Rotate(eulerAngles : Vector3):以自身原點為基點,應用一個歐拉角的旋轉角度,eulerAngles.z度圍繞z軸,eulerAngles.x度圍繞x軸,eulerAngles.y度圍繞y軸。常用於物體簡單旋轉

Unity中,Transform.rotation是四元數(Quaternion),但Unity以歐拉角(Vector3)的形式表示。因此,當我們打算像position賦值那樣給rotation直接賦值時,需要賦予Quaternion類型的值(例如rotation.eulerAngles = new Vector3(90, 0, 0);)。本例采用的AngleAxis方法就是如此,其創建返回了一個新的已經旋轉到目標角度的四元數,我們用物體的rotation接收這個新的四元數即可實現鍾表旋轉,本質為修改rotation。而Rotation方法則是普通常用較為安全的繞某方向旋轉的函數,便於設置旋轉速度等,可用於人物控制旋轉、賽車游戲轉向等等,本質為旋轉

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM