首页 > 解决方案 > 在我的情况下使用 FixedUpdate 是否正确?

问题描述

我希望我的问题不是太愚蠢,我对 FixedUpdate 不是很熟悉。我知道 FixedUpdate 通常用于物理,但在我的游戏中,我有以下问题:当它以低 fps 速率运行时,敌人会跳过检查点(因为它们在一帧中移动太多)。动作方法:

    void FixedUpdate()
    {
        TestIfCloseToOtherZombie();
        //chopper la direction dans laquelle aller
        Vector3 dir = target.position - transform.position;
        //déplacer l'enemy
        transform.Translate(dir.normalized * enemy.speed * Time.fixedDeltaTime, Space.World);
        Vector3 rotDir = new Vector3(dir.x, 0, dir.z);
        if(rotDir != Vector3.zero)
        {
            Quaternion lookRotation =  Quaternion.LookRotation(rotDir);
            transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, turnSpeed*Time.fixedDeltaTime);
        }

        //marge d'erreur pour éviter qu'il bug dans le waypoint (+ de speed = + de  marge sinon bug)
        if(Vector3.Distance(transform.position, target.position) <= enemy.wayPointPrecision){
            GetNextWaypoint();
        }

        if(!isToClose)
        {
            enemy.speed = enemy.baseSpeed;
        }
        
        GetCurrentPosition();
    }

目标是敌人要去的检查点。以前,我使用了 wayPointPrecision 值来解决问题。但是当fps太低时,这还不够。

我只想知道是否可以使用 FixedUpdate 来确保独立于帧率计算运动,即使它不使用物理。

标签: c#unity3d

解决方案


FixedUpdate 在您的情况下不会解决问题,但是您可以使用MoveTowards()来代替不会超出目标,在您的示例中它可能很简单:

transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * 2);

推荐阅读