【问题标题】:Elements still bouncing元素仍在弹跳
【发布时间】:2018-10-07 04:25:08
【问题描述】:

更新 - 添加视频

我制作了许多教程和论坛中可以看到的东西:

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

现在我为地面添加另一个立方体,使其非常大,并添加了 Box colliderMaterial = "No Bounce"

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

【问题讨论】:

  • 我不太了解 Unity,但从纯物理学的角度来看,friction=0 意味着像冰一样滑的东西,与物体是否反弹无关。我希望弹性常数被称为“恢复系数”或类似的。
  • Unity 没有正确使用物理命名,例如你可以搜索他们如何使用单词“Mass”进行基于物理的计算...
  • 查看视频中的设置(并了解一些统一系统的怪癖)。您可以将其从 OnCollisionEnter 更改为 OnCollisionStay 以尝试一下吗?如果可行,我有另一个想法。
  • 你真好,我稍后再试,但现在我已经“带回”了“手动”移动立方体的旧代码,并解决了我的小算法问题。立方体随我的代码掉落 = 没有重力,也没有碰撞检测:我通过代码阻止它们。现在,在解决了优化问题之后,这就像一个魅力(用 Unity 的话说:C# 发明了垃圾收集器,让你的生活更轻松,代码更少,但最终它通常很糟糕,你最终会写出丑陋的代码来避免 GC 工作!并且最终的代码比干净的分配/免费代码
  • 我的另一个问题可能与我的问题有关,即我没有“一个单位 = 一米”。相反!我做了一个 900x1600 的分辨率,在 Unity 中,分辨率为 900 米 x 1600 米。因此我的球体有 100 米高!所以,当然有单位问题,移动一个 100m 的物体是,物体下落很慢。一切都是现实的,所以我的第一件事就是将一切缩小到正确的“一个单位 = 一米”。

标签: c# unity3d


【解决方案1】:

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

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

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

【讨论】:

  • 这是正确答案。此外,如果您希望对象在接触时立即停止,您可以将刚体设置为运动学。但前提是您希望它永远留在那里。
  • 这不起作用。我忘了说我在 2D 中都试过了,现在我在 3D 中尝试了解决方案,但是我在 2D 和 3D 尝试之间发布了这个问题,对此感到抱歉。我已经更新了我的问题以反映现实。这让我抓狂:1 小时让整个东西正常工作,2 天在没有任何可行解决方案的情况下尝试各种可能的方式。
  • 在 2D 中效果更好,因为 AddForce2D 确实有效。这里没有任何工作,就像我正在处理坏的 RigidBody,而 OnCollisionEnter() 被正确调用。
  • WTF 似乎是规模问题。我在搅拌机上做了一个“圆形”立方体,导出它并且它非常小,我不得不将比例更改为 49.1 一切正常,包括碰撞检测,但即使将“刚体设置为运动学”也不起作用。如果我尝试以 1 的比例使用它们,则将“刚体设置为运动学”有效。我会进一步调查。
  • 我已经检查了您的回答是否有效,即使支持本身(我正在为支持付费!!)根本没有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2015-10-29
  • 2013-06-18
  • 2013-05-23
相关资源
最近更新 更多