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

需求

各类游戏中都大量运用到计时功能,不管是直接显示的在前端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. 通过java来批量生成身份证号

    通过java来批量生成身份证号,方便来测试程序. package com.diyvc.controller.user; import java.util.Calendar; import java.u ...

  2. 数据结构--AC自动机--hdu 2896

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. js控制iframe跳转

    网页:<iframe src="" id="iframe_a" name="iframe_a" style="width:1 ...

  4. R语言画图布局摆放(layout)

    require(ggplot2) require(Cairo) require(grid) p = ggplot(iris,aes(x = Species,y = Sepal.Length,colou ...

  5. Windows8下PhoneGap 4 + Android Studio 1.0 + VS2013配置指南

    1.准备工作 安装JDK1.6+,设置环境变量 JAVA_HOME C:\Program Files\Java\jdk1.5.0_07 CLASSPATH .;%JAVA_HOME%\lib Path ...

  6. C++ string的大小写转换

    将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这个方法.自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便.打个比方:早上起来想吃个汉堡,冰箱里 ...

  7. 编写JS代码的“use strict”严格模式及代码压缩知识

    Javascript的语法比较松散,大家对该门语言的印象可能是“简单”,我认为这恰恰相反.使用严格模式能防止你写出粗制滥造的语法代码来.应用了严格模式后尽管控制台报告的某些错误需要很大精力排除,但是从 ...

  8. BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】

    题意:求中互质的数的个数,其中. 分析:因为,所以,我们很容易知道如下结论    对于两个正整数和,如果是的倍数,那么中与互素的数的个数为      本结论是很好证明的,因为中与互素的个数为,又知道, ...

  9. AC日记—— codevs 1031 质数环(搜索)

    题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上 ...

  10. Hibernate Java、Hibernate、SQL 之间数据类型转换

    Hibernate映射类型 Java类型 标准SQL类型  integer  java.lang.Integer  integer  long  java.lang.Long  bigint  sho ...