游戏过程中计时

在玩家脚本(其实就是核心脚本)写下如下函数,并在Update函数中调用

只需一句话 UpdateTime();

该脚本通过计时,将获取的秒数传递给UI管理脚本

    public void UpdateTime()
    {
        //游戏时间
        gametime += Time.deltaTime;
        //Debug.Log((int)gametime);

        //改变UI时间
        UIManager.instance.UpdateTimeBar((int)gametime);
    }

刷新UI时间(UI管理脚本)

必须完整包含以下内容

    //定义一个单例,外部可以方便地访问到这个定义的instance对象
    public static UIManager instance { get; private set; }
   
    private void Awake()
    {
        instance = this;
    }
    //以上代码不知道为什么这么写,但是必须要有

    //刷新时间
    public void UpdateTimeBar(int curtime)
    {
        int min = curtime / 60;
        int sec = curtime % 60;
        if (sec < 10 && min<10)
        {
            TimeBar.text = "0"+min.ToString() + ":0" + sec.ToString();
        }
        if (sec > 10 && min < 10)
        {
            TimeBar.text = "0" + min.ToString() + ":" + sec.ToString();
        }
    }

核心代码分析

UI管理脚本从玩家脚本接收其获取的秒数,将这个数值以00:00的格式显示出来

求分钟数:秒数/60

求剩余秒数(sec < 60):对秒数取60的模

分钟格式处理:不足10的补0

秒数格式处理:不足10的补0

    //刷新时间
    public void UpdateTimeBar(int curtime)
    {
        int min = curtime / 60;
        int sec = curtime % 60;
        if (sec < 10 && min<10)
        {
            TimeBar.text = "0"+min.ToString() + ":0" + sec.ToString();
        }
        if (sec > 10 && min < 10)
        {
            TimeBar.text = "0" + min.ToString() + ":" + sec.ToString();
        }
    }

相关知识

public int x {get;private set;} 是什么意思

这个C#属性:

public int X {get;set;}

是其简写:

private int x; //编译器创建的一个私有的zhi匿名支持字段dao
public int X {
get { return this.x; }
set { this.x = value; }
}

public int x {get;private set;}

是另一种简写。set前面的private声明是告诉编译器属性:X是只读(read-only)的。 

意思是对于外部类不能通过属性X给x赋值,而只能读取其值。

附完整教程:

Unity2d Rubys Adventure 课程设计报告

posted on 2020-06-11 00:58  海月CSDN  阅读(273)  评论(0编辑  收藏  举报