我在模拟两个物体间的引力我的星星和我的行星
但是它们会受到FPS的影响,随着我的FPS上升和下降,行星会变得越来越快。
我可以把Time.deltaTime
放在哪里来解决这个问题?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Attractor : MonoBehaviour {
const float G = 667.4f;
public Rigidbody star;
public Rigidbody planet;
void Update(){
Vector3 direction = star.position - planet.position;
float distance = direction.magnitude;
if (distance == 0f)
return;
float forceMagnitude = G * (star.mass * planet.mass) / Mathf.Pow(distance, 2);
Vector3 force = direction.normalized * forceMagnitude;
planet.AddForce(force);
}
}
1条答案
按热度按时间ipakzgxi1#
如前所述,物理计算应在
FixedUpdate()
上进行帧速率独立MonoBehaviour。物理计算的固定更新消息。
物理学有他们自己的 * 帧速率 *,但是他们有固定的
Time.fixedDeltaTime
而不是变量Time.deltaTime
。尽管当你在FixedUpdate()
中使用AddForce()
时,你不应该乘以delta,因为它是内部处理的。ForceMode.Force:将输入解释为力(以牛顿为单位),并按力 * DT/质量的值更改速度。
您可以了解有关fixed update和add force的更多信息。
顺便说一句,如果你应该用
Time.deltaTime
乘以任何值,那将是每次更新的任何变化的值,因为发生的事情是,通过乘以.1
,你使用的值的一部分取决于上一帧的长度。快速帧的增量较小,较慢帧的增量较大,导致较快帧的值比例较小,并且(...)
希望能有所帮助