1. 如何让一个物体按照指定点进行旋转?
我们都知道transform.localRotation只能绕着中心点进行旋转。
方法一:采用Transform.RotateAround
方法旋转
方法二:为这个物体添加一个父对象,通过旋转父对象来旋转子物体。下面的代码采用的这种方式
2. 如何平滑的旋转呢?
直接在Update进行旋转即可。只要知道每分钟旋转多少度,每小时旋转多少度,每秒旋转多少度。
通过DateTime.Now.DayOfTime
拿到一个时间搓,然后得到总小时数、总分钟数、总秒数,都乘以度数即可。
3. 这个案例我们学到了什么?可以使用这些知识点做什么?
通过添加父物体的方式改变原本物体的轴心点
通过DateTime可以拿到当前的时间。能不能使用这个Api去优化之前的时间系统呢?
using System;
using UnityEngine;
namespace DY._01_创建一个时钟
{
public class Markers : MonoBehaviour
{
public Transform markerParent;
public GameObject markerPrefab;
public float distance;
[Header("时、分、秒")] public GameObject[] hand;
private const float HoursToDegrees = 30f;
private const float MinutesToDegrees = 6f;
private const float SecondsToDegrees = 6f;
private void Start()
{
Vector3 dir = Vector3.up * distance;
// Instantiate(markerParent, )
for (var i = 1; i <= 12; i++)
{
Instantiate(markerPrefab, transform.position + dir, Quaternion.Euler((i-1)*30,0,0), markerParent);
dir = Quaternion.AngleAxis(30, i * Vector3.right) * dir;
}
}
private void Update()
{
// 获得当天的时间
TimeSpan dateTime = DateTime.Now.TimeOfDay;
hand[0].transform.localRotation = Quaternion.Euler(HoursToDegrees * (float)dateTime.TotalHours, 0, 0);
hand[1].transform.localRotation = Quaternion.Euler(MinutesToDegrees * (float)dateTime.TotalMinutes, 0, 0);
hand[2].transform.localRotation = Quaternion.Euler(SecondsToDegrees * (float)dateTime.TotalSeconds, 0, 0);
}
}
}
评论区