Unity3D 游戏计时功能实现
最近工作实在是太忙了,没办法认真写博客,但是还是要好好记录下日常的学习。
需求
各类游戏中都大量运用到计时功能,不管是直接显示的在前端UI,还是后台运行。
思路
Unity中提供了Time类可以方便的进行时间上的获取,下面的例子中,我对其进行的简单的封装,能够方便的运用到各类型的游戏中。不少游戏中同时还提供了加速,暂停等等功能,unity中的TimeScale属性可以很方便的实现这些功能。
实现
计时的功能实现起来还是比较的方便。unity的Time.time能个距离游戏开始的时间,利用Mathf.FloorToInt方法取整,就等到了距离游戏开始多少秒,简单的写了两个时间转换的方法。
void OnGUI()
{
GUI.skin = clockGuiSkin;
NowTime = TimeFormatBase(Mathf.FloorToInt(Time.time));
GUI.Label(new Rect(screenWidth*0.8f, screenHeight*0.05f, 120f, 30f), NowTime); if(GUI.Button(new Rect(,,,),"暂停"))
{
Debug.Log("Stop");
Stop();
}
if (GUI.Button(new Rect(, , , ), "加速"))
{
timeScale = Mathf.Clamp(timeScale*,,); SetTimeScale(timeScale);
Debug.Log("Quick:" + timeScale);
}
}
Clock
tring TimeFormatBase(float nTotalTime)
{
string time = string.Empty;
float hour = Mathf.Floor(nTotalTime / );
float min = Mathf.Floor(nTotalTime % / );
float sec = nTotalTime % ;
if(hour >= && hour <)
time = string.Concat("",hour,":");
else
time = string.Concat(hour, ":"); if (min >= && min < )
time = string.Concat(time, "", min, ":");
else
time = string.Concat(time, min, ":"); if (sec >= && sec < )
time = string.Concat(time, "", sec);
else
time = string.Concat(time, sec);
return time;
}
TimeFormatBase
string TimeChineseFormat(float nTotalTime)
{
string time = string.Empty;
float day = Mathf.Floor(nTotalTime / );
float hour = Mathf.Floor(nTotalTime % / );
float min = Mathf.Floor(nTotalTime % / );
float sec = nTotalTime % ;
if (day > )
time = string.Concat(day, "天");
if(hour>)
time = string.Concat(time,hour, "时");
if(min>)
time = string.Concat(time,min, "分");
if(sec>)
time = string.Concat(time,sec, "秒");
return time;
}
TimeChineseFormat
总结
TImeScale方法改变速度的范围是0~100之间,超过这个范围会报错,所以使用的时候我直接使用了Mathf.Clamp对其进行了限制,防止越界。于此同时,Time.time方法只是记录了游戏运行开始的时间,日常游戏中我们所需要的是进入游戏后的时间,这里还需要进行下改进。有些游戏中还存在时间倒流的功能。TimeScale显然无法处理,如果只是当存的现实时间倒流,其实只要将取的时间变为负值即可,但是timescale方法同时会影响到诸如Update方法的运行,所以对于时间倒流的方法,有时间还是要研究看看,如果有知道的朋友,可以留言分享一下。
Unity3D 游戏计时功能实现的更多相关文章
- 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)
游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...
- unity3d 计时功能舒爽解决方案
上次也写了一篇计时功能的博客 今天这篇文章和上次的文章实现思路不一样,结果一样 上篇文章地址:http://www.cnblogs.com/shenggege/p/4251123.html 思路决定一 ...
- 将Unity3D游戏移植到Android平台上
将Unity3D游戏移植到Android平台是一件很容易的事情,只需要在File->Build Settings中选择Android平台,然后点击Switch Platform并Build出ap ...
- Unity3D游戏UI开发经验谈
原地址:http://news.9ria.com/2013/0629/27679.html 在Unity专场上,108km创始人梁伟国发表了<Unity3D游戏UI开发经验谈>主题演讲.他 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
- [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之跑酷游戏项目解说
大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果
大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3 ...
随机推荐
- 【log4net】配置
第一步在 AssemblyInfo 添加如下代码 第二步:在web.config添加如下代码: <log4net> <root> <level value=" ...
- JS高级程序设计2nd部分知识要点2
ECMAScript中所有函数的参数都是按值传递的. 5种基本数据类型: Undfined,Null,Boolean,Number,String. 当代码在一个环境中执行时,会创建变量对象的一个作用域 ...
- gdb调试常用命令
gdb 调试常用命令 gcc -g mian.c -o main.out -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 gdb main. ...
- uva 1572 self-assembly ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxQAAANxCAYAAAB9uv94AAAgAElEQVR4nOxdPW7tOpLWFrQGJb72vI ...
- 倍增法-lca codevs 1036 商务旅行
codevs 1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某首都城市的商人要经常到各城镇去做生意 ...
- 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数
1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...
- 实习小记-python 内置函数__eq__函数引发的探索
乱写__eq__会发生啥?请看代码.. >>> class A: ... def __eq__(self, other): # 不论发生什么,只要有==做比较,就返回True ... ...
- Update和LateUpdate的区别
LateUpdate晚于所有Update执行 在圣典里LateUpdate被解释成一句话:LateUpdate是在所有Update函数调用后被调用.这可用于调整脚本执行顺序. 当物体在Update里移 ...
- Android Studio系列教程六--Gradle多渠道打包
Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...
- Saltstack-进阶篇
查看minion端的文件内容 [root@linux-node2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 1 ...