我的物体在与墙壁碰撞时开始旋转

My object begins to spin when collides with the wall

我在 Unity 中有一个盒子,后面跟着一个飞机上的相机。我正在尝试处理盒子和不同物体之间的碰撞。当它与不同的东西碰撞时它会旋转,跳跃并发生奇怪的事情。我向 YouTube 上传了一段视频来展示问题。 The video.

我创建了一个 ,里面有相机和盒子。这个空有 刚体 质量 1.

空有脚本组件:

using UnityEngine;
using System.Collections;

public class Character : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

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

    }
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log ("Entered OnCollisionEnter function");
        if (collision.gameObject.name == "Wall") {
            GetComponent<Rigidbody>().velocity = Vector3.zero;
            Debug.Log ("Inside if statement");
        }

    }
}

如您所见,我试图通过编写代码来阻止立方体移动来处理碰撞。


可以帮助你们的其他信息:

盒子

它有一个盒子对撞机。脚本:

using UnityEngine;
using System.Collections;

public class MoveCharacter : MonoBehaviour {

    public float deltaMovement = 10f;

    // Use this for initialization
    void Start ()
    {
    }

    // Update is called once per frame
    void Update ()
    {
        Moving();
    }


    void Moving()
    {
        //Moves the character to where it needs.
        if (Input.GetKey (KeyCode.A)) {
            transform.Translate (new Vector3 (-deltaMovement, 0f, 0f) * Time.deltaTime);
        } else if (Input.GetKey (KeyCode.D)){
            transform.Translate (new Vector3 (deltaMovement, 0f, 0f) * Time.deltaTime);
        }
        float yRotation = Camera.main.transform.eulerAngles.y;
        float movementX = Mathf.Sin ((yRotation * Mathf.PI) / 180) * deltaMovement;
        float movementZ = Mathf.Cos ((yRotation * Mathf.PI) / 180) * deltaMovement;

        if (Input.GetKey (KeyCode.W)) {
            transform.Translate (new Vector3 (movementX, 0f, movementZ) * Time.deltaTime, Space.World);
        } else if (Input.GetKey (KeyCode.S)){
            transform.Translate (new Vector3 (-movementX, 0f, -movementZ) * Time.deltaTime, Space.World);
        }
    }
}

这是一个带有网格对撞机的平面,有或没有刚体没有区别,同样的问题...


有什么帮助吗?

如果您使用的是物理学,则不应通过更改平移来移动对象,而应通过向对象施加力或至少为其添加速度来移动对象。这将使物理引擎能够正确计算与其他刚体的反应。

如果你移动一个物体,我调整它的平移,那么当发生碰撞时,就好像这个物体已经实体化到引擎的另一个物体中,因为它会以没有速度等的方式移动,你会变得很奇怪行为。