【发布时间】:2018-07-15 00:14:24
【问题描述】:
我制作了一个 2D 游戏。在这个游戏中,我有一个弹丸,我自己移动火是这样的:
void Update()
{
gameObject.transform.position = new Vector3(
gameObject.transform.position.x + baseVelocity * Time.deltaTime,
gameObject.transform.position.y + baseVelocity * Time.deltaTime,
gameObject.transform.position.z);
}
而且,我使用void OnTriggerEnter2D(Collider2D other) 来了解何时发生冲突。
问题是当游戏在 30-FPS 的弱手机上运行时,它不会检测到碰撞,而在 60-FPS 的手机中同样的火会发生碰撞。
我认为这是因为火焰在 30-FPS 手机中移动了 2 倍。
一种选择是使用FixedUpdate() 方法来移动fiers,但它给了我不平稳的运动,我使用Update() 方法来移动,因为它给了我平滑的运动(在这两个方法中我都使用了Time.deltaTime)。
您能否建议我如何在使用平滑运动时更准确?
就像在 Update() 方法中移动对象,但检查对象位置比它所在的位置更多(偏移)!
我忘记指出我将 Fixed TimeStep 的值更改为 0.01 以获得更准确的物理。
提前致谢。
编辑: 我最终自己使用 FixedUpdate() 来移动对象,由于很多原因我不能使用物理引擎,我将 FixedUpdate TPS(tick per second) 设置为 60 左右,以适应我的 60 FPS 更新(和仍然无法弄清楚为什么增加 FixedUpdate TPS 会使对象移动不稳定!)。 并将保持这个问题开放,以便找到更好的答案。
【问题讨论】:
-
使用固定更新。你能展示你在 FixedUpdate 中使用的代码吗?它不应该是生涩的。
-
@RodrigoRodrigues 我说,使用fixedupdate给我带来了生涩的体验,如何处理?
-
检查它是否有效。我会写一个正确的答案
-
@RodrigoRodrigues 我的代码就像我的更新代码一样,我应该使用 fixedDeltaTime 而不是 Time.deltaTime?
标签: unity3d