(Unity2d入门)02帧率独立

为何要帧率独立

在 01中我们会发现在更高的帧数下人物移动会更快,这是因为update函数每帧调用一次,更高的帧数下调用更快,因此人物移动过更快。因此我要让游戏在不同的平台上以相同的速度运行,不管玩家的帧率是多少。

解决方法

我们当然拥有多种方法解决这个问题,在这里,我们使用Time.delatTime。

在找到计算移动的指令后,做如下调整:

Vector2 position = (Vector2)transform.position + move * 0.1f * Time.deltaTime;

以下是全代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine.InputSystem;
using UnityEngine;
using static UnityEditor.Searcher.SearcherWindow.Alignment;

public class Player : MonoBehaviour
{

    
    public InputAction MoveAction;//创建一个InputAction变量,创建引用

    void Start()
    {
        MoveAction.Enable();//启用MoveAction输入动作,所有的动作都是默认禁用的,记得启用
    }

    // Update is called once per frame
    void Update()
    {
        //--------------------------使用输入系统包(input Actions)控制玩家移动----------------------------
        Vector2 move = MoveAction.ReadValue<Vector2>();
        Vector2 position = (Vector2)transform.position + move * 0.1f * Time.deltaTime;//乘Time.deltaTime以保证帧率独立
        transform.position = position;
    }
}

当然在修改完代码后我们发现人物的移动速度缓慢,只要修改0.1f为你想要的大小就行了。

原理解释

帧率为60fps的平均增量时间为0.017秒,因为1/60大约等于0.017s。每帧移动0.1f* 0.017 = 0.0017个单位。在60帧后(即1秒的时间),GameObject将前进0.0017个单位60次。0.0017*60大约等于(~=)0.1个单位。
 如果游戏以10fps的帧率运行,那么deltaTime将是0.1s(1/10 = 0.1)。
0.1 * 0.1 = 0.01单位移动帧。在10帧(1秒的时间)后,GameObject仍然会移动0.01*10 = 0.1个单位。
当你使用Time.deltaTime时,无论帧率是多少,玩家角色每秒都会移动相同的量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值