c# - 在我的情况下使用 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 来确保独立于帧率计算运动,即使它不使用物理。
解决方案
FixedUpdate 在您的情况下不会解决问题,但是您可以使用MoveTowards()来代替不会超出目标,在您的示例中它可能很简单:
transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * 2);