項目展示
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方法則是普通常用較為安全的繞某方向旋轉的函數,便於設置旋轉速度等,可用於人物控制旋轉、賽車游戲轉向等等,本質為旋轉