项目展示



Github项目地址:简单时钟 Clock

制作流程

表盘绘制:

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

代码配置:

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

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

问题探讨

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

参考

Unity项目 - 简单时钟 Clock的更多相关文章

  1. Unity学习笔记(二)——第一个Unity项目Hello Unity

    保留版权,转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9318811 在这一篇文章里,参照宣雨松的<Unity 3D游戏开发& ...

  2. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  3. 关于 Unity 项目中的 Mono 堆内存泄露

    关于 Unity 项目中的 Mono 堆内存泄露 题记:这是补一篇应该在将近一年前就应该写的记录,今天终于补上. 内存泄露是一个老话题了,之前我专门写过一篇 排查 Lua 虚拟机内存泄露 的文章,并且 ...

  4. Unity项目 - MissionDemolition 愤怒的小鸟核心机制

    目录 游戏原型 项目演示 绘图资源 代码实现 注意事项 技术探讨 参考来源 游戏原型 爆破任务 MissionDemolition 是一款核心机制类似于愤怒的小鸟的游戏,玩家将用弹弓发射炮弹,摧毁城堡 ...

  5. Unity实现简单的对象池

    一.简介 先说说为什么要使用对象池 在Unity游戏运行时,经常需要生成一些物体,例如子弹.敌人等.虽然Unity中有Instantiate()方法可以使用,但是在某些情况下并不高效.特别是对于那些需 ...

  6. 为Unity项目生成文档(二)

    Unity项目生成文档 接着上篇文章:为Unity项目生成文档(一) .Net项目可在VS配置XML 我们可以在VS中通过配置来生成xml文件,但是unity的project,就算同样配置了xml文档 ...

  7. unity项目实现“再按一次退出程序”提示功能

    unity项目,再按一次退出程序,按第一次做提示,再按一次,程序退出. float _waitTime = 2f;//前后两次按退出间隔时间 void OnGUI() { ) { GUI.Label( ...

  8. 关于Unity项目中创建项目遇到的一些问题

    1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...

  9. 使用Slua框架开发Unity项目的重要步骤

    下载与安装 下载地址 GitHub 安装过程1.下载最新版,这里, 解压缩,将Assets目录里的所有内容复制到你的工程中,对于最终产品,可以删除slua_src,例子,文档等内容,如果是开发阶段则无 ...

随机推荐

  1. struct iphdr

    struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:, version:; #elif defined (__BIG_ENDIA ...

  2. sublime 添加到右键菜单

  3. 通过Zabbix监控Tomcat单机多实例

    前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...

  4. rust结构体

    //Rust 并不允许只将某个字段标记为可变 struct User { email: String, name:String, age:i32, sex:String, active:bool, } ...

  5. 《Hadoop综合大作业》

    作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 我主要的爬取内容是关于热门微博文章“996”与日剧<我要 ...

  6. JAVA学习网站分享

    好久没用博客园了 最近工作不忙了,可以花时间自己学习知识提升自己,所以开始查找各种资料 java资源查找网站:           http://www.java1234.com/ 前端学习网站:  ...

  7. idea docker docker-compose发布springboot站点到tomcat

    允许docker被远程访问 见:https://www.cnblogs.com/wintersoft/p/10921396.html 教程:https://spring.io/guides/gs/sp ...

  8. PhpStorm 头部注释、类注释和函数注释的设置(稍微完善点)

    首先,PhpStorm中文件.类.函数等注释的设置在:setting->Editor->FIle and Code Template->Includes下设置即可,其中方法的默认是这 ...

  9. python实现读取并显示图片的两种方法

    https://www.cnblogs.com/lantingg/p/9259840.html 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片. ...

  10. Xamarin图表开发基础教程(7)OxyPlot框架

    Xamarin图表开发基础教程(7)OxyPlot框架 Xamarin.Forms中使用OxyPlot框架 在Xamarin. Forms平台上实现图表显示需要完成以下的步骤: 1.添加OxyPlot ...