Unity3D 计时器的实现代码(三种写法总结)

1、每帧检查

定义一个时间变量 timer,每帧将此时间减去帧间隔时间 Time.deltaTime,如果小于或者等于零,说明定时器到了,执行相应功能代码,将此定时器重置,代码如下:

public float timer = 1.0f;
// Update is called once per frame
void Update() {
    timer -= Time.deltaTime;
    if (timer <= 0) {
        Debug.Log(string.Format("Timer1 is up !!! time=${0}", Time.time));
        timer = 1.0f;
    }
}

2、利用协程

在协程中返回需要等待的时间,直接看代码便明白:

// Use this for initialization
void Start() {
    StartCoroutine(Timer());
}
IEnumerator Timer() {
    while (true) {
        yield return new WaitForSeconds(1.0f);
        Debug.Log(string.Format("Timer2 is up !!! time=${0}", Time.time));
    }
}

3、延迟调用

使用 MonoBehaviour.Invoke,两个参数,分别是要调用的方法名和延时调用的时间。代码如下:

// Use this for initialization
void Start() {
    Invoke("Timer", 1.0f);
}
void Timer() {
    Debug.Log(string.Format("Timer3 is up !!! time=${0}", Time.time));
    Invoke("Timer", 1.0f);
}

补充:unity3D 实现一个时分秒的计时器:格式为00:00:00

简单粗暴,上代码。

public class Clock : MonoBehaviour {
    public Text m_ClockText;
    private float m_Timer;
    private int m_Hour;//时
    private int m_Minute;//分
    private int m_Second;//秒
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
        m_Timer += Time.deltaTime;
        m_Second = (int)m_Timer;
        if (m_Second > 59.0f)
        {
            m_Second = (int)(m_Timer - (m_Minute * 60));
        }
        m_Minute = (int)(m_Timer / 60);
        if (m_Minute > 59.0f)
        {
            m_Minute = (int)(m_Minute - (m_Hour * 60));
        }
        m_Hour = m_Minute / 60;
        if (m_Hour >= 24.0f)
        {
            m_Timer = 0;
        }
        m_ClockText.text = string.Format("{0:d2}:{1:d2}:{2:d2}", m_Hour,m_Minute,m_Second);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Unity3D运行报DllNotFoundException错误的解决方案

    起因 unity程序build到pc上,拿到其他人的机器上结果有些功能不正常,看log里面大概是 Fallback handler could not load library: xxx.dll DllNotFoundException: xxx.dll 初看以为是缺失dll,但是实际上并不是这样,首先在很多人机器上都是没有问题的,只在极少数机器上才出现异常,另外报错的dll都是有的,并不存在缺失的问题. 后来网上搜了一下,看到http://answers.unity3d.com/questio

  • Unity3D启动外部程序并传递参数的实现

    之前开发项目,一直都使用的是外壳程序加子程序的模式,通过外壳程序去启动子程序,外壳程序和子程序之间的通信,是使用配置文件完成的. 我总觉得这样通信很麻烦,因为外壳程序需要对配置文件进行更改和写入,然后子程序又要读取信息.而且整合的时候,会导致有很多配置文件,而且需要对路径做很多处理和限制. 我发现Process.Start()函数中,是可以传递参数的. 也就是说,我们是可以在使用Process.Start()函数启动外部程序时,传递参数的进行通信的. 具体操作如下: public void St

  • Unity3d 使用Gizmos画一个圆圈

    Gizmos是场景视图里的一个可视化调试工具. 在做项目过程中.我们常常会用到它,比如:绘制一条射线等. Unity3D 4.2版本号截至.眼下仅仅提供了绘制射线,线段,网格球体,实体球体,网格立方体,实体立方体,图标.GUI纹理,以及摄像机线框. 假设须要绘制一个圆环还须要自己写代码 using UnityEngine; using System; public class HeGizmosCircle : MonoBehaviour { public Transform m_Transfor

  • Unity3D UI Text得分数字增加的实例代码

    Unity3D UGUI Text得分数字增加 代码 一.首先在Hierarchy中创建Text,并绑定脚本. using UnityEngine; using System.Collections; using UnityEngine.UI; **//导入资源库** public class Score : MonoBehaviour { public static Text txt; **//定义静态变量名以用于其他脚本内的引用** public static float x = 0; vo

  • Unity3D实现模型随机切割

    本文实例为大家分享了Unity3D实现模型随机切割的具体代码,供大家参考,具体内容如下 模型切割的效果图如下: 我们都知道,模型是由一个个小三角形面组成的,因此我们不妨将问题简化,先实现个小目标,完成单个三角形的切割,甚至继续细分成求一条线段与某个平面的交点. 三角形与切割平面的位置关系主要有以下三种: 1. 三角形与切割平面有两个交点,一个交点在顶点上,一个交点在边上.这时,原有的三角形将被分成两个三角形,分别为013.042. 2. 三角形与切割平面有两个交点,两个交点都在边上.这时,原有的

  • Unity3d 如何更改Button的背景色

    我就废话不多说了,大家还是直接看代码吧~ using UnityEngine; using System.Collections; public class ButtonStyle : MonoBehaviour { public Color _color;//在编辑环境下选择背景色,透明度不能为0 public Texture2D tex; void OnGUI(){GUI.Button(new Rect(0,0,100,100),"tex");Color oldColor = GU

  • Unity3d使用FairyGUI 自定义字体的操作

    最近ui同学使用了一种新字体(锐字锐线怒放黑简) 发现全部切成图片字体 吓死我了 unity3d和fairygui搭配使用字体过程 1.第一步肯定是找美术同学拿他们找来的字体 由于fairygui编辑器用的字体是访问操作系统的字体 所以拿到新字体直接双击安装吧(或者放入操作系统盘内的Windows/Fonts)如下图 2.在fairygui里加个文本 选择字体 就能找到我们添加的字体了 3.接着把字体拷贝到unity3d工程下 存放在Resource\Font(没有可以自己建文件夹)注意这边命名

  • Unity3D 单例模式和静态类的使用详解

    Unity3D的API提供了很多的功能,但是很多流程还是会自己去封装一下去.当然现在网上也有很多的框架可以去下载使用,但是肯定不会比自己写的用起来顺手. 对于是否需要使用框架的问题上,本人是持肯定态度的,把一些常用方法进行封装,做成一个功能性的框架,可以很大程度上提高代码的效率,维护也方便. 对于网络上很多教程上使用的"游戏通用MVC框架",现在看来并不符合MVC这种结构性框架的设计思想:要知道,MVC最初是被设计为Web应用的框架,而游戏中的很多事件并不是通过用户点击UI发生的,Vi

  • Unity3D 计时器的实现代码(三种写法总结)

    1.每帧检查 定义一个时间变量 timer,每帧将此时间减去帧间隔时间 Time.deltaTime,如果小于或者等于零,说明定时器到了,执行相应功能代码,将此定时器重置,代码如下: public float timer = 1.0f; // Update is called once per frame void Update() { timer -= Time.deltaTime; if (timer <= 0) { Debug.Log(string.Format("Timer1 is

  • Android应用闪屏页延迟跳转的三种写法

    闪屏页也称之为欢迎页.在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面.闪屏页除了使用户体验更好外,还能给app留出初始化数据的时间.下面,是我总结的闪屏页的三种写法. 准备工作 打开Android Studio,新建一个projectMyStudy,新建一个SplashActivity并在清单文件中将其设置为启动Activity.在布局文件中将SplashActivity的背景设置为一张图片(可以是手机壁纸). <?xm

  • React组件的三种写法总结

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普及和不同业务场景的影响,我们会发现目前主要有三种创建 React 组件的写法:1. ES5写法React.createClass,2. ES6写法React.Component,3. 无状态的函数式写法(纯组件-SFC). 你们最钟爱哪种写法呢?萝卜青菜各有所爱~ 每个团队都有自己的代码规范和开发模

  • pytorch实现特殊的Module--Sqeuential三种写法

    我就废话不多说了,直接上代码吧! # -*- coding: utf-8 -*- #@Time :2019/7/1 13:34 #@Author :XiaoMa import torch as t from torch import nn #Sequential的三种写法 net1=nn.Sequential() net1.add_module('conv',nn.Conv2d(3,3,3)) #Conv2D(输入通道数,输出通道数,卷积核大小) net1.add_module('batchno

  • vue中template的三种写法示例

    第一种(字符串模板写法): 直接写在vue构造器里,这种写法比较直观,适用于html代码不多的场景,但是如果模板里html代码太多,不便于维护,不建议这么写. <!DOCTYPE html> <html> <!-- WARNING! Make sure that you match all Quasar related tags to the same version! (Below it's "@1.7.4") --> <head> &

  • java返回集合为null还是空集合及空集合的三种写法小结

    目录 返回集合为null还是空集合及空集合的三种写法 返回空List的方式 方式一:new ArrayList()   方式二:new ArrayList(0) 方式三:Collections.emptyList()(推荐) 返回集合为null还是空集合及空集合的三种写法 个人认为在自己写接口时,需要返回集合时返回一个空集合,比如mybatis查询如果返回一个集合,结果为空时也会返回一个空集合而不是null. 那么这样有什么好处呢?最大的好处就是调用方不用在判断是否为null,可以直接用,因为不

  • Angularjs中controller的三种写法分享

    前言 在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.angularjs中controller其实就是一个方法,它有三种写法,下面来一起看看吧. 第一种: <pre name="code" class="javascript">var AppController = ['$scope', function($scope){ $sco

  • js自调用匿名函数的三种写法(推荐)

    第一种: (function(){ console.log('hello world") })() 第二种: (function(){ console.log('hello world') }())  第三种: !function(){ console.log('hello world') }() 以上这篇js自调用匿名函数的三种写法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 详解Android 检测权限的三种写法

    本文介绍了详解Android 检测权限的三种写法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 权限检测生效条件: targetSdkVersion 以及 compileSdkVersion 升级到 23 及以上 运行 Android 系统 6.0 及以上 三种检测权限写法: public static boolean checkPermission1(Context context, String[] permissions) { PackageManager p

  • angular1.x ui-route传参的三种写法小结

    如下所示: .state('classrooms',{ url: '/classrooms/:id' }) .state('classrooms',{ url: '/classrooms/{id}' }) .state('activities',{ url: '/activities', params: { id: { value: 42} } }) localhost:3000/#/classrooms/3 function ClassroomController($stateParams){

随机推荐