• Unity的脚本的基础语法(2)-Unity中记录时间


    在Unity中记录时间需要用到Time类
    Time类中比较重要的变量为deltaTime(只读)
    deltaTime:指完成最后一帧所花费的时间(从最后一帧到当前帧的间隔(以秒为单位)),也即是增量时间
    使用:如果想均匀地旋转一个物体,在不考虑帧速率的情况下,可以乘以Time.deltaTime

    //旋转
    void Update () {
    		this.transform.Rotate(10 * Time.deltaTime, 0, 0);
    	}
    //移动
    void Update () {
    		this.transform.Translate(0, 0, 10 * Time.deltaTime);//每秒移动10米
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果想每秒增加或者减少一个值,需要乘以Time.deltaTime,同时也要明确在游戏中是需要每秒1个单位还是每帧1个单位的效果。如果是乘以Time.deltaTime,那么游戏对象就会按固定的节奏而不是依赖游戏的帧速率,因此,游戏对象的运动变得更容易控制。

    为什么要用Time.deltaTime?
    Update()每一秒更新的帧数是不一样的,增量时间是实时变动的,而每一帧都是变动的。增量时间保证了无论帧率是多少,都可以让物体移动定值。
    1秒30帧,那么帧量时间就是1/30秒
    1秒180帧,那么帧量时间就是1/180秒

    总的来说,使用Time.deltaTime可以让物体移动或者旋转指定定值。比如,每秒移动N米
    例如

    	public GameObject gameObject;
    	void Update () {
    
    		Vector3 te = gameObject.transform.position;//获取游戏对象的位置坐标
    		te.y += 5 * Time.deltaTime;//沿y轴每秒上升5个单位
    		gameObject.transform.position = te;//设置游戏对象的位置坐标
    
    //这个方法其实和MovePOSiton方法相视
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果涉及刚体,可以写在FixedUpdate方法中。在FixedUpdate方法中,如果想每秒增加或者减少一个值,需要乘以Time.fixedDeltaTime。
    例如

    public GameObject gameObject;
    
        void FixedUpdate()
        {
            Vector3 te = gameObject.GetComponent<Rigidbody>().transform.position;
            te.y += 5 * Time.fixedDeltaTime;
            gameObject.GetComponent<Rigidbody>().transform.position = te;
       
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    小米玩机------MIUI里那些你可能不知道的冷知识
    [附源码]JAVA毕业设计律师事务所网站(系统+LW)
    HIVE内置函数map_keys -- 源码解析
    【数据结构】归并排序和计数排序(排序的总结)
    面试官:线程调用2次start会怎样?我支支吾吾没答上来
    Django中ORM框架的各个操作
    LeetCode 1161.最大层内元素和:层序遍历
    Rust中的输入输出格式变化(非常详细)
    什么编程语言的开发者平均年薪高达94万?
    神经网络 01(介绍)
  • 原文地址:https://blog.csdn.net/ht_game/article/details/125405585