重置游戏后,铰链2D停止正常工作

时间:2019-06-21 16:16:24

标签: c# unity3d

我遇到一个简单的铰链连接2d麻烦,该铰链连接在一个简单的链条上,并附有一个盒子。在重新启动游戏之前,它工作正常,当游戏重新启动时,盒子从链条上掉下来,但链条继续在原处。我不知道是什么原因造成的。这是重置对象的代码。

    private Quaternion startRot;
    private Vector3 startLocalScale;
    private Rigidbody2D rb;
    private HingeJoint2D hj;
    // Start is called before the first frame update
    void Start()
    {
        startPos = transform.position;
        startRot = transform.rotation;
        startLocalScale = transform.localScale;
        hj = GetComponent<HingeJoint2D>();
        if (GetComponent<Rigidbody2D>() != null)
        {
            rb = GetComponent<Rigidbody2D>();
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
    public void ResetObjects()
    {
        transform.position = startPos;
        transform.rotation = startRot;
        transform.localScale = startLocalScale;
        if (hj != null)
            return;


        if (rb != null)
        {
            rb.velocity = Vector3.zero;
        }

    }```

1 个答案:

答案 0 :(得分:0)

您不应该直接访问对象变换,如果您使用的是刚体,则让刚体组件完成工作!否则情况会变得有些混乱。

我今天遇到了这个问题,我使用关节的限制来解决这个问题。

enter image description here

启用使用限制。然后,您可以根据需要编辑约束。

using UnityEngine;

    public class Example : MonoBehaviour
    {
        void Start()
        {
            // Set the hinge limits for a door.
            HingeJoint hinge = GetComponent<HingeJoint>();

            JointLimits limits = hinge.limits;
            limits.min = 0;
            limits.bounciness = 0;
            limits.bounceMinVelocity = 0;
            limits.max = 90;
            hinge.limits = limits;
            hinge.useLimits = true;
        }
    }

来源:https://docs.unity3d.com/ScriptReference/HingeJoint-limits.html