unity3d 受FPS影响的行星

yrdbyhpb  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(122)

我在模拟两个物体间的引力我的星星和我的行星
但是它们会受到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);
        }
    }
ipakzgxi

ipakzgxi1#

如前所述,物理计算应在FixedUpdate()上进行
帧速率独立MonoBehaviour。物理计算的固定更新消息。
物理学有他们自己的 * 帧速率 *,但是他们有固定的Time.fixedDeltaTime而不是变量Time.deltaTime。尽管当你在FixedUpdate()中使用AddForce()时,你不应该乘以delta,因为它是内部处理的。
ForceMode.Force:将输入解释为力(以牛顿为单位),并按力 * DT/质量的值更改速度。
您可以了解有关fixed updateadd force的更多信息。
顺便说一句,如果你应该用Time.deltaTime乘以任何值,那将是每次更新的任何变化的值,因为发生的事情是,通过乘以.1,你使用的值的一部分取决于上一帧的长度。
快速帧的增量较小,较慢帧的增量较大,导致较快帧的值比例较小,并且(...)
希望能有所帮助

相关问题