【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟

2024-06-17 10:52

本文主要是介绍【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请添加图片描述

      • 前言
  • 【Unity实战篇】| 快速制作一个时钟,包括2D和3D时钟
    • 一、2D时钟制作
      • 1.1 钟表盘制作
      • 1.2 指针制作
      • 1.3 钟表搭建
      • 1.4 设置时钟的中心点
      • 1.5 时钟旋转逻辑
    • 二、3D时钟制作
      • 2.1 搭建表盘和指针
      • 2.2 调整指针的位置和节点
      • 2.3 时钟旋转逻辑
  • 总结

请添加图片描述


前言

  • 时钟 这个东西想必不用多说,应该没有小伙伴不知道吧。
  • 本篇文章来写一下怎样使用Unity引擎快速制作一个时钟,包括2D和3D时钟。
  • 废话不多说,下面一起来看下具体做法是怎样的吧!

【Unity实战篇】| 快速制作一个时钟,包括2D和3D时钟

请添加图片描述

请添加图片描述


一、2D时钟制作

1.1 钟表盘制作

2D时钟制作时首先需要找一张背景图作为钟表盘,例如下面这种,找一张切图备用。

在这里插入图片描述

将切图放到Unity工程中,将图片类型Texture Type改为Sprite,就可以放到UI中的Image组件使用了。
在这里插入图片描述

如果想自己制作一张也很简单,找一张圆形图,然后按自己的喜欢添加一下代表时间的周边环纹即可。

1.2 指针制作

最基础的钟表中一般都包含时针、分针、秒针这三个指针,可以找一下相关的指针切图使用,也可以使用Unity直接制作三个指针。

新建三个Image组件,然后调整一下长宽就可以用了。
在这里插入图片描述

1.3 钟表搭建

新建一个游戏对象,在下面新建四个节点,分别用于钟表盘、时针、分钟、秒针,并按合适的位置进行摆放。

如下图所示:
在这里插入图片描述

1.4 设置时钟的中心点

有一个关键点需要注意,三个指针的 Pivot中心点 需要调整到表盘的最中心处,不然旋转起来之后就会乱七八糟,各转个的了。
在这里插入图片描述

这样设置之后再旋转的时候才会围绕表盘中心进行旋转,符合钟表的旋转逻辑。

1.5 时钟旋转逻辑

钟表是一个圆,转一圈需要360°,换算成时、分、秒的结果就是:

  • 时针 每小时旋转的角度= 360f / 12
  • 分针 每分钟旋转的角度 = 360f / 60
  • 秒针 每秒旋转的角度 = 360f / 60

所以只需要获取当前的具体时间,拿到小时数、分钟数及秒数,并将时针、分针及秒针分别旋转指定的角度即可完成钟表的功能逻辑。

通过Unity的API 可以拿到当前时间,包括当前的小时数、分钟数以及秒数。:DateTime.NowDateTime.Now.TimeOfDay

打印结果如下:
在这里插入图片描述

DateTime.Now可以获取当前的时间,不过返回的时间是整数型,只能实现秒针按秒进行跳动,不能平滑的旋转。而DateTime.Now.TimeOfDay可以获取精度更高的时间,实现秒针更平滑的旋转效果。

随后调用Unity让物体旋转的API Quaternion.Euler(Vector3 v3)将旋转的角度传进去即可实现效果。

完整代码如下:

using System;
using UnityEngine;public class ClockTest : MonoBehaviour
{public Transform hourTrans;public Transform minuteTrans;public Transform secondTrans;//是否平滑旋转public bool isContinuous;private const float hoursToDegrees = 360f / 12f;//时针每小时旋转的角度private const float minutesToDegrees = 360f / 60f;//分针每分钟旋转的角度private const float secondsToDegrees = 360f / 60f;//秒针每秒旋转的角度void Update(){if (isContinuous){TimeSpan timespan = DateTime.Now.TimeOfDay;//拿到当前的时、分、秒后,将时针、分针、秒针分别旋转指定的角度hourTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalHours * -hoursToDegrees);minuteTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalMinutes * -minutesToDegrees);secondTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalSeconds * -secondsToDegrees);}else{DateTime time = DateTime.Now;hourTrans.localRotation = Quaternion.Euler(0f, 0f, time.Hour * -hoursToDegrees);minuteTrans.localRotation = Quaternion.Euler(0f, 0f, time.Minute * -minutesToDegrees);secondTrans.localRotation = Quaternion.Euler(0f, 0f, time.Second * -secondsToDegrees);}}
}

将脚本挂载到场景中,并将时/分/秒三个对象拖到脚本中,通过控制isContinuous可以实现是否使用平滑旋转的效果。
在这里插入图片描述

实现效果如下:
请添加图片描述


二、3D时钟制作

3D时钟的旋转逻辑与2D时钟一致,只不过表盘及指针换成3D效果展示,下面来快速演示一下实现的过程。

2.1 搭建表盘和指针

在场景中创建一个Capsule圆柱体,调整大小做成钟表的表盘,接着创建一些Cube调整大小做成表盘上的刻度,最后创建三个Cube立方体,调整长宽高做成指针。
在这里插入图片描述

2.2 调整指针的位置和节点

指针的位置和节点非常重要,如果调节的不正确,则指针就无法按照正常的钟表逻辑进行旋转。

这里调整的方法有多种,来展示一下本文使用到的一种方式。

新建三个游戏对象 h、m、s作为时分秒针的父节点,将这三个游戏对象放置到表盘的中心点。

接着将前面制作好的时分秒三个指针对象各自放置到这三个节点下,并调好位置,如下图所示:
在这里插入图片描述

2.3 时钟旋转逻辑

时钟旋转的逻辑与前面UI时钟的逻辑一致,将脚本挂载到场景中,将时分秒三个游戏对象拖到脚本中即可。
在这里插入图片描述

using System;
using UnityEngine;public class ClockTest : MonoBehaviour
{public Transform hourTrans;public Transform minuteTrans;public Transform secondTrans;public bool isContinuous;private const float hoursToDegrees = 360f / 12f;//时针每小时旋转的角度private const float minutesToDegrees = 360f / 60f;//分针每分钟旋转的角度private const float secondsToDegrees = 360f / 60f;//秒针每秒旋转的角度void Update(){if (isContinuous){TimeSpan timespan = DateTime.Now.TimeOfDay;//拿到当前的时、分、秒后,将时针、分针、秒针分别旋转指定的角度hourTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalHours * -hoursToDegrees);minuteTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalMinutes * -minutesToDegrees);secondTrans.localRotation = Quaternion.Euler(0f, 0f, (float)timespan.TotalSeconds * -secondsToDegrees);}else{DateTime time = DateTime.Now;hourTrans.localRotation = Quaternion.Euler(0f, 0f, time.Hour * -hoursToDegrees);minuteTrans.localRotation = Quaternion.Euler(0f, 0f, time.Minute * -minutesToDegrees);secondTrans.localRotation = Quaternion.Euler(0f, 0f, time.Second * -secondsToDegrees);}}
}

演示效果如下:

请添加图片描述


总结

  • 本文介绍了怎样使用Unity制作一个简易时钟,包括2D和3D时钟的制作。
  • 制作的功能点在于如何让指针按正确的逻辑旋转,以及如何拿到当前的时间。
  • 功能比较简单,适合新手练习,可以优化UI和3D对象,尝试制作出更精美的时钟效果!

  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创 🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述请添加图片描述请添加图片描述

请添加图片描述

资料白嫖,技术互助

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

在这里插入图片描述

这篇关于【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069241

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室