返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1748|回复: 0

[原创] 【原创】Time类API

[复制链接]
发表于 2021-3-22 18:12:14 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
//TimeScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeScript : MonoBehaviour
{
    // Start is called before the first frame update
    /*
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
    */

    public float timecache1;
    public float timecache2;
    public float speed = 10;
    public float timecache3;
    public float timecache4;
    public float timecache5;
    public float timecache6;



    //Time类小练习,制作一个倒计时,两分钟计时,最后十秒字体变成红色,0秒停止倒计时。

    //根据每渲染一帧更新一次此方法内的代码
    private void Update()
    {
        //Update()方法不受Time.timeScale属性影响

        //deltaTime:以秒为单位,表示每帧的经过时间。
        //通俗点将:Time.deltaTime属性放到Updata生命周期中代表,每一帧的间隔时间
        timecache2 = Time.deltaTime;

        //每渲染帧执行1次,旋转y轴1°,z轴1°
        //如运行设备性能好,渲染帧多,1秒旋转的角度就大,匀速的话实际上是想1秒旋转的角度小一点
        //如运行设备性能差,渲染帧少,1秒旋转的角度就小,匀速的话实际上是想1秒旋转的角度大一点
        //this.transform.Rotate(0, speed * timecache2, speed * timecache2);
        //重点:旋转速度 * 每帧消耗的时间,可以保证旋转速度不受设备性能,以及渲染影响。
        //1帧渲染多,Time.deltaTime的值就越小,反之同理。

        //Update()方法不受Time.timeScale属性影响,但是Time.deltaTime是Time类型,会受影响,所以乘了这个数值,这条语句就会受到Time.timeScale属性影响
        //如果改变Time.timeScale的属性为0,speed * timecache2,代表乘0还是等于0,等于没有旋转
        //所以不要以为是Update()方法受到了Time.timeScale属性影响!

        //真实常用案例!!
        //如果想在游戏暂停时,某个游戏物体还能匀速运行呢(需要乘每一帧间隔时间)
        //首先排除法,代码不能放在FixedUpdate()方法中,因为整个方法受Time.timeScale影响。
        //可以使用Time.unscaledDeltaTime属性,不受时间缩放的每一帧间隔时间
        this.transform.Rotate(0, speed * Time.unscaledDeltaTime, speed * Time.unscaledDeltaTime);

        timecache3 = Time.timeScale;
        timecache4 = Time.unscaledDeltaTime;

        //从游戏开始到到现在所用的时间,该属性只能读取
        //受时间缩放影响的游戏运行时间
        timecache1 = Time.time;

        //不受时间缩放影响的游戏运行时间
        timecache5 = Time.unscaledTime;

        //不受时间缩放影响的游戏运行时间,Unity 5版本以前没有Time.unscaledTime,只有Time.realtimeSinceStartup
        timecache6 = Time.realtimeSinceStartup;



    }

    //固定每0.02执行一次此方法
    private void FixedUpdate()
    {
        //FixedUpdate()方法受Time.timeScale属性影响

        //timecache1 = Time.time;
        //timecache2 = Time.deltaTime;

        //固定每0.02执行一次此方法,与渲染无关,可以不用像Updata一样乘上每一帧的间隔时间,直接写上参数即可
        //this.transform.Rotate(0, speed, speed);
    }

    /*
    private void OnGUI()
    {
        if (GUILayout.Button("游戏内暂停"))
        {
            //Time.timeScale属性:时间缩放的参数设置。这可以用于减慢运动效果,默认正常为1倍数,0为暂停游戏,参数类型是浮点数
            //Time.timeScale属性只会影响FixedUpdate()方法
            Time.timeScale = 0;
        }

        if (GUILayout.Button("恢复游戏"))
        {
            Time.timeScale = 1;
        }

        if (GUILayout.Button("慢动作-减缓时间"))
        {
            Time.timeScale = 0.1F;
        }
    }
    */

}


游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表