代码之家  ›  专栏  ›  技术社区  ›  Olivier Pons

元素仍在反弹

  •  2
  • Olivier Pons  · 技术社区  · 7 年前

    使现代化 -添加了一段视频

    我制作了很多教程和论坛中都能看到的东西:

    • 创造了我称之为“物理材料” No bounce "
    • 设置 Dynamic Friction = 0 Static Friction = 0
    • 创建一个立方体并添加一个 Box collider 具有 Material = "No Bounce"
    • 设置 Mass = 1 , Drag = 0 Angular Drag = 0

    现在我为地面添加了另一个立方体,使其非常大,并添加了一个 箱式对撞机 具有 Material=“无反弹”

    我有两个问题: -当它们碰撞时,立方体会反弹(而我的配置不应该反弹) -我制作了一个脚本并将其附加到立方体上,以更改速度,并将其设置为 0 发生碰撞时:

    using UnityEngine;
    
    public class CubeProperties : MonoBehaviour
    {
        private Rigidbody _rb;
        private bool _landing;
    
        private void Start()
        {
            _rb = GetComponentInParent<Rigidbody>();
        }
    
        public void OnCollisionEnter(Collision collision)
        {
            Debug.Log("Collision");
            _landing = true;
        }
    
        public void FixedUpdate()
        {
            if (!_landing) {
                return;
            }
            _rb.velocity = Vector3.zero;
            _landing = false;
        }    
    }
    

    所以在第一次碰撞时,我试着用 _rb.velocity = Vector3.zero; 但是 改变速度没有效果 ,我不明白为什么。我尝试了很多有价值的东西来看看会发生什么。。。但什么都没发生。 我唯一能补充的是,它正在发挥作用: AddForce() 我试着设定一个负值,但这也不起作用。

    我忘了什么?

    下面是一段视频,我希望这段视频很容易理解(我希望我被允许帮助制作视频):

    https://youtu.be/I3C1KBmm5yw

    1 回复  |  直到 7 年前
        1
  •  3
  •   Tyler C    7 年前

    看起来你把2D物理和3D物理混合在一起了。如果是2D场景,您实际上需要使用 2D Rigidbody Box Collider 2D .

    如果这是一个3D场景,看起来就是这样,那么你只需要确保你使用的是正常的场景 OnCollisionEnter .目前,OnCollisionInter2D在该设置中不会被调用。

    为了帮助查看是否有人在呼叫,Unity中的一个好提示是 Debug.Log .如果它被触发,它会向控制台发送消息。