最近工作实在是太忙了,没办法认真写博客,但是还是要好好记录下日常的学习。

需求

各类游戏中都大量运用到计时功能,不管是直接显示的在前端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 游戏计时功能实现的更多相关文章

  1. 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

    游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...

  2. unity3d 计时功能舒爽解决方案

    上次也写了一篇计时功能的博客 今天这篇文章和上次的文章实现思路不一样,结果一样 上篇文章地址:http://www.cnblogs.com/shenggege/p/4251123.html 思路决定一 ...

  3. 将Unity3D游戏移植到Android平台上

    将Unity3D游戏移植到Android平台是一件很容易的事情,只需要在File->Build Settings中选择Android平台,然后点击Switch Platform并Build出ap ...

  4. Unity3D游戏UI开发经验谈

    原地址:http://news.9ria.com/2013/0629/27679.html 在Unity专场上,108km创始人梁伟国发表了<Unity3D游戏UI开发经验谈>主题演讲.他 ...

  5. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  6. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  7. [Unity3D]Unity3D游戏开发之跑酷游戏项目解说

    大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...

  8. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  9. [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

    大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3 ...

随机推荐

  1. Solr5.0源码分析-SolrDispatchFilter

    年初,公司开发法律行业的搜索引擎.当时,我作为整个系统的核心成员,选择solr,并在solr根据我们的要求做了相应的二次开发.但是,对solr的还没有进行认真仔细的研究.最近,事情比较清闲,翻翻sol ...

  2. HDU 4045 Machine scheduling (组合数学-斯特林数,组合数学-排列组合)

    Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. JRE与JDK的区别

    转自:http://swiftlet.net/archives/639 1. 定义JRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者. ...

  4. powerdesigner设置表主键列为自动增长

    powerdesigner 版本12.5 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties ———>columens ,双击 ...

  5. hyperv 创建第二代虚拟机

    环境:宿主机windows 8.1,虚拟机:windows 8.1 硬件:笔记本电脑,无线网络,没有有线网络网络配置先不设置 1.安装hyperv,控制面版-->程序和功能-->启用或关闭 ...

  6. ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容

    首先是主页面main.aspx <body style="background-color: #AFEEEE"> <form id="form1&quo ...

  7. Linux vagrant+virtualbox环境搭建步骤

    Linux vagrant+virtualbox环境搭建步骤 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用. 我们可 ...

  8. DimDate populate data

    日期维度 任何一个数据仓库都应该有一个日期维度. 因为很少有不需要通过日期维度看数据的情况存在. 日期维度的好处是,你可以通过他连接各个事实表,然后在报表端传送报表参数的时候, 直接自动过滤日期维度的 ...

  9. socket通信入门

    以一个基本的python程序为例解释 源代码如下: #!/usr/bin/env python  #指出代码用什么程序去运行它.首先会到env设置里查找python的安装路径,再调用对应路径下的解释器 ...

  10. TYVJ1288 飘飘乎居士取能量块 -SilverN

    描述   9月21日,今天是pink的生日,飘飘乎居士当然要去别人的领土大闹一番啦!  为了收集更多的能量到pink家大闹,飘飘乎居士准备从后花园中取出自己多年积攒的p个能量块.后花园一共被划分n个地 ...