在游戏中,我有一个精灵在Transform
s两点之间移动。
在编辑器中时,子画面会以恒定且缓慢的速度正常在点之间移动。
但是,当我将游戏构建到.exe
文件中并运行该文件时,子画面会在两点之间快速移动。
以下是Sprite控制器的相关代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MonsterController : MonoBehaviour
{
public Transform pointOne;
public Transform pointTwo;
public float speed;
private bool pointA;
private bool goingRight;
private Animator anim;
public string animLeft;
public string animRight;
void Start()
{
pointA = true;
anim = GetComponent<Animator>();
}
void Update()
{
if (pointA)
{
if (transform.position == pointOne.transform.position)
{
pointA = false;
}
transform.position = Vector2.MoveTowards(transform.position, pointOne.position, speed * Time.fixedDeltaTime;);
goingRight = true;
}
else
{
if (transform.position == pointTwo.transform.position)
{
pointA = true;
}
transform.position = Vector2.MoveTowards(transform.position, pointTwo.position, speed * Time.fixedDeltaTime);
goingRight = false;
}
if (goingRight)
{
anim.Play(animRight);
}
else
{
anim.Play(animLeft);
}
}
}
很明显,如果精灵到达该点,则它将使用Vector2.MoveTowards()
移动到另一个点。任何建议和帮助都将不胜感激。
答案 0 :(得分:3)
就像评论中提到的,您应该使用
Update被称为每一帧
FixedUpdate以定义的实时间隔(默认情况下通常为0.02 seconds
)被调用
相应的Time
值是
Time.deltaTime:自上次渲染帧以来经过的实时时间
Time.fixedDeltaTime:物理方法和例如FixedUpdate
被调用(默认为每秒0.02 seconds
或50
次)
因此,只要您的应用以帧速率> 50
运行,您从Time.fixedDeltaTime
(= 0.02
)得到的值就比Time.deltaTime
得到的值大(例如60 fps { {1}})
因此,如果帧速率非常快,则在= 0.017
方法中使用Time.fixedDeltaTime
可能会导致比预期值更大的值/运动。在编辑器中,帧速率比在构建中要慢,因为在构建应用中,您可以摆脱所有UnityEditor开销。
因此应该这样做(也可以使用内联?
-operator来简化Update
的使用,以提高可读性)
if-else