元素仍在弹跳

时间:2018-10-05 23:16:35

标签: c# unity3d

更新-添加了视频

我所做的事情就像您在许多教程和论坛中都能看到的一样:

  • 创建了我称为“ No bounce”的物理材料
  • 设置Dynamic Friction = 0Static Friction = 0
  • 创建了一个多维数据集,并将Box collider添加到Material = "No Bounce"
  • 设置Mass = 1Drag = 0Angular Drag = 0

现在,我为地面添加了另一个立方体,使其变得很大,并用Box collider添加了Material = "No Bounce"

我有2个问题: -当它们碰撞时,立方体会反弹(而我的配置不应该) -我制作了一个脚本并将其附加到立方体,以更改速度,并在发生碰撞时将其设置为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 个答案:

答案 0 :(得分:3)

看起来像将2D物理和3D物理混合在一起。如果是2D场景,您实际上将要使用2D RigidbodyBox Collider 2D

如果这是一个看起来像3D场景,那么您只想确保使用的是普通的OnCollisionEnter。就目前而言,在该设置中不会调用OnCollisionEnter2D。

只是为了帮助查看是否被调用,Debug.Log是Unity中的一个很好的技巧。如果它被解雇,它将向控制台发送一条消息。