作业需求
使用套件档案、事前作业
点击下载 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 日












