最近发现『Catlike系列教程』觉得内容真的很赞,感觉有很多地方涉及到了我的知识盲点,如果真的可以照着做下来一遍的话应该收获颇丰。因为教程很长所以逐字翻译不太可能了(主要是翻译的太差)。基本上就是把实现的思路记录下来最后甩一个 「Github Repo」这样就可以了。理论上来说第一篇比较简单,感兴趣的同学可以移步「原文链接

PART 1 概述

实现一个钟表的话我们的目标就是

  • 用一个拍扁的圆柱体制作表盘,用立方体制作刻度和时针分针,用一个细长的圆柱体制作秒针
  • 写点 c# 脚本使其显示为当前时间
  • 加点动画让指针平滑运动

PART 2 制作场景

大家都是 Unity 熟手了所以具体制作流程就不讲了,博主自己也没仔细看就按照自己想法做了一个差不多的,具体思路就是多设一个层级然后父节点只旋转就可以把指针转到相应的位置而不需要同时调整 Rotation 和 Position。如果不是很懂的话可以回到「原文地址」里面有更详细的做法,或者到我的「Github Repo」下载下来看看。

PART 3 写脚本控制指针

首先建立一个新的 MonoBehaviour 脚本比如说 ClockController.cs 之类的,把时针分针秒针的 Transform 的引用拖到脚本里,然后开始设置各个指针的位置。

那么众所周知表盘的360度被分割成12块所以每一块也就是每个小时占据了 360 / 12 = 30 度。同理每分钟占据了 360 / 60 = 6 度,每秒钟也是。那么直观来说就是这样写。

void Update()
{
_hourArm.localEulerAngles = new Vector3(0, DateTime.Now.Hour * 30, 0);
_minuteArm.localEulerAngles = new Vector3(0, DateTime.Now.Minute * 6, 0);
_secondArm.localEulerAngles = new Vector3(0, DateTime.Now.Second * 6, 0);
}

然而运行一下会发现时针和分针都是笔直的指向其所在的时间。。如下图所示

好吧现在刚好七点钟貌似看不出来,总之就是需要在比如 6:30 的时候时针应该指向 6 和 7 之间。所以这个度数需要再加上一点偏移,变成下面这样。

void Update()
{
var hour = DateTime.Now.Hour;
var minute = DateTime.Now.Minute;
var second = DateTime.Now.Second;
var milisecond = DateTime.Now.Millisecond;
_hourArm.localEulerAngles = new Vector3(0, hour * 30 + minute / 60f * 30f, 0);
_minuteArm.localEulerAngles = new Vector3(0, minute * 6 + second / 60f * 6f, 0);
_secondArm.localEulerAngles = new Vector3(0, second * 6 + milisecond / 1000f * 6f, 0);
}

就可以轻松实现文章里的各种平滑移动之类的~

PART 4 总结

没有完全按照「原文」中的写法来写好像这样会更简洁一点,然后大家应该也会更容易理解,不过作者的主要用意可能是想展示 coroutine 之类的吧不管那些了~总之大家可以进入「Github Repo」查看全部代码和运行 Demo。


原文链接:https://snatix.com/2018/06/06/019-gameobject-and-scripts//

本文由 sNatic 发布于『大喵的新窝』 转载请保留本申明

最新文章

  1. 理解AX InventTrans的几种状态
  2. [No00002B]知乎精选:如果兔子都在拼命奔跑,乌龟该如何前进
  3. flume-ng配置文档简单说明
  4. 银行IT入门深似海
  5. Android--ViewPager的无限轮播
  6. 解决Flash和html在多标签浏览器中互访问题
  7. 最受欢迎的5个Android ORM框架
  8. android 更新实现自己主动
  9. shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
  10. java基础笔记(9)----集合之list集合
  11. 如何在 Linux 上复制文件/文件夹到远程系统?
  12. 顺序栈代码实现&&stack库
  13. Spring Boot + Spring Cloud 构建微服务系统(九):配置中心(Spring Cloud Config)
  14. Struts局部异常与全局异常处理
  15. sencha touch 在新版谷歌浏览器中painted事件无法触发解决方案以及carousel 控件、togglefield控件、滚动条失效
  16. OPC and .NET
  17. Git简介【转】
  18. tomcat+nginx+redis集群搭建并解决session共享问题。
  19. [Todo] Java及C++ Exception整理
  20. xml html xhtml html5

热门文章

  1. Windows 2012桌面显示“我的电脑”
  2. Android之间传递数据包
  3. Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
  4. 乘风破浪:LeetCode真题_038_Count and Say
  5. 自己写的开源MVC-easyMVC分享
  6. 死磕nginx系列--配置文档解读
  7. js 对于jquery each 多层循环的问题和原生js多层循环问题
  8. JS获取客户端公网IP和IP地址
  9. 树莓派学习笔记(3):利用VNC远程控制树莓派
  10. 配置Docker镜像加速器