2019-05-09 18:28:24 JianZuoGuang 阅读数 1551
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

Unity中使用Coroutine(协程)实现倒计时功能

在这里插入图片描述

核心代码:

do {
        currentMinute = minute;
            do {
                while (pause) {
                    yield return null;
                }
                second--;
                if (OnCountDowning != null) {
                    OnCountDowning (minute, second);
                }
                yield return new WaitForSeconds (1);
            } while (second > 0);
            second = 60;
            minute--;
        } while (minute >= 0);

定义接口定义闹钟的基础功能:

public interface ICountDown {
    void StartCountDown ();
    void StopCountDown ();
    Action OnCountDownStart { get; set; }
    Action OnCountDownEnd { get; set; }
    Action OnCountDownPause { get; set; }
    Action<int, int> OnCountDowning { get; set; }
    bool Pause { get; set; }
}

部分实现代码:

    /// <summary>
    /// 开始计时回调
    /// </summary>
    /// <value></value>
    public Action OnCountDownStart { get; set; }
    /// <summary>
    /// 计时结束回调
    /// </summary>
    /// <value></value>
    public Action OnCountDownEnd { get; set; }
    /// <summary>
    /// 计时暂停回调
    /// </summary>
    /// <value></value>
    public Action OnCountDownPause { get; set; }
    /// <summary>
    /// 计时过程回调
    /// </summary>
    /// <value>int分别代表分钟数和秒钟数</value>
    public Action<int, int> OnCountDowning { get; set; }

    [SerializeField][Header ("分钟")]
    private int minutes = 0;
    [SerializeField][Header ("秒钟")]
    private int seconds = 0;

    [SerializeField]
    private bool pause = false;
    /// <summary>
    /// 暂停当前倒计时
    /// </summary>
    public bool Pause {
        get { return pause; }
        set {
            pause = value;
            if (OnCountDownEnd != null) {
                OnCountDownEnd ();
                Debug.Log ("时间暂停");
            }
        }
    }
    /// <summary>
    /// 当前秒钟数
    /// </summary>
    /// <value></value>
    public int currentSecond { get; private set; }
    /// <summary>
    /// 当前分钟数
    /// </summary>
    /// <value></value>
    public int currentMinute { get; private set; } //代表当前分钟数

使用方式:

话不多说,Demo中都有,Demo扫码关注 ->当前文章末尾 获取

欢迎关注


在这里插入图片描述

2016-08-25 22:53:33 ballshe 阅读数 16054
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

Unity3D开发学习之路–两种在Unity3D中创建倒计时器的方法

10月28日更新

第三种:使用协成的方法

void Start () {
        float time = 5;
        StartCoroutine (Timer(time));
    }

    public IEnumerator Timer(float time){
        while (time>0) {
            yield return new WaitForSeconds (1);
            print (time);
            time--;
        }
    }

第一种

txtTimer为Text组件

private float nextTime = 1;//一秒之后执行
private void Timer1()
{
 if (nextTime <= Time.time)
    {
        second--;//second为倒计时时间
        txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
        nextTime = Time.time + 1;//到达一秒后加1
        if (second <= 0) this.enabled = false;
    }
}

第二种


private float totalTime = 0;
private void Timer2()
{
  //累加每帧消耗时间
    totalTime += Time.deltaTime;
    if (totalTime >= 1)//每过1秒执行一次
    {
        second--;
        txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
        totalTime = 0;
    }
}   

两种方法都在Update中使用。

2013-12-12 19:20:10 woailvmengmeng 阅读数 4079
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

c#倒计时/计时代码


using UnityEngine;

using System.Collections;
using System;


public class textTest : MonoBehaviour {
    public UILabel countDown;
    public int endTime;
    public int currentTime;
    public int startTime;
    public int second;
    public int minute;
    private string printTime;
    private string stringEndTime;
    void Start () {
       // startTime = 240;  //4分钟倒计时  
       startTime = 0;  //从零开始计时
    }
    void Update () {
       // endTime = startTime - currentTime; //倒计时
     endTime = startTime + currentTime;
        second = endTime % 60;
        minute = endTime / 60;
        currentTime = Mathf.CeilToInt(Time.fixedTime);
        if(second<10)
         {printTime = ":0";
           }else{printTime = ":";}
        stringEndTime = "00:0" + minute + printTime + second;
        //print ("00:0" + minute + printTime + second);
        print(stringEndTime);
        countDown.text = stringEndTime;
        if(endTime<0)
        {endTime = 0;}
        //currentTime.text = DateTime.Now.ToString("hh:mm:ss");
    }
}
2013-09-17 11:17:23 AWNUXCVBN 阅读数 26054
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚
using System;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class TimeCountdown : MonoBehaviour
{


    //之前的一个时间点
    public long startTime = 1435870304;
    //限定时间秒
    private long fixedTime = 200000;
    private long nowTime;


    bool isOver = false;




    // Use this for initialization
    void Start()
    {
        nowTime = (System.DateTime.Now.Ticks - System.DateTime.Parse("1970-01-01").Ticks) / 10000000;
        Debug.Log(nowTime.ToString());
        InvokeRepeating("CountDown", 0, 1);
    }


    // Update is called once per frame
    void Update()
    {
        if (!isOver && nowTime - startTime >= fixedTime)
        {
            Debug.Log("倒计时结束");
            isOver = true;
        }
    }


    void CountDown()
    {
        fixedTime -= 1;
        gameObject.GetComponent<Text>().text = (fixedTime / (60 * 60 * 24)).ToString() + "天"
             + ((fixedTime / 60 - fixedTime / (60 * 60 * 24) * 24 * 60) / 60).ToString() + "小时"
             + ((fixedTime / 60) % 60).ToString() + "分"
             + (fixedTime % 60).ToString() + "秒";
    }
}


2015-04-14 21:29:15 x464436 阅读数 679
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

实现功能:在游戏中根据配置来在满足条件下显示排队:“”服务器已满,当前等待人数*****,倒计时:00:00:00。前端随机一个倒计时分钟,并且在指定分钟内进行每5秒减少排队人数。

实现:NGUI写一个面板,然后提供接口进行数据初始化和时间重置,并且时间结束调用回调,或者点击离开按钮离开排队。

NGUI设计(这里简单设计一下)


代码属性和初始化:


这里做一些变量保存,这里initParmas()和resetTime(3,800)为public接口。用于在外部调用初始化,这里简便就写在一个类里了。

  public void initParmars(params object[] pars)
    {
        if(pars.Length>=1)
            finishCallBack = (Action)pars[0];//设置finiCallBack,params object[] pars作为参数方便扩展

    }


开始刷新面板操作,重复调用refreshTime函数(对时间进行刷新,使用TimeSpan格式化时间)和refreshWaitPeople(5秒刷新人数)函数。


实现简单效果:上为等待时间,下为人数。时间到了会触发finishCallBack函数(一般为外部函数),点击Button会触发onclick函数(一般也为外部函数,可照例添加代码)

并且:在时间到了也可做结束行为操作



private void Timer1() { if (nextTime

博文 来自: L1ght
没有更多推荐了,返回首页