当前位置:   article > 正文

Unity项目 - 简单时钟 Clock

unity时钟素材

项目展示

1688704-20190707185502830-227795879.jpg
Github项目地址:简单时钟 Clock

制作流程

表盘绘制:

采用Aseprite 像素绘图软件绘制表盘及指针。本例钟表素材大小 256x256,存储格式为png,但发现导入Unity后较为失真,建议256+像素或调整Unity内相关参数。

代码配置:

设置表盘、指针到合适位置,创建Clock.cs脚本挂载于表盘,编写代码:

  1. public class Clock : MonoBehaviour
  2. {
  3. //接收三个指针
  4. public GameObject hourHand;
  5. public GameObject minuteHand;
  6. public GameObject secondHand;
  7. //小时、分钟、秒钟
  8. private int h;
  9. private int m;
  10. private int s;
  11. void Update()
  12. {
  13. //读取本地时间
  14. GetNowTime();
  15. //更新针轴旋转:
  16. //Quaternion.AngleAxis(angle : float, axis : Vector3):绕 axis轴旋转 angle角度,创建一个旋转
  17. //其中绕 axis轴方向:左手拇指指向axis方向,四指所环绕的方向(类似左手螺旋定则)
  18. hourHand.transform.rotation = Quaternion.AngleAxis((30 * h + 0.5f * m + (30.0f / 3600.0f) * s), Vector3.back);
  19. minuteHand.transform.rotation = Quaternion.AngleAxis((6 * m + 0.1f * s), Vector3.back);
  20. secondHand.transform.rotation = Quaternion.AngleAxis((6 * s), Vector3.back);
  21. }
  22. //读取本地时间信息
  23. private void GetNowTime()
  24. {
  25. //例如本地时间为 10:23:12
  26. h = DateTime.Now.Hour; //h = 10
  27. m = DateTime.Now.Minute; //m = 23
  28. s = DateTime.Now.Second; //s = 12
  29. }
  30. }

问题探讨

  • 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方法则是普通常用较为安全的绕某方向旋转的函数,便于设置旋转速度等,可用于人物控制旋转、赛车游戏转向等等,本质为旋转

参考

转载于:https://www.cnblogs.com/SouthBegonia/p/11147401.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/123725
推荐阅读
相关标签
  

闽ICP备14008679号