作業需求
使用套件檔案、事前作業
點擊下載 clock.unitypackage
使用 Unity 版本:2019.3.7f1
※點擊圖片可以放大
※腳本名稱都可以隨個人喜好修改
(0) (1) 基本時鐘加上 Find 參考物件
開啟一個新專案 (3D專案)

選擇「資源」→「匯入套件」→「自訂套件」
選擇文章開頭下載的「clock.unitypackage」

使用預設勾選項,按下「匯入」
選擇「Assets」→「Clock」→「Prefabs」
底下的「Clock.prefab」拖曳到階層視窗

再來對著我們剛剛拖曳進去的 Clock.prefab 按下右鍵
選擇「拆解 prefab」

接著對「Clcok」這個物件設定屬性
設定完成,按著 Alt 鍵可以拖拉看看效果

至此,物件設定結束,再來新增腳本的部分
下方資源瀏覽器按下右鍵「建立」→「資料夾」

輸入名稱「Scripts」用以存放腳本檔案
進入資料夾內,按下右鍵「建立」→「C# 腳本」命名為 「Clock」
點兩下 Clock 檔案,進入 Visual Studio 編輯腳本
首先,先在開頭處將以下程式片段加入
using System;
將以下程式片段新增至 Start() 與 Update() 外
private const float hourstode = 360f / 12f, minutetode = 360f / 60f, secondtode = 360f / 60f; private Transform hours, minutes, seconds; public bool analog;
請將以下程式片段新增至 void Start() 內
hours = GameObject.Find("HourHand").transform;
minutes = GameObject.Find("MinuteHand").transform;
seconds = GameObject.Find("SecondHand").transform;
請將以下程式片段新增至 void Update() 內
if (analog)
{
TimeSpan timespan = DateTime.Now.TimeOfDay;
hours.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalHours * hourstode);
minutes.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalMinutes * minutetode);
seconds.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalSeconds * secondtode);
}
else
{
DateTime time = DateTime.Now;
hours.localRotation = Quaternion.Euler(0f, 0f, time.Hour * hourstode);
minutes.localRotation = Quaternion.Euler(0f, 0f, time.Minute * minutetode);
seconds.localRotation = Quaternion.Euler(0f, 0f, time.Second * secondtode);
}

編輯完成後按下 Ctrl + S 儲存腳本檔案
(2) 加入腳本讓時鐘印出距離最近的物件
一樣在 Scripts 資料夾裡面新增一個 C# 腳本,名稱「Near」
點擊兩下進入 Visual Studio 編輯他
請將以下程式片段新增至 void Start() 內
float closestDistance = Mathf.Infinity;
GameObject closestGameObject = null;
GameObject[] allObjects = (GameObject[])GameObject.FindSceneObjectsOfType(typeof(GameObject));
foreach (GameObject g in allObjects)
{
if (g.name != name)
{
float distance = (g.transform.position - transform.position).sqrMagnitude;
if (distance < closestDistance)
{
closestDistance = distance;
closestGameObject = g;
}
}
}
Debug.Log($"最靠近的物件是: {closestGameObject}, 距離是: {closestDistance}");

編輯完成後按下 Ctrl + S 儲存腳本檔案
(3) 透過滑鼠移動來上下左右觀看時鐘
一樣在 Scripts 資料夾裡面新增一個 C# 腳本,名稱「MouseLook」
點擊兩下進入 Visual Studio 編輯他
將以下程式片段新增至 Start() 與 Update() 外
public enum RotationAxes { MouseXANDY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXANDY;
public float sensitivityHor = 9.0f;
public float sensitivityVert = 9.0f;
public float minVert = -45.0f;
public float maxVert = 45.0f;
private float _rotationX = 0;
請將以下程式片段新增至 void Start() 內
Rigidbody body = GetComponent<Rigidbody>(); if (body != null) body.freezeRotation = true;
請將以下程式片段新增至 void Update() 內
if (axes == RotationAxes.MouseX)
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
else if (axes == RotationAxes.MouseY)
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, minVert, maxVert);
float rotationY = transform.localEulerAngles.y;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
else
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, minVert, maxVert);
float delta = Input.GetAxis("Mouse X") * sensitivityHor;
float rotationY = transform.localEulerAngles.y - delta;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
編輯完成後按下 Ctrl + S 儲存腳本檔案
將「Clock」「Near」「MouseLook」三個腳本拖曳至「Clock」物件上

作業完成,看看效果吧!

Latest posts by SHXJ (see all)
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日












