C# 统一以错误的角度反映球体

C# 统一以错误的角度反映球体,c#,unity3d,C#,Unity3d,我一直在玩统一运动,它似乎在默认情况下做了不自然的事情。我想创建一个球体,它围绕桌子以恒定的速度移动,并从以自然角度反射的对象上反弹。我有点难以理解几何体,因为它们似乎反应异常,但 我在一个平面上创建了一个球体,它有4面墙和一些圆柱可以反弹。在我的球体上,我添加了一个脚本: void Start() { rb = GetComponent<Rigidbody>(); rb.velocity = (new Vector3(Random.Range(-1.0f, 1.0f

我一直在玩统一运动,它似乎在默认情况下做了不自然的事情。我想创建一个球体,它围绕桌子以恒定的速度移动,并从以自然角度反射的对象上反弹。我有点难以理解几何体,因为它们似乎反应异常,但

我在一个平面上创建了一个球体,它有4面墙和一些圆柱可以反弹。在我的球体上,我添加了一个脚本:

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.velocity = (new Vector3(Random.Range(-1.0f, 1.0f), 0.0f, Random.Range(-1.0f, 1.0f)) * 2);
}
我也尝试过很多其他的方法,但没有一种方法在碰撞时能产生自然的反射式运动,这与默认的方法有很大的不同

我已经完成了搜索,但似乎没有任何东西能够解决这个问题。以5度角撞击墙壁,并在距离碰撞5度角处反射


我需要一个关于这个主题的适当教程,或者只是一个关于如何对两个碰撞的物体进行适当反射的简单示例…

这里有一些东西需要检查,我会对此进行评论,但我没有足够的声誉lol

  • 如第一条注释中所述,确保“阻力”和“角度阻力”设置为零
  • 确保约束球体的旋转,旋转球的反弹方式与非旋转球不同
  • 向其添加物理材质,以便可以将反弹设置为1,这样在反弹时不会损失能量
  • 确保所有碰撞器在场景中的位置正确(您永远不知道)

  • 如果这些都不起作用,我们需要更多的信息来了解出了什么问题

    你能发布你的刚体的截图吗?如果希望对象以恒定速度移动,则应确保在没有屏幕截图的情况下将“阻力”和“角度阻力”设置为0。。。质量1,阻力0,角度阻力0,使用重力检查(可能不需要),运动学未检查,插值无,碰撞检测离散,约束,除冻结位置Y(如果禁用此选项,则碰撞时球向上反弹)1)检查;2) 开或关似乎是一样的;3) 我有一个物理材料,动态摩擦为0,静态摩擦为0,反弹为1,摩擦组合平均值,反弹组合最大值。我的场障碍很简单。。。底部挤压立方体,尺寸合适。。立方体(网格过滤器)、长方体碰撞器(无物理材质)和混乱渲染器)。球体只是飞机的一小部分,这样就不会引起碰撞检测,并且飞机被锁定,不会坠落或上升。我不确定我必须亲自潜入球体中才能找到它。哈哈,让我自己做同样的事情,看看它是否有效,我会给你回复的。它只是一个封闭盒子里的球体,对吗?我明白你的意思,它对我也有同样的作用,让我把它弄得乱七八糟,看看我能想出什么来。它似乎不喜欢低速,如果你提高速度,但降低时标,它应该工作得很好。我注意到另一件事,如果球太大,它会撞到一个角落,失去一个方向的所有速度,并“粘”到墙上。
    void OnCollisionEnter(Collision col)
    {
        Vector3 oldVelocity = rb.velocity;
        Vector3 normal = col.contacts[0].normal;
    
        rb.velocity = Vector3.Reflect(oldVelocity, normal);
    }