首页 > 解决方案 > 在 Update 或 FixedUpdate 中移动带有刚体组件的对象是否重要?

问题描述

最后它工作正常。我只是想知道我是否必须使用 addforce 或其他刚体在 fixedupdate 中移动带有刚体的游戏对象,或者只使用更新也很好?

void Update()
    {
        switch (state)
        {
            case TransitionState.MovingTowards:
                var v = destinationTransform.position - transform.position;
                if (v.magnitude < 0.001f)
                {
                    state = TransitionState.Transferring;
                    originTransform = destinationTransform;
                    timer = 0;
                    return;
                }

                t += Time.deltaTime;
                float s = t / duration;

                transform.position = Vector3.Lerp(originPosition,
                    destinationTransform.position, curve.Evaluate(s));

                break;

            case TransitionState.Transferring:
                timer += Time.deltaTime;
                this.transform.position = Vector3.Lerp(originTransform.position, destinationTransform.position, timer);
                if (timer >= 1.0f)
                {
                    this.transform.parent = destinationTransform;
                    transform.localPosition = new Vector3(0, 0, 0);
                    isChild = true;
                    state = TransitionState.None;
                    this.enabled = false;
                    return;
                }
                break;

            default:
                this.enabled = false;
                return;
        }
    }

标签: c#unity3d

解决方案


我只是想知道我是否必须使用 addforce 或其他刚体在 fixedupdate 中移动带有刚体的游戏对象,或者只使用更新也很好?

如果您像您说的那样通过刚体组件移动对象(例如,rigidbody.AddForce()),您应该始终使用FixedUpdate。

更新发生在每一帧时间,但 FixedUpdate 发生在每个“固定更新”时间,这可能与默认更新时间不同。您通常会根据游戏需要更改它。如果您需要更多物理处理,您可以创建固定更新的更新率。如果您的游戏不需要大量物理,那么您可以减少更新物理的频率。


推荐阅读